From 2f7dd1dcf3c3fa71e62127ab34c56aaa8a833552 Mon Sep 17 00:00:00 2001 From: Michael Webster Date: Mon, 12 Jan 2026 12:43:25 -0500 Subject: [PATCH] Revert 23aba56e6d (ignore XkbNewKeyboardNotify) - Filter by req_minor code. Originally removed because keymap_changed() was being called in ordinary use - with multiple devices involved (a volume knob on a keyboard is considered a separate device), a freeze could occur when switching between them. Unfortunately, the updating of xkb options also triggers this event, and ignoring it was causing Muffin keybinding handling of iso-next- group (grp) xkb option changes to be ignored, including at the beginning of a session when the xkb options are first applied. Re-add this event case, but check the event's req_minor value to determine whether or not to call keymap_changed() - hotplug and set_keymap() events have the same code, and should be handled. ref: https://gitlab.gnome.org/GNOME/mutter/-/issues/398 https://github.com/linuxmint/cinnamon/issues/13361 --- src/backends/x11/meta-backend-x11.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/backends/x11/meta-backend-x11.c b/src/backends/x11/meta-backend-x11.c index e90e40d91..d33033167 100644 --- a/src/backends/x11/meta-backend-x11.c +++ b/src/backends/x11/meta-backend-x11.c @@ -395,6 +395,18 @@ handle_host_xevent (MetaBackend *backend, { switch (xkb_ev->any.xkb_type) { + case XkbNewKeyboardNotify: + XkbNewKeyboardNotifyEvent *xkb_nkb_ev = (XkbNewKeyboardNotifyEvent *) xkb_ev; + // req_minor == 23 is X_kbGetKeyboardByName, triggered by: + // - set_keymap() calls + // - true keyboard hotplug + // req_minor == 9 is X_kbGetDeviceInfo, triggered by device switches + // (e.g., alternating between keyboard and volume knob) - ignore these + if (xkb_nkb_ev->req_minor == 23) + { + keymap_changed (backend); + } + break; case XkbMapNotify: keymap_changed (backend); break;