From 0ee7b30f033beb390226e725b9d34f4666363183 Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Tue, 14 Oct 2025 15:39:58 -0400 Subject: improve key repeat logic --- keyboard.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'keyboard.c') diff --git a/keyboard.c b/keyboard.c index 4929dcf..30a4859 100644 --- a/keyboard.c +++ b/keyboard.c @@ -79,7 +79,8 @@ void wl_keyboard_key(void *data, struct wl_keyboard *wl_keyboard, xkb_keysym_t keysym = xkb_state_key_get_one_sym(state->xkb_state, key + 8); if (key_state == WL_KEYBOARD_KEY_STATE_PRESSED) { - if(type_key(state, keysym)) { + // if the key is one we should repeat + if (type_key(state, keysym)) { // start repeat state->repeat_key = keysym; struct itimerspec timer = {0}; @@ -92,16 +93,18 @@ void wl_keyboard_key(void *data, struct wl_keyboard *wl_keyboard, if (timerfd_settime(state->key_repeat_timer_fd, 0, &timer, NULL) == -1) { printf("error setting key repeat timer\n"); } - } - - } else if (key_state == WL_KEYBOARD_KEY_STATE_RELEASED) { - - if (keysym == state->repeat_key) { - // stop repeat + } else { + // otherwise stop repeat struct itimerspec timer = {0}; timerfd_settime(state->key_repeat_timer_fd, 0, &timer, NULL); } } + + if (key_state == WL_KEYBOARD_KEY_STATE_RELEASED && keysym == state->repeat_key) { + // stop repeat + struct itimerspec timer = {0}; + timerfd_settime(state->key_repeat_timer_fd, 0, &timer, NULL); + } } void wl_keyboard_modifiers(void *data, struct wl_keyboard *wl_keyboard, -- cgit v1.2.3