diff options
Diffstat (limited to 'dwl-patches/stale-patches/press_repeat_release/press_repeat_release.patch')
-rw-r--r-- | dwl-patches/stale-patches/press_repeat_release/press_repeat_release.patch | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/dwl-patches/stale-patches/press_repeat_release/press_repeat_release.patch b/dwl-patches/stale-patches/press_repeat_release/press_repeat_release.patch new file mode 100644 index 0000000..b86666d --- /dev/null +++ b/dwl-patches/stale-patches/press_repeat_release/press_repeat_release.patch @@ -0,0 +1,108 @@ +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 1/2] 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 + + +From 1875bb171c9b0cd2fb03bb7e6c3fb400e33eeaf1 Mon Sep 17 00:00:00 2001 +From: Micah N Gorrell <m@minego.net> +Date: Wed, 27 Mar 2024 16:26:52 -0600 +Subject: [PATCH 2/2] Modified logic so that an unmodified keybinding with + default values for the new flags will behave as it does in vanilla, while + keybindings with customized flags will function as expected + +--- + dwl.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/dwl.c b/dwl.c +index 43bbf0c..55e7a40 100644 +--- a/dwl.c ++++ b/dwl.c +@@ -1443,7 +1443,11 @@ keybinding(uint32_t mods, xkb_keysym_t sym, int on_press, int on_repeat, int on_ + for (k = keys; k < END(keys); k++) { + if (CLEANMASK(mods) == CLEANMASK(k->mod) + && sym == k->keysym && k->func) { +- if ((on_press && k->on_press) || (on_repeat && k->on_repeat) || (on_release && k->on_release)) { ++ if ((k->on_press == 0 && k->on_repeat == 0 && k->on_release == 0) || ++ (on_press && k->on_press) || ++ (on_repeat && k->on_repeat) || ++ (on_release && k->on_release) ++ ) { + k->func(&k->arg); + return 1; + } +-- +2.44.0 + |