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:
parent
9383171958
commit
a2d2e04d80
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user