diff --git a/_STALE_PATCHES/keyboardshortcutsinhibit.md b/patches/keyboardshortcutsinhibit/README.md similarity index 52% rename from _STALE_PATCHES/keyboardshortcutsinhibit.md rename to patches/keyboardshortcutsinhibit/README.md index 600494c..c52de56 100644 --- a/_STALE_PATCHES/keyboardshortcutsinhibit.md +++ b/patches/keyboardshortcutsinhibit/README.md @@ -2,7 +2,10 @@ Allows clients to use the keyboard-shortcuts-inhibit protocol to block the compositor from using keybinds. This is useful for virtualization software like looking-glass which requires this protocol to run. ### Download +- [git branch](https://codeberg.org/Rutherther/dwl/src/branch/patch/keyboard-shortcuts-inhibit) +- [2024-05-10](https://codeberg.org/dwl/dwl-patches/raw/branch/main/patches/keyboardshortcutsinhibit/keyboardshortcutsinhibit.patch) - [2023-05-01](https://github.com/djpohly/dwl/compare/main...madcowog:keyboard-shortcuts-inhibit.patch) ### Authors -- [MadcowOG](https://github.com/MadcowOG) \ No newline at end of file +- [Rutherther](https://codeberg.org/Rutherther) +- [MadcowOG](https://github.com/MadcowOG) diff --git a/patches/keyboardshortcutsinhibit/keyboardshortcutsinhibit.patch b/patches/keyboardshortcutsinhibit/keyboardshortcutsinhibit.patch new file mode 100644 index 0000000..5b7b465 --- /dev/null +++ b/patches/keyboardshortcutsinhibit/keyboardshortcutsinhibit.patch @@ -0,0 +1,101 @@ +From 78cc7f78ca70144fa29361f22082e13a1aebc12c Mon Sep 17 00:00:00 2001 +From: Rutherther +Date: Thu, 9 May 2024 19:12:25 +0200 +Subject: [PATCH] feat: apply keyboard shortcuts inhibit patch + +--- + dwl.c | 22 +++++++++++++++++++++- + 1 file changed, 21 insertions(+), 1 deletion(-) + +diff --git a/dwl.c b/dwl.c +index bf763df..496d51b 100644 +--- a/dwl.c ++++ b/dwl.c +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -265,6 +266,7 @@ static void createnotify(struct wl_listener *listener, void *data); + static void createpointer(struct wlr_pointer *pointer); + static void createpointerconstraint(struct wl_listener *listener, void *data); + static void cursorconstrain(struct wlr_pointer_constraint_v1 *constraint); ++static void createshortcutsinhibitor(struct wl_listener *listener, void *data); + static void cursorframe(struct wl_listener *listener, void *data); + static void cursorwarptohint(void); + static void destroydecoration(struct wl_listener *listener, void *data); +@@ -277,6 +279,7 @@ static void destroynotify(struct wl_listener *listener, void *data); + static void destroypointerconstraint(struct wl_listener *listener, void *data); + static void destroysessionlock(struct wl_listener *listener, void *data); + static void destroysessionmgr(struct wl_listener *listener, void *data); ++static void destroyshortcutsinhibitmgr(struct wl_listener *listener, void *data); + static Monitor *dirtomon(enum wlr_direction dir); + static void focusclient(Client *c, int lift); + static void focusmon(const Arg *arg); +@@ -372,6 +375,7 @@ static struct wl_list clients; /* tiling order */ + static struct wl_list fstack; /* focus order */ + static struct wlr_idle_notifier_v1 *idle_notifier; + static struct wlr_idle_inhibit_manager_v1 *idle_inhibit_mgr; ++static struct wlr_keyboard_shortcuts_inhibit_manager_v1 *shortcuts_inhibit_mgr; + static struct wlr_layer_shell_v1 *layer_shell; + static struct wlr_output_manager_v1 *output_mgr; + static struct wlr_gamma_control_manager_v1 *gamma_control_mgr; +@@ -391,6 +395,7 @@ static struct wlr_session_lock_manager_v1 *session_lock_mgr; + static struct wlr_scene_rect *locked_bg; + static struct wlr_session_lock_v1 *cur_lock; + static struct wl_listener lock_listener = {.notify = locksession}; ++static struct wl_listener new_shortcuts_inhibitor = {.notify = createshortcutsinhibitor}; + + static struct wlr_seat *seat; + static KeyboardGroup kb_group = {0}; +@@ -1032,6 +1037,10 @@ createpointer(struct wlr_pointer *pointer) + wlr_cursor_attach_input_device(cursor, &pointer->base); + } + ++void createshortcutsinhibitor(struct wl_listener *listener, void *data) { ++ wlr_keyboard_shortcuts_inhibitor_v1_activate(data); ++} ++ + void + createpointerconstraint(struct wl_listener *listener, void *data) + { +@@ -1217,6 +1226,11 @@ destroysessionmgr(struct wl_listener *listener, void *data) + wl_list_remove(&listener->link); + } + ++void destroyshortcutsinhibitmgr(struct wl_listener *listener, void *data) { ++ wl_list_remove(&new_shortcuts_inhibitor.link); ++ wl_list_remove(&listener->link); ++} ++ + Monitor * + dirtomon(enum wlr_direction dir) + { +@@ -1468,7 +1482,9 @@ keypress(struct wl_listener *listener, void *data) + + /* On _press_ if there is no active screen locker, + * attempt to process a compositor keybinding. */ +- if (!locked && event->state == WL_KEYBOARD_KEY_STATE_PRESSED) { ++ if (!locked ++ && event->state == WL_KEYBOARD_KEY_STATE_PRESSED ++ && wl_list_empty(&shortcuts_inhibit_mgr->inhibitors)) { + for (i = 0; i < nsyms; i++) + handled = keybinding(mods, syms[i]) || handled; + } +@@ -2389,6 +2405,10 @@ setup(void) + (float [4]){0.1f, 0.1f, 0.1f, 1.0f}); + wlr_scene_node_set_enabled(&locked_bg->node, 0); + ++ shortcuts_inhibit_mgr = wlr_keyboard_shortcuts_inhibit_v1_create(dpy); ++ wl_signal_add(&shortcuts_inhibit_mgr->events.new_inhibitor, &new_shortcuts_inhibitor); ++ LISTEN_STATIC(&shortcuts_inhibit_mgr->events.destroy, destroyshortcutsinhibitmgr); ++ + /* Use decoration protocols to negotiate server-side decorations */ + wlr_server_decoration_manager_set_default_mode( + wlr_server_decoration_manager_create(dpy), +-- +2.44.0 +