aboutsummaryrefslogtreecommitdiff
path: root/swt.c
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2023-04-30 10:11:12 +0200
committerNathan Reiner <nathan@nathanreiner.xyz>2023-04-30 10:11:12 +0200
commitfcda44e3e88a4c8bc1867530b65cb5cf415fe2ca (patch)
tree2f3d0cbe1a02ad9b725d89628eb7fef0885182ab /swt.c
parentace4da505b76e7db8766b395633603c491026c8f (diff)
disable keyrepeat on keyboard leave
Diffstat (limited to 'swt.c')
-rw-r--r--swt.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/swt.c b/swt.c
index f71d791..53e419f 100644
--- a/swt.c
+++ b/swt.c
@@ -1,4 +1,5 @@
#include <bits/time.h>
+#include <bits/types/struct_itimerspec.h>
#include <linux/input-event-codes.h>
#include <sys/mman.h>
#include <sys/timerfd.h>
@@ -87,6 +88,7 @@ static void keyboard_enter(void *data, struct wl_keyboard *keyboard, uint32_t se
static void keyboard_key(void *data, struct wl_keyboard *keyboard, uint32_t serial, uint32_t time, uint32_t key, uint32_t client);
static void keyboard_modifiers(void *data, struct wl_keyboard *keyboard, uint32_t serial, uint32_t depressed, uint32_t latched, uint32_t locked, uint32_t group);
static void keyboard_repeat_info(void *data, struct wl_keyboard *keyboard, int32_t rate, int32_t delay);
+static void keyboard_leave(void *data, struct wl_keyboard *keyboard, uint32_t serial, struct wl_surface *surface);
static void handle_keyboard_event();
static void pointer_enter(void *data, struct wl_pointer *pointer, uint32_t serial, struct wl_surface *surface, wl_fixed_t x, wl_fixed_t y);
static void pointer_leave(void *data, struct wl_pointer *pointer, uint32_t serial, struct wl_surface *surface);
@@ -136,7 +138,7 @@ static const struct wl_keyboard_listener keyboard_listener = {
.modifiers = keyboard_modifiers,
.repeat_info = keyboard_repeat_info,
.enter = keyboard_enter,
- .leave = dummy,
+ .leave = keyboard_leave,
};
static const struct wl_pointer_listener pointer_listener = {
@@ -620,6 +622,15 @@ keyboard_enter(void *data, struct wl_keyboard *keyboard, uint32_t serial, struct
void
+keyboard_leave(void *data, struct wl_keyboard *keyboard, uint32_t serial, struct wl_surface *surface)
+{
+ struct itimerspec spec = { 0 };
+ timerfd_settime(client.kb.repeat.timer, 0, &spec, 0);
+ win.redraw = 1;
+}
+
+
+void
keyboard_key(void *data, struct wl_keyboard *keyboard, uint32_t serial, uint32_t time, uint32_t key, uint32_t state)
{
struct itimerspec spec = { 0 };