diff options
Diffstat (limited to 'dwl-patches/patches/keyboardshortcutsinhibit/keyboardshortcutsinhibit.patch')
-rw-r--r-- | dwl-patches/patches/keyboardshortcutsinhibit/keyboardshortcutsinhibit.patch | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/dwl-patches/patches/keyboardshortcutsinhibit/keyboardshortcutsinhibit.patch b/dwl-patches/patches/keyboardshortcutsinhibit/keyboardshortcutsinhibit.patch new file mode 100644 index 0000000..bea327e --- /dev/null +++ b/dwl-patches/patches/keyboardshortcutsinhibit/keyboardshortcutsinhibit.patch @@ -0,0 +1,101 @@ +From ac1fa09172a401427cabbda045688903bdd3cbe7 Mon Sep 17 00:00:00 2001 +From: Rutherther <rutherther@proton.me> +Date: Wed, 12 Jun 2024 20:05:40 +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 6f041a0..8cab9e0 100644 +--- a/dwl.c ++++ b/dwl.c +@@ -29,6 +29,7 @@ + #include <wlr/types/wlr_input_device.h> + #include <wlr/types/wlr_keyboard.h> + #include <wlr/types/wlr_keyboard_group.h> ++#include <wlr/types/wlr_keyboard_shortcuts_inhibit_v1.h> + #include <wlr/types/wlr_layer_shell_v1.h> + #include <wlr/types/wlr_linux_dmabuf_v1.h> + #include <wlr/types/wlr_output.h> +@@ -267,6 +268,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); +@@ -280,6 +282,7 @@ 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 destroykeyboardgroup(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); +@@ -375,6 +378,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; +@@ -394,6 +398,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; +@@ -1083,6 +1088,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) + { +@@ -1280,6 +1289,11 @@ destroykeyboardgroup(struct wl_listener *listener, void *data) + free(group); + } + ++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) + { +@@ -1531,7 +1545,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; + } +@@ -2450,6 +2466,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.1 + |