aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sway/input/keyboard.h2
-rw-r--r--sway/input/keyboard.c18
2 files changed, 10 insertions, 10 deletions
diff --git a/include/sway/input/keyboard.h b/include/sway/input/keyboard.h
index 660cdc9c..6d28454c 100644
--- a/include/sway/input/keyboard.h
+++ b/include/sway/input/keyboard.h
@@ -41,8 +41,6 @@ struct sway_keyboard {
41 41
42 struct wl_event_source *key_repeat_source; 42 struct wl_event_source *key_repeat_source;
43 struct sway_binding *repeat_binding; 43 struct sway_binding *repeat_binding;
44 int key_repeat_initial_delay; // first key repeat event delay, in ms
45 int key_repeat_step_delay; // subsequent repeat delay, in ms
46}; 44};
47 45
48struct sway_keyboard *sway_keyboard_create(struct sway_seat *seat, 46struct sway_keyboard *sway_keyboard_create(struct sway_seat *seat,
diff --git a/sway/input/keyboard.c b/sway/input/keyboard.c
index be000fb9..160ef10b 100644
--- a/sway/input/keyboard.c
+++ b/sway/input/keyboard.c
@@ -285,10 +285,10 @@ static void handle_keyboard_key(struct wl_listener *listener, void *data) {
285 } 285 }
286 286
287 // Set up (or clear) keyboard repeat for a pressed binding 287 // Set up (or clear) keyboard repeat for a pressed binding
288 if (next_repeat_binding) { 288 if (next_repeat_binding && wlr_device->keyboard->repeat_info.delay > 0) {
289 keyboard->repeat_binding = next_repeat_binding; 289 keyboard->repeat_binding = next_repeat_binding;
290 if (wl_event_source_timer_update(keyboard->key_repeat_source, 290 if (wl_event_source_timer_update(keyboard->key_repeat_source,
291 keyboard->key_repeat_initial_delay) < 0) { 291 wlr_device->keyboard->repeat_info.delay) < 0) {
292 wlr_log(WLR_DEBUG, "failed to set key repeat timer"); 292 wlr_log(WLR_DEBUG, "failed to set key repeat timer");
293 } 293 }
294 } else if (keyboard->repeat_binding) { 294 } else if (keyboard->repeat_binding) {
@@ -321,11 +321,15 @@ static void handle_keyboard_key(struct wl_listener *listener, void *data) {
321 321
322static int handle_keyboard_repeat(void *data) { 322static int handle_keyboard_repeat(void *data) {
323 struct sway_keyboard *keyboard = (struct sway_keyboard *)data; 323 struct sway_keyboard *keyboard = (struct sway_keyboard *)data;
324 struct wlr_keyboard *wlr_device =
325 keyboard->seat_device->input_device->wlr_device->keyboard;
324 if (keyboard->repeat_binding) { 326 if (keyboard->repeat_binding) {
325 // We queue the next event first, as the command might cancel it 327 if (wlr_device->repeat_info.rate > 0) {
326 if (wl_event_source_timer_update(keyboard->key_repeat_source, 328 // We queue the next event first, as the command might cancel it
327 keyboard->key_repeat_step_delay) < 0) { 329 if (wl_event_source_timer_update(keyboard->key_repeat_source,
328 wlr_log(WLR_DEBUG, "failed to update key repeat timer"); 330 1000 / wlr_device->repeat_info.rate) < 0) {
331 wlr_log(WLR_DEBUG, "failed to update key repeat timer");
332 }
329 } 333 }
330 334
331 seat_execute_command(keyboard->seat_device->sway_seat, 335 seat_execute_command(keyboard->seat_device->sway_seat,
@@ -362,8 +366,6 @@ struct sway_keyboard *sway_keyboard_create(struct sway_seat *seat,
362 366
363 keyboard->key_repeat_source = wl_event_loop_add_timer(server.wl_event_loop, 367 keyboard->key_repeat_source = wl_event_loop_add_timer(server.wl_event_loop,
364 handle_keyboard_repeat, keyboard); 368 handle_keyboard_repeat, keyboard);
365 keyboard->key_repeat_initial_delay = 660;
366 keyboard->key_repeat_step_delay = 40;
367 369
368 return keyboard; 370 return keyboard;
369} 371}