Fix xkb_state NULL and respect host keyboard layout
- Only apply default XKB keymap as fallback when the host compositor hasn't provided one yet (kb->xkb_state == NULL) - The nested backend receives the host's keymap (Dvorak, etc.) via wl_keyboard.keymap — don't overwrite it with QWERTY default
This commit is contained in:
parent
8f0ec30759
commit
71c4bfdfbc
|
|
@ -1698,9 +1698,8 @@ handle_backend_new_input(struct wl_listener *listener, void *data)
|
|||
switch (dev->type) {
|
||||
case WLR_INPUT_DEVICE_KEYBOARD: {
|
||||
struct wlr_keyboard *kb = wlr_keyboard_from_input_device(dev);
|
||||
/* Apply our default XKB keymap unless the backend already set one
|
||||
* (nested backend receives the host keymap via wl_keyboard.keymap). */
|
||||
if (wl_state.xkb_keymap && !kb->keymap)
|
||||
/* Apply default keymap only if the host hasn't provided one yet */
|
||||
if (wl_state.xkb_keymap && !kb->xkb_state)
|
||||
wlr_keyboard_set_keymap(kb, wl_state.xkb_keymap);
|
||||
wl_state.real_keyboard_dev = dev;
|
||||
wl_state.keyboard_dev = dev;
|
||||
|
|
@ -2402,8 +2401,16 @@ wl_display_open(const char *name)
|
|||
wl_state.xkb_keymap = xkb_keymap_new_from_names(
|
||||
xkb_ctx, NULL, XKB_KEYMAP_COMPILE_NO_FLAGS);
|
||||
xkb_context_unref(xkb_ctx);
|
||||
if (wl_state.xkb_keymap)
|
||||
if (wl_state.xkb_keymap) {
|
||||
wwarning("wl_backend: default XKB keymap created for key binding resolution");
|
||||
/* Apply to any keyboard that was wired before keymap was ready,
|
||||
* but only if it doesn't already have one from the host. */
|
||||
if (wl_state.keyboard_dev) {
|
||||
struct wlr_keyboard *kb = wlr_keyboard_from_input_device(wl_state.keyboard_dev);
|
||||
if (!kb->xkb_state)
|
||||
wlr_keyboard_set_keymap(kb, wl_state.xkb_keymap);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Advertise keyboard+pointer capability unconditionally so clients do not
|
||||
|
|
|
|||
Loading…
Reference in New Issue