1d5676bc9a
Currently, we don't handle too well the removal of a MetaWaylandEventInterface during meta_wayland_event_interface_invalidate_all_focus(), since the MetaWaylandEventInterface may be freed at an intermediate point in that function while handling the focus change for all input devices. Turn this invalidate_all_focus() function into a MetaWaylandInput method, and always ensure to use the currently effective MetaWaylandEventInterface when resetting the focus for each device. This fixes the situation through handling reentrancy naturally, a focus sync (say, triggered by a grab) would reset a device focus (say, pointer), which would remove an event interface (say, a pointer constraint), which would invalidate_all_focus() again underneath using the new effective MetaWaylandEventInterface. When that is done, the initial invalidate_all_focus() call would re-apply the same focus to the same currently effective MetaWaylandEventInterface, resulting in a no-op for the remainder of the function. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3618> |
||
---|---|---|
.. | ||
backends | ||
common | ||
compositor | ||
core | ||
frames | ||
meta | ||
tests | ||
wayland | ||
x11 | ||
meson.build | ||
meta-private-enum-types.c.in | ||
meta-private-enum-types.h.in |