diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2019-01-09 00:52:47 -0500 |
---|---|---|
committer | Brian Ashworth <bosrsf04@gmail.com> | 2019-01-09 01:07:29 -0500 |
commit | 1feb2ce064140ccd318f35eec2fa62c89ed4e9d9 (patch) | |
tree | ea273b5cc651b4977139f901db9cd767f0788ff5 /sway/input | |
parent | da8f24de1d3d5843142be1164919ca6a49155ae9 (diff) |
keyboard: update repeat timer before execution
Since the keyboard can be destroyed by executing a binding (reloading
with a different seat attachment config), update the repeat timer before
executing the binding.
Diffstat (limited to 'sway/input')
-rw-r--r-- | sway/input/keyboard.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/sway/input/keyboard.c b/sway/input/keyboard.c index c1b53237..46286410 100644 --- a/sway/input/keyboard.c +++ b/sway/input/keyboard.c @@ -295,14 +295,10 @@ static void handle_keyboard_key(struct wl_listener *listener, void *data) { get_active_binding(&keyboard->state_keysyms_raw, config->current_mode->keysym_bindings, &binding, raw_modifiers, false, input_inhibited, device_identifier); - - if (binding) { - seat_execute_command(seat, binding); - handled = true; - } } - // Set up (or clear) keyboard repeat for a pressed binding + // Set up (or clear) keyboard repeat for a pressed binding. Since the + // binding may remove the keyboard, the timer needs to be updated first if (binding && wlr_device->keyboard->repeat_info.delay > 0) { keyboard->repeat_binding = binding; if (wl_event_source_timer_update(keyboard->key_repeat_source, @@ -316,6 +312,11 @@ static void handle_keyboard_key(struct wl_listener *listener, void *data) { } } + if (binding) { + seat_execute_command(seat, binding); + handled = true; + } + // Compositor bindings if (!handled && event->state == WLR_KEY_PRESSED) { handled = keyboard_execute_compositor_binding( |