mirror of
https://codeberg.org/dwl/dwl-patches.git
synced 2025-10-26 09:44:21 +00:00
Add press_repeat_release patch
This commit is contained in:
parent
63de53fa35
commit
c567df584f
76
press_repeat_release/press_repeat_release.patch
Normal file
76
press_repeat_release/press_repeat_release.patch
Normal file
@ -0,0 +1,76 @@
|
||||
From aee1dc3e9ca4d8deec5432d0c64921af6e301ecd Mon Sep 17 00:00:00 2001
|
||||
From: Micah N Gorrell <m@minego.net>
|
||||
Date: Wed, 27 Mar 2024 15:59:50 -0600
|
||||
Subject: [PATCH] onpress, onrepeat, onrelease
|
||||
|
||||
---
|
||||
dwl.c | 18 ++++++++++++------
|
||||
1 file changed, 12 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dwl.c b/dwl.c
|
||||
index 5867b0c..43bbf0c 100644
|
||||
--- a/dwl.c
|
||||
+++ b/dwl.c
|
||||
@@ -146,6 +146,10 @@ typedef struct {
|
||||
xkb_keysym_t keysym;
|
||||
void (*func)(const Arg *);
|
||||
const Arg arg;
|
||||
+
|
||||
+ int on_press;
|
||||
+ int on_repeat;
|
||||
+ int on_release;
|
||||
} Key;
|
||||
|
||||
typedef struct {
|
||||
@@ -286,7 +290,7 @@ static void fullscreennotify(struct wl_listener *listener, void *data);
|
||||
static void handlesig(int signo);
|
||||
static void incnmaster(const Arg *arg);
|
||||
static void inputdevice(struct wl_listener *listener, void *data);
|
||||
-static int keybinding(uint32_t mods, xkb_keysym_t sym);
|
||||
+static int keybinding(uint32_t mods, xkb_keysym_t sym, int on_press, int on_repeat, int on_release);
|
||||
static void keypress(struct wl_listener *listener, void *data);
|
||||
static void keypressmod(struct wl_listener *listener, void *data);
|
||||
static int keyrepeat(void *data);
|
||||
@@ -1428,7 +1432,7 @@ inputdevice(struct wl_listener *listener, void *data)
|
||||
}
|
||||
|
||||
int
|
||||
-keybinding(uint32_t mods, xkb_keysym_t sym)
|
||||
+keybinding(uint32_t mods, xkb_keysym_t sym, int on_press, int on_repeat, int on_release)
|
||||
{
|
||||
/*
|
||||
* Here we handle compositor keybindings. This is when the compositor is
|
||||
@@ -1439,8 +1443,10 @@ keybinding(uint32_t mods, xkb_keysym_t sym)
|
||||
for (k = keys; k < END(keys); k++) {
|
||||
if (CLEANMASK(mods) == CLEANMASK(k->mod)
|
||||
&& sym == k->keysym && k->func) {
|
||||
- k->func(&k->arg);
|
||||
- return 1;
|
||||
+ if ((on_press && k->on_press) || (on_repeat && k->on_repeat) || (on_release && k->on_release)) {
|
||||
+ k->func(&k->arg);
|
||||
+ return 1;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@@ -1470,7 +1476,7 @@ keypress(struct wl_listener *listener, void *data)
|
||||
* attempt to process a compositor keybinding. */
|
||||
if (!locked && event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {
|
||||
for (i = 0; i < nsyms; i++)
|
||||
- handled = keybinding(mods, syms[i]) || handled;
|
||||
+ handled = keybinding(mods, syms[i], event->state == WL_KEYBOARD_KEY_STATE_PRESSED, 0, event->state == WL_KEYBOARD_KEY_STATE_RELEASED) || handled;
|
||||
}
|
||||
|
||||
if (handled && group->wlr_group->keyboard.repeat_info.delay > 0) {
|
||||
@@ -1518,7 +1524,7 @@ keyrepeat(void *data)
|
||||
1000 / group->wlr_group->keyboard.repeat_info.rate);
|
||||
|
||||
for (i = 0; i < group->nsyms; i++)
|
||||
- keybinding(group->mods, group->keysyms[i]);
|
||||
+ keybinding(group->mods, group->keysyms[i], 0, 1, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.44.0
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user