summaryrefslogtreecommitdiffstats
path: root/dwl-patches/patches/buttonbystate/buttonbystate.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dwl-patches/patches/buttonbystate/buttonbystate.patch')
-rw-r--r--dwl-patches/patches/buttonbystate/buttonbystate.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/dwl-patches/patches/buttonbystate/buttonbystate.patch b/dwl-patches/patches/buttonbystate/buttonbystate.patch
new file mode 100644
index 0000000..d669aff
--- /dev/null
+++ b/dwl-patches/patches/buttonbystate/buttonbystate.patch
@@ -0,0 +1,78 @@
+From 4141aa9455e4b4a5b4a235475c70e8c100ec663e Mon Sep 17 00:00:00 2001
+From: nullsystem <nullsystem.aongp@slmail.me>
+Date: Sat, 6 Apr 2024 02:03:49 +0100
+Subject: [PATCH] buttonbystate - allow config for release (and press)
+
+- Adds "state" (enum wlr_button_state) to configure a button action on
+ either press or release. This basically enables release to be used
+ for button actions.
+---
+ config.def.h | 6 +++---
+ dwl.c | 22 ++++++++++++----------
+ 2 files changed, 15 insertions(+), 13 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 8847e58..cc989cf 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -165,7 +165,7 @@ static const Key keys[] = {
+ };
+
+ static const Button buttons[] = {
+- { MODKEY, BTN_LEFT, moveresize, {.ui = CurMove} },
+- { MODKEY, BTN_MIDDLE, togglefloating, {0} },
+- { MODKEY, BTN_RIGHT, moveresize, {.ui = CurResize} },
++ { MODKEY, BTN_LEFT, moveresize, {.ui = CurMove}, WLR_BUTTON_PRESSED },
++ { MODKEY, BTN_MIDDLE, togglefloating, {0}, WLR_BUTTON_PRESSED },
++ { MODKEY, BTN_RIGHT, moveresize, {.ui = CurResize}, WLR_BUTTON_PRESSED },
+ };
+diff --git a/dwl.c b/dwl.c
+index bf763df..6b60ccf 100644
+--- a/dwl.c
++++ b/dwl.c
+@@ -99,6 +99,7 @@ typedef struct {
+ unsigned int button;
+ void (*func)(const Arg *);
+ const Arg arg;
++ enum wlr_button_state state;
+ } Button;
+
+ typedef struct Monitor Monitor;
+@@ -595,16 +596,6 @@ buttonpress(struct wl_listener *listener, void *data)
+ xytonode(cursor->x, cursor->y, NULL, &c, NULL, NULL, NULL);
+ if (c && (!client_is_unmanaged(c) || client_wants_focus(c)))
+ focusclient(c, 1);
+-
+- keyboard = wlr_seat_get_keyboard(seat);
+- mods = keyboard ? wlr_keyboard_get_modifiers(keyboard) : 0;
+- for (b = buttons; b < END(buttons); b++) {
+- if (CLEANMASK(mods) == CLEANMASK(b->mod) &&
+- event->button == b->button && b->func) {
+- b->func(&b->arg);
+- return;
+- }
+- }
+ break;
+ case WLR_BUTTON_RELEASED:
+ held_grab = NULL;
+@@ -622,6 +613,17 @@ buttonpress(struct wl_listener *listener, void *data)
+ }
+ break;
+ }
++
++ keyboard = wlr_seat_get_keyboard(seat);
++ mods = keyboard ? wlr_keyboard_get_modifiers(keyboard) : 0;
++ for (b = buttons; b < END(buttons); b++) {
++ if (b->state == event->state && CLEANMASK(mods) == CLEANMASK(b->mod) &&
++ event->button == b->button && b->func) {
++ b->func(&b->arg);
++ return;
++ }
++ }
++
+ /* If the event wasn't handled by the compositor, notify the client with
+ * pointer focus that a button press has occurred */
+ wlr_seat_pointer_notify_button(seat,
+--
+2.44.0
+