From 06557ae3c17c6909f814ee790690c90bc51d9a1a Mon Sep 17 00:00:00 2001 From: Denis Proskurin <4201995+dpvpro@users.noreply.github.com> Date: Thu, 30 Apr 2026 17:23:21 +0300 Subject: [PATCH] Caps Lock problem resolver --- src/mango.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/mango.c b/src/mango.c index 85fc00ac..c832eda1 100644 --- a/src/mango.c +++ b/src/mango.c @@ -449,6 +449,7 @@ typedef struct { struct wl_listener modifiers; struct wl_listener key; struct wl_listener destroy; + xkb_layout_index_t last_group; } KeyboardGroup; typedef struct { @@ -2818,6 +2819,7 @@ KeyboardGroup *createkeyboardgroup(void) { group->wlr_group = wlr_keyboard_group_create(); group->wlr_group->data = group; + group->last_group = XKB_LAYOUT_INVALID; context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); if (!(keymap = xkb_keymap_new_from_names(context, &config.xkb_rules, @@ -3967,13 +3969,18 @@ void keypressmod(struct wl_listener *listener, void *data) { /* This event is raised when a modifier key, such as shift or alt, is * pressed. We simply communicate this to the client. */ KeyboardGroup *group = wl_container_of(listener, group, modifiers); + struct wlr_keyboard_modifiers *mods = &group->wlr_group->keyboard.modifiers; if (!dwl_im_keyboard_grab_forward_modifiers(group)) { wlr_seat_set_keyboard(seat, &group->wlr_group->keyboard); /* Send modifiers to the client. */ - wlr_seat_keyboard_notify_modifiers( - seat, &group->wlr_group->keyboard.modifiers); + wlr_seat_keyboard_notify_modifiers(seat, mods); + } + + if (mods->group != group->last_group) { + group->last_group = mods->group; + printstatus(); } }