From: Johan Malm Date: Tue, 31 Dec 2024 15:25:31 +0000 (+0000) Subject: keyboard: do not set numlock by default X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=a5973c3b48b4dbe42c928f9a0c7ceba5c7e404b3;p=proto%2Flabwc.git keyboard: do not set numlock by default Only force on|off if users specifically requests it in the config file. Related-to: #2463 --- diff --git a/docs/labwc-config.5.scd b/docs/labwc-config.5.scd index 9bbf1082..95564083 100644 --- a/docs/labwc-config.5.scd +++ b/docs/labwc-config.5.scd @@ -565,7 +565,7 @@ extending outward from the snapped edge. ** [on|off] When recognizing a new keyboard enable or disable Num Lock. - Default is off. + Default is unset. ** [global|window] Stores the keyboard layout either globally or per window and restores diff --git a/docs/rc.xml.all b/docs/rc.xml.all index 216e93c5..a4f628ba 100644 --- a/docs/rc.xml.all +++ b/docs/rc.xml.all @@ -229,7 +229,10 @@ your favourite terminal or application launcher. See rc.xml for an example. --> - off + global 25 600 diff --git a/include/config/rcxml.h b/include/config/rcxml.h index dd237fa4..c65d6484 100644 --- a/include/config/rcxml.h +++ b/include/config/rcxml.h @@ -9,6 +9,7 @@ #include "common/border.h" #include "common/buf.h" #include "common/font.h" +#include "common/three-state.h" #include "config/touch.h" #include "config/tablet.h" #include "config/tablet-tool.h" @@ -104,7 +105,7 @@ struct rcxml { /* keyboard */ int repeat_rate; int repeat_delay; - bool kb_numlock_enable; + enum three_state kb_numlock_enable; bool kb_layout_per_window; struct wl_list keybinds; /* struct keybind.link */ diff --git a/src/config/rcxml.c b/src/config/rcxml.c index f7d92e4c..cbb9eab6 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -24,6 +24,7 @@ #include "common/parse-bool.h" #include "common/parse-double.h" #include "common/string-helpers.h" +#include "common/three-state.h" #include "config/default-bindings.h" #include "config/keybind.h" #include "config/libinput.h" @@ -1150,7 +1151,10 @@ entry(xmlNode *node, char *nodename, char *content) } else if (!strcasecmp(nodename, "repeatDelay.keyboard")) { rc.repeat_delay = atoi(content); } else if (!strcasecmp(nodename, "numlock.keyboard")) { - set_bool(content, &rc.kb_numlock_enable); + bool value; + set_bool(content, &value); + rc.kb_numlock_enable = value ? LAB_STATE_ENABLED + : LAB_STATE_DISABLED; } else if (!strcasecmp(nodename, "layoutScope.keyboard")) { /* * This can be changed to an enum later on @@ -1497,7 +1501,7 @@ rcxml_init(void) rc.repeat_rate = 25; rc.repeat_delay = 600; - rc.kb_numlock_enable = false; + rc.kb_numlock_enable = LAB_STATE_UNSPECIFIED; rc.kb_layout_per_window = false; rc.screen_edge_strength = 20; rc.window_edge_strength = 20; diff --git a/src/input/keyboard.c b/src/input/keyboard.c index 5931fb37..49267233 100644 --- a/src/input/keyboard.c +++ b/src/input/keyboard.c @@ -6,6 +6,7 @@ #include #include #include "action.h" +#include "common/three-state.h" #include "idle.h" #include "input/ime.h" #include "input/keyboard.h" @@ -672,6 +673,10 @@ keyboard_key_notify(struct wl_listener *listener, void *data) void keyboard_set_numlock(struct wlr_keyboard *keyboard) { + if (rc.kb_numlock_enable == LAB_STATE_UNSPECIFIED) { + return; + } + xkb_mod_index_t num_idx = xkb_map_mod_get_index(keyboard->keymap, XKB_MOD_NAME_NUM); if (num_idx == XKB_MOD_INVALID) { @@ -680,9 +685,9 @@ keyboard_set_numlock(struct wlr_keyboard *keyboard) } xkb_mod_mask_t locked = keyboard->modifiers.locked; - if (rc.kb_numlock_enable) { + if (rc.kb_numlock_enable == LAB_STATE_ENABLED) { locked |= (xkb_mod_mask_t)1 << num_idx; - } else { + } else if (rc.kb_numlock_enable == LAB_STATE_DISABLED) { locked &= ~((xkb_mod_mask_t)1 << num_idx); }