From d58f2e870b8f998262609b98f91d290b65ab80d3 Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Sun, 12 Oct 2025 00:11:33 -0400 Subject: improved key repeat --- keyboard.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'keyboard.c') diff --git a/keyboard.c b/keyboard.c index 3be61a9..5460570 100644 --- a/keyboard.c +++ b/keyboard.c @@ -79,19 +79,19 @@ 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) { - type_key(state, keysym); - - // start repeat - state->repeat_key = keysym; - struct itimerspec timer = {0}; - if (state->key_repeat_rate > 1) - timer.it_interval.tv_nsec = 1000000000 / state->key_repeat_rate; - else - timer.it_interval.tv_sec = 1; - timer.it_value.tv_sec = state->key_repeat_delay / 1000; - timer.it_value.tv_nsec = (state->key_repeat_delay % 1000) * 1000000; - if (timerfd_settime(state->key_repeat_timer_fd, 0, &timer, NULL) == -1) { - printf("error setting key repeat timer\n"); + if(type_key(state, keysym)) { + // start repeat + state->repeat_key = keysym; + struct itimerspec timer = {0}; + if (state->key_repeat_rate > 1) + timer.it_interval.tv_nsec = 1000000000 / state->key_repeat_rate; + else + timer.it_interval.tv_sec = 1; + timer.it_value.tv_sec = state->key_repeat_delay / 1000; + timer.it_value.tv_nsec = (state->key_repeat_delay % 1000) * 1000000; + 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) { -- cgit v1.2.3