mirror of
https://codeberg.org/dwl/dwl-patches.git
synced 2025-10-26 17:54:17 +00:00
buttonbystate.patch - 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.
This commit is contained in:
parent
052cda672a
commit
7e367bbfd1
78
buttonbystate/buttonbystate.patch
Normal file
78
buttonbystate/buttonbystate.patch
Normal file
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user