aboutsummaryrefslogtreecommitdiff
path: root/keyboard.c
diff options
context:
space:
mode:
authorJack Jamison <jackqjamison@gmail.com>2025-10-12 00:11:33 -0400
committerJack Jamison <jackqjamison@gmail.com>2025-10-12 00:11:33 -0400
commitd58f2e870b8f998262609b98f91d290b65ab80d3 (patch)
treeacb51286dc7855396e64c228f0fd0a968d41e851 /keyboard.c
parent60585faf7951cffb6046280bdd5f91275fb97d65 (diff)
improved key repeat
Diffstat (limited to 'keyboard.c')
-rw-r--r--keyboard.c26
1 files changed, 13 insertions, 13 deletions
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) {