diff --git a/docs/changelog.rst b/docs/changelog.rst index 58acd2dd5..7392a17eb 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -34,6 +34,8 @@ To update |kitty|, :doc:`follow the instructions `. - Wayland: Fix mouse cursor rendering on HiDPI screens (:pull:`2709`) +- X11: Recompile keymaps on XkbNewKeyboardNotify events (:iss:`2726`) + 0.17.4 [2020-05-09] -------------------- diff --git a/glfw/x11_window.c b/glfw/x11_window.c index f15340f51..b65b1f219 100644 --- a/glfw/x11_window.c +++ b/glfw/x11_window.c @@ -1177,8 +1177,11 @@ static void processEvent(XEvent *event) { XkbEvent *kb_event = (XkbEvent*)event; switch(kb_event->any.xkb_type) { - case XkbNewKeyboardNotify: - if(!glfw_xkb_update_x11_keyboard_id(&_glfw.x11.xkb)) return; + case XkbNewKeyboardNotify: { + int32_t old_id = _glfw.x11.xkb.keyboard_device_id; + if (!glfw_xkb_update_x11_keyboard_id(&_glfw.x11.xkb)) return; + if (old_id != _glfw.x11.xkb.keyboard_device_id) keymap_dirty = true; + } /* fallthrough */ case XkbMapNotify: {