diff options
-rw-r--r-- | README.de.md | 2 | ||||
-rw-r--r-- | README.el.md | 2 | ||||
-rw-r--r-- | README.fr.md | 2 | ||||
-rw-r--r-- | README.it.md | 2 | ||||
-rw-r--r-- | README.ja.md | 2 | ||||
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | README.pt.md | 2 | ||||
-rw-r--r-- | README.ru.md | 2 | ||||
-rw-r--r-- | README.uk.md | 2 | ||||
-rw-r--r-- | completions/zsh/_swaygrab | 23 | ||||
-rw-r--r-- | include/sway/input/keyboard.h | 3 | ||||
-rw-r--r-- | include/swaygrab/json.h | 10 | ||||
-rw-r--r-- | include/util.h | 1 | ||||
-rw-r--r-- | meson.build | 1 | ||||
-rw-r--r-- | security.d/00-defaults.in | 6 | ||||
-rw-r--r-- | sway/input/keyboard.c | 40 | ||||
-rw-r--r-- | sway/sway.1.scd | 2 | ||||
-rw-r--r-- | swayidle/swayidle.1.scd | 2 |
18 files changed, 46 insertions, 60 deletions
diff --git a/README.de.md b/README.de.md index 206a1040..a872e888 100644 --- a/README.de.md +++ b/README.de.md @@ -64,8 +64,6 @@ Abhängigkeiten: * cairo * gdk-pixbuf2 * * pam ** -* imagemagick (erforderlich für Bildaufnahme mit swaygrab) -* ffmpeg (erforderlich für Videoaufnahme swaygrab) * [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (erforderlich für man pages) _\*Nur erforderlich für swaybar, swaybg, und swaylock_ diff --git a/README.el.md b/README.el.md index 5c70beff..6887fe8e 100644 --- a/README.el.md +++ b/README.el.md @@ -57,8 +57,6 @@ To username μου στο Freenode είναι kon14 και θα με βρείτ * cairo * gdk-pixbuf2 * * pam ** -* imagemagick (αναγκαίο για καταγραφή εικόνας μέσω του swaygrab) -* ffmpeg (αναγκαίο για καταγραφή video μέσω του swaygrab) * [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages) _\*Απαιτείται μόνο για swaybar, swaybg, and swaylock_ diff --git a/README.fr.md b/README.fr.md index 0d2573f9..6ea4d14c 100644 --- a/README.fr.md +++ b/README.fr.md @@ -59,8 +59,6 @@ Installez les dépendances : * cairo * gdk-pixbuf2 * * pam ** -* imagemagick (requis pour la capture d'image avec swaygrab) -* ffmpeg (requis pour la capture vidéo avec swaygrab) * [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (requis pour les pages man) _\*Uniquement requis pour swaybar, swaybg, and swaylock_ diff --git a/README.it.md b/README.it.md index 0d81ea54..3b1b1ebc 100644 --- a/README.it.md +++ b/README.it.md @@ -60,8 +60,6 @@ Installa queste dipendenze: * cairo * gdk-pixbuf2 * * pam ** -* imagemagick (richiesto per catturare immagini con swaygrab) -* ffmpeg (rrichiesto per catturare video con swaygrab) * [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (rrichiesto per man pages) _\*Richiesto solo per swaybar, swaybg, e swaylock_ diff --git a/README.ja.md b/README.ja.md index 476d7472..7b437966 100644 --- a/README.ja.md +++ b/README.ja.md @@ -50,8 +50,6 @@ Swayは沢山のディストリビューションで提供されています。" * cairo * gdk-pixbuf2 * * pam ** -* imagemagick (swaygrabでスクリーンショットを撮るのに必要です) -* ffmpeg (swaygrabで画面を録画するのに必要です) * [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (manで必要です) _\*swaybar,swaybg,swaylockでのみ必要です_ @@ -58,8 +58,6 @@ Install dependencies: * gdk-pixbuf2 * * pam ** * dbus >= 1.10 *** -* imagemagick (required for image capture with swaygrab) -* ffmpeg (required for video capture with swaygrab) * [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages) _\*Only required for swaybar, swaybg, and swaylock_ diff --git a/README.pt.md b/README.pt.md index d1ef245f..9089c8c6 100644 --- a/README.pt.md +++ b/README.pt.md @@ -66,8 +66,6 @@ Antes de iniciar a compilação, instale as dependências: * cairo * gdk-pixbuf2 * * pam ** -* imagemagick (capturar imagem com o swaygrab) -* ffmpeg (capturar vídeo com o swaygrab) * [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (man pages) _\*Dependência apenas de swaybar, swaybg, e swaylock_ diff --git a/README.ru.md b/README.ru.md index 3b3de19a..68675db3 100644 --- a/README.ru.md +++ b/README.ru.md @@ -62,8 +62,6 @@ Sway доступен во многих дистрибутивах и наход * gdk-pixbuf2 * * pam ** * dbus >= 1.10 *** -* imagemagick (требуется для захвата изображений через swaygrab) -* ffmpeg (требуется для захвата видео через swaygrab) * [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages) _\*Требуется только для swaybar, swaybg и swaylock_ diff --git a/README.uk.md b/README.uk.md index 55698487..c31a3ea9 100644 --- a/README.uk.md +++ b/README.uk.md @@ -66,8 +66,6 @@ Sway доступний у багатьох дистрибутивах Linux (а * cairo * gdk-pixbuf2 * * pam ** -* imagemagick (для захоплення зображень за допомогою swaygrab) -* ffmpeg (для захоплення відео за допомогою swaygrab) * [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages) _\*Лише для swaybar, swaybg та swaylock_ diff --git a/completions/zsh/_swaygrab b/completions/zsh/_swaygrab deleted file mode 100644 index 0f9846f4..00000000 --- a/completions/zsh/_swaygrab +++ /dev/null @@ -1,23 +0,0 @@ -#compdef swaygrab -#----------------- -# Description -# ----------- -# -# Completion script for swaygrab in sway wm (http://swaywm.org) -# -# ----------------------------------------------------- -# Author -# ------ -# -# * Seth Barberee <seth.barberee@gmail.com> -# -# ------------------------------------------ - -_arguments -s \ - '(-h --help)'{-h,--help}'[Shows help message]' \ - '(-c --capture)'{-c,--capture}'[Captures multiple frames as video and passes them to ffmpeg]' \ - '(-o --output)'{-o,--output}'[Use the specified output. If not specified then current focused output will be used]' \ - '(-v --version)'{-v,--version}'[Print the version (of swaymsg) and quit]' \ - '(-s --socket)'{-s,--socket}'[Use the specified socket path.]:files:_files' \ - '(-r --rate)'{-r,--rate}'[Specify a framerate (in fps). Used in combination with -c. Default is 30 and must be an integer]' \ - '(--raw)--raw[Instead of ImageMagick or ffmpeg, dump raw rgba data to stdout]' diff --git a/include/sway/input/keyboard.h b/include/sway/input/keyboard.h index 6713398e..6d28454c 100644 --- a/include/sway/input/keyboard.h +++ b/include/sway/input/keyboard.h @@ -38,6 +38,9 @@ struct sway_keyboard { struct sway_shortcut_state state_keysyms_raw; struct sway_shortcut_state state_keycodes; struct sway_binding *held_binding; + + struct wl_event_source *key_repeat_source; + struct sway_binding *repeat_binding; }; struct sway_keyboard *sway_keyboard_create(struct sway_seat *seat, diff --git a/include/swaygrab/json.h b/include/swaygrab/json.h deleted file mode 100644 index c1093ef1..00000000 --- a/include/swaygrab/json.h +++ /dev/null @@ -1,10 +0,0 @@ -#include <json-c/json.h> -#include "wlc/wlc.h" - -void init_json_tree(int socketfd); -void free_json_tree(); -char *get_focused_output(); -char *create_payload(const char *output, struct wlc_geometry *g); -struct wlc_geometry *get_container_geometry(json_object *container); -json_object *get_focused_container(); -json_object *get_output_container(const char *output); diff --git a/include/util.h b/include/util.h index bda941ce..9277fa6e 100644 --- a/include/util.h +++ b/include/util.h @@ -2,6 +2,7 @@ #define _SWAY_UTIL_H #include <stdint.h> +#include <stdbool.h> #include <unistd.h> #include <sys/types.h> #include <xkbcommon/xkbcommon.h> diff --git a/meson.build b/meson.build index 5be1f8d2..05d334d2 100644 --- a/meson.build +++ b/meson.build @@ -183,7 +183,6 @@ endif if (get_option('zsh_completions')) zsh_files = files( 'completions/zsh/_sway', - 'completions/zsh/_swaygrab', 'completions/zsh/_swaylock', 'completions/zsh/_swaymsg', ) diff --git a/security.d/00-defaults.in b/security.d/00-defaults.in index e4626477..be7b9d06 100644 --- a/security.d/00-defaults.in +++ b/security.d/00-defaults.in @@ -12,7 +12,6 @@ permit * fullscreen keyboard mouse permit @prefix@/bin/swaylock lock permit @prefix@/bin/swaybg background -permit @prefix@/bin/swaygrab screenshot permit @prefix@/bin/swaybar panel # Configures enabled IPC features for specific programs @@ -36,11 +35,6 @@ ipc @prefix@/bin/swaybar { } } -ipc @prefix@/bin/swaygrab { - outputs enabled - tree enabled -} - ipc @prefix@/bin/swaylock { outputs enabled } diff --git a/sway/input/keyboard.c b/sway/input/keyboard.c index 8dc8239c..160ef10b 100644 --- a/sway/input/keyboard.c +++ b/sway/input/keyboard.c @@ -264,6 +264,7 @@ static void handle_keyboard_key(struct wl_listener *listener, void *data) { } // Identify and execute active pressed binding + struct sway_binding *next_repeat_binding = NULL; if (event->state == WLR_KEY_PRESSED) { struct sway_binding *binding_pressed = NULL; get_active_binding(&keyboard->state_keycodes, @@ -279,6 +280,21 @@ static void handle_keyboard_key(struct wl_listener *listener, void *data) { if (binding_pressed) { seat_execute_command(seat, binding_pressed); handled = true; + next_repeat_binding = binding_pressed; + } + } + + // Set up (or clear) keyboard repeat for a pressed binding + if (next_repeat_binding && wlr_device->keyboard->repeat_info.delay > 0) { + keyboard->repeat_binding = next_repeat_binding; + if (wl_event_source_timer_update(keyboard->key_repeat_source, + wlr_device->keyboard->repeat_info.delay) < 0) { + wlr_log(WLR_DEBUG, "failed to set key repeat timer"); + } + } else if (keyboard->repeat_binding) { + keyboard->repeat_binding = NULL; + if (wl_event_source_timer_update(keyboard->key_repeat_source, 0) < 0) { + wlr_log(WLR_DEBUG, "failed to disarm key repeat timer"); } } @@ -303,6 +319,26 @@ static void handle_keyboard_key(struct wl_listener *listener, void *data) { transaction_commit_dirty(); } +static int handle_keyboard_repeat(void *data) { + struct sway_keyboard *keyboard = (struct sway_keyboard *)data; + struct wlr_keyboard *wlr_device = + keyboard->seat_device->input_device->wlr_device->keyboard; + if (keyboard->repeat_binding) { + if (wlr_device->repeat_info.rate > 0) { + // We queue the next event first, as the command might cancel it + if (wl_event_source_timer_update(keyboard->key_repeat_source, + 1000 / wlr_device->repeat_info.rate) < 0) { + wlr_log(WLR_DEBUG, "failed to update key repeat timer"); + } + } + + seat_execute_command(keyboard->seat_device->sway_seat, + keyboard->repeat_binding); + transaction_commit_dirty(); + } + return 0; +} + static void handle_keyboard_modifiers(struct wl_listener *listener, void *data) { struct sway_keyboard *keyboard = @@ -328,6 +364,9 @@ struct sway_keyboard *sway_keyboard_create(struct sway_seat *seat, wl_list_init(&keyboard->keyboard_key.link); wl_list_init(&keyboard->keyboard_modifiers.link); + keyboard->key_repeat_source = wl_event_loop_add_timer(server.wl_event_loop, + handle_keyboard_repeat, keyboard); + return keyboard; } @@ -441,5 +480,6 @@ void sway_keyboard_destroy(struct sway_keyboard *keyboard) { } wl_list_remove(&keyboard->keyboard_key.link); wl_list_remove(&keyboard->keyboard_modifiers.link); + wl_event_source_remove(keyboard->key_repeat_source); free(keyboard); } diff --git a/sway/sway.1.scd b/sway/sway.1.scd index 5b770cce..0c2ee974 100644 --- a/sway/sway.1.scd +++ b/sway/sway.1.scd @@ -92,4 +92,4 @@ source contributors. For more information about sway development, see # SEE ALSO -*sway*(5) *swaymsg*(1) *swaygrab*(1) *sway-input*(5) *sway-bar*(5) +*sway*(5) *swaymsg*(1) *sway-input*(5) *sway-bar*(5) diff --git a/swayidle/swayidle.1.scd b/swayidle/swayidle.1.scd index 5cd4a7fd..7c1b138a 100644 --- a/swayidle/swayidle.1.scd +++ b/swayidle/swayidle.1.scd @@ -58,4 +58,4 @@ https://github.com/swaywm/sway. # SEE ALSO -*sway*(5) *swaymsg*(1) *swaygrab*(1) *sway-input*(5) *sway-bar*(5) +*sway*(5) *swaymsg*(1) *sway-input*(5) *sway-bar*(5) |