aboutsummaryrefslogtreecommitdiffstats
path: root/swaynag
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2019-04-14 01:06:09 -0400
committerLibravatar Simon Ser <contact@emersion.fr>2019-04-14 10:24:19 +0300
commit8c69da11bbe70caa2f5db1665e9d60387604c5e4 (patch)
tree3aa7bc628c8c3121ecff718b21faf49bf55cd9bb /swaynag
parentFix scratchpad fullscreen behavior and crash (diff)
downloadsway-8c69da11bbe70caa2f5db1665e9d60387604c5e4.tar.gz
sway-8c69da11bbe70caa2f5db1665e9d60387604c5e4.tar.zst
sway-8c69da11bbe70caa2f5db1665e9d60387604c5e4.zip
swaynag: fix pointer management
Currently on master, swaynag will retrieve a pointer instance whenever the capabilities change and WL_SEAT_CAPBILITY_POINTER is set. The pointer instances were never being destroyed so swaynag received events multiple times due to having several instances of the pointer. This fixes it so if there is already a pointer instance, swaynag does not attempt to retrieve another. Additionally, if the pointer capability is removed, the pointer instance is destroyed.
Diffstat (limited to 'swaynag')
-rw-r--r--swaynag/swaynag.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/swaynag/swaynag.c b/swaynag/swaynag.c
index f0c6a3c5..eb31da57 100644
--- a/swaynag/swaynag.c
+++ b/swaynag/swaynag.c
@@ -239,10 +239,14 @@ static struct wl_pointer_listener pointer_listener = {
239static void seat_handle_capabilities(void *data, struct wl_seat *wl_seat, 239static void seat_handle_capabilities(void *data, struct wl_seat *wl_seat,
240 enum wl_seat_capability caps) { 240 enum wl_seat_capability caps) {
241 struct swaynag *swaynag = data; 241 struct swaynag *swaynag = data;
242 if ((caps & WL_SEAT_CAPABILITY_POINTER)) { 242 bool cap_pointer = caps & WL_SEAT_CAPABILITY_POINTER;
243 if (cap_pointer && !swaynag->pointer.pointer) {
243 swaynag->pointer.pointer = wl_seat_get_pointer(wl_seat); 244 swaynag->pointer.pointer = wl_seat_get_pointer(wl_seat);
244 wl_pointer_add_listener(swaynag->pointer.pointer, &pointer_listener, 245 wl_pointer_add_listener(swaynag->pointer.pointer, &pointer_listener,
245 swaynag); 246 swaynag);
247 } else if (!cap_pointer && swaynag->pointer.pointer) {
248 wl_pointer_destroy(swaynag->pointer.pointer);
249 swaynag->pointer.pointer = NULL;
246 } 250 }
247} 251}
248 252