summaryrefslogtreecommitdiffstats
path: root/dwl-patches/patches/numlock-capslock/numlock-capslock.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dwl-patches/patches/numlock-capslock/numlock-capslock.patch')
-rw-r--r--dwl-patches/patches/numlock-capslock/numlock-capslock.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/dwl-patches/patches/numlock-capslock/numlock-capslock.patch b/dwl-patches/patches/numlock-capslock/numlock-capslock.patch
new file mode 100644
index 0000000..adf9f38
--- /dev/null
+++ b/dwl-patches/patches/numlock-capslock/numlock-capslock.patch
@@ -0,0 +1,84 @@
+From ec5dbcd9f4629549d3d14b1791305a42479a935f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?=
+ <leohdz172@proton.me>
+Date: Sun, 4 Apr 2021 19:56:09 -0500
+Subject: [PATCH] add option to enable numlock/capslock
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Leonardo Hernández Hernández <leohdz172@proton.me>
+---
+ config.def.h | 4 ++++
+ dwl.c | 19 +++++++++++++++++++
+ 2 files changed, 23 insertions(+)
+
+diff --git a/config.def.h b/config.def.h
+index 22d2171d..21dc6201 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -60,6 +60,10 @@ static const struct xkb_rule_names xkb_rules = {
+ .options = NULL,
+ };
+
++/* numlock and capslock */
++static const int numlock = 1;
++static const int capslock = 0;
++
+ static const int repeat_rate = 25;
+ static const int repeat_delay = 600;
+
+diff --git a/dwl.c b/dwl.c
+index ad21e1ba..d0059ec8 100644
+--- a/dwl.c
++++ b/dwl.c
+@@ -14,6 +14,7 @@
+ #include <wayland-server-core.h>
+ #include <wlr/backend.h>
+ #include <wlr/backend/libinput.h>
++#include <wlr/interfaces/wlr_keyboard.h>
+ #include <wlr/render/allocator.h>
+ #include <wlr/render/wlr_renderer.h>
+ #include <wlr/types/wlr_alpha_modifier_v1.h>
+@@ -355,6 +356,7 @@ static void zoom(const Arg *arg);
+ /* variables */
+ static pid_t child_pid = -1;
+ static int locked;
++static uint32_t locked_mods = 0;
+ static void *exclusive_focus;
+ static struct wl_display *dpy;
+ static struct wl_event_loop *event_loop;
+@@ -936,6 +938,8 @@ createkeyboard(struct wlr_keyboard *keyboard)
+ /* Set the keymap to match the group keymap */
+ wlr_keyboard_set_keymap(keyboard, kb_group->wlr_group->keyboard.keymap);
+
++ wlr_keyboard_notify_modifiers(keyboard, 0, 0, locked_mods, 0);
++
+ /* Add the new keyboard to the group */
+ wlr_keyboard_group_add_keyboard(kb_group->wlr_group, keyboard);
+ }
+@@ -957,6 +961,21 @@ createkeyboardgroup(void)
+ die("failed to compile keymap");
+
+ wlr_keyboard_set_keymap(&group->wlr_group->keyboard, keymap);
++ if (numlock) {
++ xkb_mod_index_t mod_index = xkb_keymap_mod_get_index(keymap, XKB_MOD_NAME_NUM);
++ if (mod_index != XKB_MOD_INVALID)
++ locked_mods |= (uint32_t)1 << mod_index;
++ }
++
++ if (capslock) {
++ xkb_mod_index_t mod_index = xkb_keymap_mod_get_index(keymap, XKB_MOD_NAME_CAPS);
++ if (mod_index != XKB_MOD_INVALID)
++ locked_mods |= (uint32_t)1 << mod_index;
++ }
++
++ if (locked_mods)
++ wlr_keyboard_notify_modifiers(&group->wlr_group->keyboard, 0, 0, locked_mods, 0);
++
+ xkb_keymap_unref(keymap);
+ xkb_context_unref(context);
+
+--
+2.48.0
+