mirror of
https://github.com/labwc/labwc.git
synced 2026-03-20 05:34:12 -04:00
keyboard: add option to enable Num Lock automatically (default=enabled)
Co-authored-by: @Consolatis
This commit is contained in:
parent
1f541be481
commit
ecad76560e
7 changed files with 46 additions and 0 deletions
|
|
@ -276,6 +276,10 @@ this is for compatibility with Openbox.
|
||||||
|
|
||||||
## KEYBOARD
|
## KEYBOARD
|
||||||
|
|
||||||
|
*<keyboard><numlock>* [on|off]
|
||||||
|
When recognizing a new keyboard enable or disable Num Lock.
|
||||||
|
Default is on.
|
||||||
|
|
||||||
*<keyboard><keybind key="" layoutDependent="">*
|
*<keyboard><keybind key="" layoutDependent="">*
|
||||||
Define a *key* binding in the format *modifier-key*, where supported
|
Define a *key* binding in the format *modifier-key*, where supported
|
||||||
modifiers are:
|
modifiers are:
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,7 @@
|
||||||
your favourite terminal or application launcher. See rc.xml for an example.
|
your favourite terminal or application launcher. See rc.xml for an example.
|
||||||
-->
|
-->
|
||||||
<keyboard>
|
<keyboard>
|
||||||
|
<numlock>on</numlock>
|
||||||
<repeatRate>25</repeatRate>
|
<repeatRate>25</repeatRate>
|
||||||
<repeatDelay>600</repeatDelay>
|
<repeatDelay>600</repeatDelay>
|
||||||
<keybind key="A-Tab">
|
<keybind key="A-Tab">
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@ struct rcxml {
|
||||||
/* keyboard */
|
/* keyboard */
|
||||||
int repeat_rate;
|
int repeat_rate;
|
||||||
int repeat_delay;
|
int repeat_delay;
|
||||||
|
bool kb_numlock_enable;
|
||||||
struct wl_list keybinds; /* struct keybind.link */
|
struct wl_list keybinds; /* struct keybind.link */
|
||||||
|
|
||||||
/* mouse */
|
/* mouse */
|
||||||
|
|
|
||||||
|
|
@ -419,6 +419,7 @@ void desktop_focus_topmost_view(struct server *server);
|
||||||
void keyboard_cancel_keybind_repeat(struct keyboard *keyboard);
|
void keyboard_cancel_keybind_repeat(struct keyboard *keyboard);
|
||||||
void keyboard_key_notify(struct wl_listener *listener, void *data);
|
void keyboard_key_notify(struct wl_listener *listener, void *data);
|
||||||
void keyboard_modifiers_notify(struct wl_listener *listener, void *data);
|
void keyboard_modifiers_notify(struct wl_listener *listener, void *data);
|
||||||
|
void keyboard_set_numlock(struct wlr_keyboard *keyboard);
|
||||||
void keyboard_init(struct seat *seat);
|
void keyboard_init(struct seat *seat);
|
||||||
bool keyboard_any_modifiers_pressed(struct wlr_keyboard *keyboard);
|
bool keyboard_any_modifiers_pressed(struct wlr_keyboard *keyboard);
|
||||||
void keyboard_finish(struct seat *seat);
|
void keyboard_finish(struct seat *seat);
|
||||||
|
|
|
||||||
|
|
@ -732,6 +732,8 @@ entry(xmlNode *node, char *nodename, char *content)
|
||||||
rc.repeat_rate = atoi(content);
|
rc.repeat_rate = atoi(content);
|
||||||
} else if (!strcasecmp(nodename, "repeatDelay.keyboard")) {
|
} else if (!strcasecmp(nodename, "repeatDelay.keyboard")) {
|
||||||
rc.repeat_delay = atoi(content);
|
rc.repeat_delay = atoi(content);
|
||||||
|
} else if (!strcasecmp(nodename, "numlock.keyboard")) {
|
||||||
|
set_bool(content, &rc.kb_numlock_enable);
|
||||||
} else if (!strcasecmp(nodename, "screenEdgeStrength.resistance")) {
|
} else if (!strcasecmp(nodename, "screenEdgeStrength.resistance")) {
|
||||||
rc.screen_edge_strength = atoi(content);
|
rc.screen_edge_strength = atoi(content);
|
||||||
} else if (!strcasecmp(nodename, "range.snapping")) {
|
} else if (!strcasecmp(nodename, "range.snapping")) {
|
||||||
|
|
@ -949,6 +951,7 @@ rcxml_init(void)
|
||||||
rc.scroll_factor = 1.0;
|
rc.scroll_factor = 1.0;
|
||||||
rc.repeat_rate = 25;
|
rc.repeat_rate = 25;
|
||||||
rc.repeat_delay = 600;
|
rc.repeat_delay = 600;
|
||||||
|
rc.kb_numlock_enable = true;
|
||||||
rc.screen_edge_strength = 20;
|
rc.screen_edge_strength = 20;
|
||||||
|
|
||||||
rc.snap_edge_range = 1;
|
rc.snap_edge_range = 1;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <wlr/backend/multi.h>
|
#include <wlr/backend/multi.h>
|
||||||
#include <wlr/backend/session.h>
|
#include <wlr/backend/session.h>
|
||||||
|
#include <wlr/interfaces/wlr_keyboard.h>
|
||||||
#include "action.h"
|
#include "action.h"
|
||||||
#include "idle.h"
|
#include "idle.h"
|
||||||
#include "key-state.h"
|
#include "key-state.h"
|
||||||
|
|
@ -489,6 +490,33 @@ keyboard_key_notify(struct wl_listener *listener, void *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
keyboard_set_numlock(struct wlr_keyboard *keyboard)
|
||||||
|
{
|
||||||
|
xkb_mod_index_t num_idx =
|
||||||
|
xkb_map_mod_get_index(keyboard->keymap, XKB_MOD_NAME_NUM);
|
||||||
|
if (num_idx == XKB_MOD_INVALID) {
|
||||||
|
wlr_log(WLR_INFO, "Failed to set Num Lock: not found in keymap");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
xkb_mod_mask_t locked = keyboard->modifiers.locked;
|
||||||
|
if (rc.kb_numlock_enable) {
|
||||||
|
locked |= (xkb_mod_mask_t)1 << num_idx;
|
||||||
|
} else {
|
||||||
|
locked &= ~((xkb_mod_mask_t)1 << num_idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This updates the xkb-state + kb->modifiers and also triggers the
|
||||||
|
* keyboard->events.modifiers signal (the signal has no effect in
|
||||||
|
* current labwc usage since the keyboard is not part of a
|
||||||
|
* keyboard-group yet).
|
||||||
|
*/
|
||||||
|
wlr_keyboard_notify_modifiers(keyboard, keyboard->modifiers.depressed,
|
||||||
|
keyboard->modifiers.latched, locked, keyboard->modifiers.group);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
keyboard_init(struct seat *seat)
|
keyboard_init(struct seat *seat)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -211,6 +211,14 @@ new_keyboard(struct seat *seat, struct wlr_input_device *device, bool virtual)
|
||||||
|
|
||||||
wlr_keyboard_set_keymap(kb, seat->keyboard_group->keyboard.keymap);
|
wlr_keyboard_set_keymap(kb, seat->keyboard_group->keyboard.keymap);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This needs to be before wlr_keyboard_group_add_keyboard().
|
||||||
|
* For some reason, wlroots takes the modifier state from the
|
||||||
|
* new keyboard and syncs it to the others in the group, rather
|
||||||
|
* than the other way around.
|
||||||
|
*/
|
||||||
|
keyboard_set_numlock(kb);
|
||||||
|
|
||||||
if (!virtual) {
|
if (!virtual) {
|
||||||
wlr_keyboard_group_add_keyboard(seat->keyboard_group, kb);
|
wlr_keyboard_group_add_keyboard(seat->keyboard_group, kb);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue