wayland: Use MetaWaylandCompositor API to drive focus synchronization

Keep this within the wayland code itself, and avoid poking MetaDisplay
API that will go away.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3511>
This commit is contained in:
Carlos Garnacho 2023-11-02 14:29:12 +01:00 committed by Marge Bot
parent 9383171958
commit a2d2e04d80
5 changed files with 14 additions and 13 deletions

View File

@ -406,11 +406,12 @@ data_device_end_drag_grab (MetaWaylandDragGrab *drag_grab)
*/
if (drag_grab->generic.pointer->grab == (MetaWaylandPointerGrab *) drag_grab)
{
MetaDisplay *display = display_from_data_device (data_device);
MetaWaylandCompositor *wayland_compositor =
meta_wayland_seat_get_compositor (data_device->seat);
meta_wayland_pointer_end_grab (drag_grab->generic.pointer);
meta_wayland_keyboard_end_grab (drag_grab->keyboard_grab.keyboard);
meta_display_sync_wayland_input_focus (display);
meta_wayland_compositor_sync_focus (wayland_compositor);
}
g_free (drag_grab);

View File

@ -158,15 +158,10 @@ meta_wayland_seat_set_capabilities (MetaWaylandSeat *seat,
{
MetaWaylandCompositor *compositor =
meta_wayland_seat_get_compositor (seat);
MetaContext *context = meta_wayland_compositor_get_context (compositor);
MetaDisplay *display;
meta_wayland_keyboard_enable (seat->keyboard);
/* Post-initialization, ensure the input focus is in sync */
display = meta_context_get_display (context);
if (display)
meta_display_sync_wayland_input_focus (display);
meta_wayland_compositor_sync_focus (compositor);
}
else if (CAPABILITY_DISABLED (prev_flags, flags, WL_SEAT_CAPABILITY_KEYBOARD))
meta_wayland_keyboard_disable (seat->keyboard);

View File

@ -592,11 +592,15 @@ xdg_popup_destructor (struct wl_resource *resource)
META_WAYLAND_SURFACE_ROLE (xdg_popup);
MetaWaylandSurface *surface =
meta_wayland_surface_role_get_surface (surface_role);
MetaDisplay *display = display_from_surface (surface);
MetaContext *context = meta_display_get_context (display);
MetaWaylandCompositor *wayland_compositor =
meta_context_get_wayland_compositor (context);
dismiss_popup (xdg_popup);
xdg_popup->resource = NULL;
meta_display_sync_wayland_input_focus (display_from_surface (surface));
meta_wayland_compositor_sync_focus (wayland_compositor);
}
static void

View File

@ -88,12 +88,10 @@ meta_xwayland_keyboard_grab_end (MetaXwaylandKeyboardActiveGrab *active_grab)
{
MetaWaylandCompositor *compositor =
meta_wayland_seat_get_compositor (active_grab->seat);
MetaContext *context = meta_wayland_compositor_get_context (compositor);
MetaDisplay *display = meta_context_get_display (context);
meta_wayland_keyboard_end_grab (active_grab->keyboard_grab.keyboard);
meta_wayland_keyboard_set_focus (active_grab->keyboard_grab.keyboard, NULL);
meta_display_sync_wayland_input_focus (display);
meta_wayland_compositor_sync_focus (compositor);
}
if (!active_grab->surface)

View File

@ -87,6 +87,9 @@ meta_xwayland_associate_window_with_surface (MetaWindow *window,
{
MetaDisplay *display = window->display;
MetaXwaylandSurface *xwayland_surface;
MetaContext *context = meta_display_get_context (display);
MetaWaylandCompositor *wayland_compositor =
meta_context_get_wayland_compositor (context);
if (!meta_wayland_surface_assign_role (surface,
META_TYPE_XWAYLAND_SURFACE,
@ -103,7 +106,7 @@ meta_xwayland_associate_window_with_surface (MetaWindow *window,
meta_xwayland_surface_associate_with_window (xwayland_surface, window);
/* Now that we have a surface check if it should have focus. */
meta_display_sync_wayland_input_focus (display);
meta_wayland_compositor_sync_focus (wayland_compositor);
}
static gboolean