wayland: preserve xkb_state
on VT switch
On VT switch, the devices are removed, which means for Wayland disabling the keyboard. When the keyboard is disabled, the associated `xkb_state` is freed and recreated whenever the keyboard is re-enabled when switching back to the compositor VT. That means the `xkb_state` for Wayland is lost whereas the same for clutter is kept, which causes to a discrepancy with locked modifiers on VT switch. To avoid that issue, preserve the XKB info only to dispose it when the keyboard is eventually finalized. Closes: https://gitlab.gnome.org/GNOME/mutter/issues/344 https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1185
This commit is contained in:
parent
a5294ce55f
commit
5b30a52bbd
@ -603,7 +603,6 @@ meta_wayland_keyboard_disable (MetaWaylandKeyboard *keyboard)
|
|||||||
|
|
||||||
meta_wayland_keyboard_end_grab (keyboard);
|
meta_wayland_keyboard_end_grab (keyboard);
|
||||||
meta_wayland_keyboard_set_focus (keyboard, NULL);
|
meta_wayland_keyboard_set_focus (keyboard, NULL);
|
||||||
meta_wayland_xkb_info_destroy (&keyboard->xkb_info);
|
|
||||||
|
|
||||||
wl_list_remove (&keyboard->resource_list);
|
wl_list_remove (&keyboard->resource_list);
|
||||||
wl_list_init (&keyboard->resource_list);
|
wl_list_init (&keyboard->resource_list);
|
||||||
@ -917,7 +916,18 @@ meta_wayland_keyboard_init (MetaWaylandKeyboard *keyboard)
|
|||||||
keyboard_handle_focus_surface_destroy;
|
keyboard_handle_focus_surface_destroy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_wayland_keyboard_finalize (GObject *object)
|
||||||
|
{
|
||||||
|
MetaWaylandKeyboard *keyboard = META_WAYLAND_KEYBOARD (object);
|
||||||
|
|
||||||
|
meta_wayland_xkb_info_destroy (&keyboard->xkb_info);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_wayland_keyboard_class_init (MetaWaylandKeyboardClass *klass)
|
meta_wayland_keyboard_class_init (MetaWaylandKeyboardClass *klass)
|
||||||
{
|
{
|
||||||
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
|
object_class->finalize = meta_wayland_keyboard_finalize;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user