diff options
| author | Jack Jamison <jackqjamison@gmail.com> | 2025-10-14 15:39:58 -0400 |
|---|---|---|
| committer | Jack Jamison <jackqjamison@gmail.com> | 2025-10-14 15:39:58 -0400 |
| commit | 0ee7b30f033beb390226e725b9d34f4666363183 (patch) | |
| tree | 5b814dd177b53e45c6124e6214b77874b7399388 | |
| parent | 8296fa3a8fa773adbf7544910fd12f84c278cfc3 (diff) | |
improve key repeat logic
| -rw-r--r-- | keyboard.c | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -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, |
