diff options
| -rw-r--r-- | input_field.c | 11 | ||||
| -rw-r--r-- | input_field.h | 3 | ||||
| -rw-r--r-- | keyboard.c | 26 |
3 files changed, 22 insertions, 18 deletions
diff --git a/input_field.c b/input_field.c index 026a22c..114019a 100644 --- a/input_field.c +++ b/input_field.c @@ -3,7 +3,7 @@ #include "input_field.h" #include "array.h" -void type_key(client_state* state, xkb_keysym_t keysym) { +bool type_key(client_state* state, xkb_keysym_t keysym) { bool ctrl = xkb_state_mod_name_is_active(state->xkb_state, XKB_MOD_NAME_CTRL, XKB_STATE_MODS_EFFECTIVE); // exit app @@ -12,13 +12,13 @@ void type_key(client_state* state, xkb_keysym_t keysym) { (keysym == XKB_KEY_Escape)) { state->running = false; - return; + return false; } // submit line if (keysym == XKB_KEY_Return || keysym == XKB_KEY_KP_Enter) { submit_line(state); - return; + return false; } // delete @@ -28,7 +28,7 @@ void type_key(client_state* state, xkb_keysym_t keysym) { } else { array_pop(state->input_buffer); } - return; + return true; } // type char into buffer @@ -38,7 +38,10 @@ void type_key(client_state* state, xkb_keysym_t keysym) { for (int i = 0; i < strlen(buf); i++) { array_add(state->input_buffer, buf[i]); } + return true; } + + return false; } void submit_line(client_state* state) { diff --git a/input_field.h b/input_field.h index 64cb557..f3379d4 100644 --- a/input_field.h +++ b/input_field.h @@ -3,7 +3,8 @@ #include "state.h" -void type_key(client_state* state, xkb_keysym_t keysym); +// returns true if the key should repeat +bool type_key(client_state* state, xkb_keysym_t keysym); void submit_line(client_state* state); #endif @@ -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) { |
