mirror of
https://github.com/brl/mutter.git
synced 2025-06-14 01:09:30 +00:00
core: Handle redirection changes in and out of ClutterGrab grabs
Wayland event processing and WM operations are themselves outside the ClutterGrab loop so far. Until this is sorted out, these pieces of event handling have got to learn to stay aside while there is a ClutterGrab going on. So, synchronize foci and other state when grabs come in or out, and make it sure that Wayland event processing does not happen while grabs happen. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2099>
This commit is contained in:

committed by
Marge Bot

parent
0e234d76f4
commit
a840c039a0
@ -268,9 +268,11 @@ sync_focus_surface (MetaWaylandPointer *pointer)
|
||||
MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend);
|
||||
ClutterBackend *clutter_backend = clutter_get_default_backend ();
|
||||
ClutterSeat *clutter_seat = clutter_backend_get_default_seat (clutter_backend);
|
||||
ClutterStage *stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
|
||||
|
||||
if (!meta_cursor_tracker_get_pointer_visible (cursor_tracker) &&
|
||||
!clutter_seat_is_unfocus_inhibited (clutter_seat))
|
||||
if (clutter_stage_get_grab_actor (stage) != NULL ||
|
||||
(!meta_cursor_tracker_get_pointer_visible (cursor_tracker) &&
|
||||
!clutter_seat_is_unfocus_inhibited (clutter_seat)))
|
||||
{
|
||||
meta_wayland_pointer_set_focus (pointer, NULL);
|
||||
return;
|
||||
@ -441,10 +443,14 @@ default_grab_focus (MetaWaylandPointerGrab *grab,
|
||||
MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend);
|
||||
ClutterBackend *clutter_backend = clutter_get_default_backend ();
|
||||
ClutterSeat *clutter_seat = clutter_backend_get_default_seat (clutter_backend);
|
||||
ClutterStage *stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
|
||||
|
||||
if (!meta_wayland_seat_has_pointer (seat))
|
||||
return;
|
||||
|
||||
if (clutter_stage_get_grab_actor (stage) != NULL)
|
||||
return;
|
||||
|
||||
if (!meta_cursor_tracker_get_pointer_visible (cursor_tracker) &&
|
||||
!clutter_seat_is_unfocus_inhibited (clutter_seat))
|
||||
return;
|
||||
|
Reference in New Issue
Block a user