diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-04-20 00:08:14 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-04-28 12:36:05 +0000 |
commit | 0e9e2eb65054cba708de2643e7f2c83275327f1a (patch) | |
tree | 964797504a95b3328a619cc453d203ca0f835228 | |
parent | 7a8164c79fb988d30ec4d0a9fe7e5b87b2b8c332 (diff) | |
download | gtk+-0e9e2eb65054cba708de2643e7f2c83275327f1a.tar.gz |
wayland: Reshuffle some internals
Make find_grab_input_seat return a GdkWaylandSeat
instead of a struct wl_seat, so we can use it and
avoid calling gdk_display_get_default_seat when
we need to get a serial later.
-rw-r--r-- | gdk/wayland/gdkdevice-wayland.c | 16 | ||||
-rw-r--r-- | gdk/wayland/gdkprivate-wayland.h | 3 | ||||
-rw-r--r-- | gdk/wayland/gdksurface-wayland.c | 47 |
3 files changed, 28 insertions, 38 deletions
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c index 5b4e17d552..46ca742c3b 100644 --- a/gdk/wayland/gdkdevice-wayland.c +++ b/gdk/wayland/gdkdevice-wayland.c @@ -5020,31 +5020,29 @@ _gdk_wayland_device_get_implicit_grab_serial (GdkWaylandDevice *device, } } - return GDK_WAYLAND_SEAT (seat)->pointer_info.press_serial; + return GDK_WAYLAND_SEAT (seat)->pointer_info.press_serial; } uint32_t -_gdk_wayland_seat_get_last_implicit_grab_serial (GdkSeat *seat, +_gdk_wayland_seat_get_last_implicit_grab_serial (GdkWaylandSeat *seat, GdkEventSequence **sequence) { - GdkWaylandSeat *wayland_seat; GdkWaylandTouchData *touch; GHashTableIter iter; GList *l; uint32_t serial; - wayland_seat = GDK_WAYLAND_SEAT (seat); - g_hash_table_iter_init (&iter, wayland_seat->touches); + g_hash_table_iter_init (&iter, seat->touches); if (sequence) *sequence = NULL; - serial = wayland_seat->keyboard_key_serial; + serial = seat->keyboard_key_serial; - if (wayland_seat->pointer_info.press_serial > serial) - serial = wayland_seat->pointer_info.press_serial; + if (seat->pointer_info.press_serial > serial) + serial = seat->pointer_info.press_serial; - for (l = wayland_seat->tablets; l; l = l->next) + for (l = seat->tablets; l; l = l->next) { GdkWaylandTabletData *tablet = l->data; diff --git a/gdk/wayland/gdkprivate-wayland.h b/gdk/wayland/gdkprivate-wayland.h index 206386b663..3cbe203ab0 100644 --- a/gdk/wayland/gdkprivate-wayland.h +++ b/gdk/wayland/gdkprivate-wayland.h @@ -34,6 +34,7 @@ #include <gdk/gdkcursor.h> #include <gdk/wayland/gdkwayland.h> #include <gdk/wayland/gdkdisplay-wayland.h> +#include <gdk/wayland/gdkseat-wayland.h> #include <xkbcommon/xkbcommon.h> @@ -138,7 +139,7 @@ void _gdk_wayland_display_remove_seat (GdkWaylandDisplay *displa GdkKeymap *_gdk_wayland_device_get_keymap (GdkDevice *device); uint32_t _gdk_wayland_device_get_implicit_grab_serial(GdkWaylandDevice *device, const GdkEvent *event); -uint32_t _gdk_wayland_seat_get_last_implicit_grab_serial (GdkSeat *seat, +uint32_t _gdk_wayland_seat_get_last_implicit_grab_serial (GdkWaylandSeat *seat, GdkEventSequence **seqence); struct wl_data_device * gdk_wayland_device_get_data_device (GdkDevice *gdk_device); void gdk_wayland_device_set_selection (GdkDevice *gdk_device, diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c index 6cfa7a8876..33cd452650 100644 --- a/gdk/wayland/gdksurface-wayland.c +++ b/gdk/wayland/gdksurface-wayland.c @@ -33,6 +33,7 @@ #include "gdkdeviceprivate.h" #include "gdkprivate-wayland.h" #include "gdkmonitor-wayland.h" +#include "gdkseat-wayland.h" #include <wayland/xdg-shell-unstable-v6-client-protocol.h> #include <stdlib.h> @@ -571,18 +572,7 @@ _gdk_wayland_display_create_surface_impl (GdkDisplay *display, gdk_display_get_n_monitors (display) > 0) impl->scale = gdk_monitor_get_scale_factor (gdk_display_get_monitor (display, 0)); - impl->title = NULL; - - switch (GDK_SURFACE_TYPE (surface)) - { - case GDK_SURFACE_TOPLEVEL: - case GDK_SURFACE_TEMP: - gdk_surface_set_title (surface, get_default_title ()); - break; - - default: - break; - } + gdk_surface_set_title (surface, get_default_title ()); if (real_parent == NULL) display_wayland->toplevels = g_list_prepend (display_wayland->toplevels, surface); @@ -850,7 +840,7 @@ gdk_wayland_surface_update_dialogs (GdkSurface *surface) GdkSurface *w = l->data; GdkSurfaceImplWayland *impl; - if (!GDK_IS_SURFACE_IMPL_WAYLAND(w->impl)) + if (!GDK_IS_SURFACE_IMPL_WAYLAND (w->impl)) continue; impl = GDK_SURFACE_IMPL_WAYLAND (w->impl); @@ -2161,14 +2151,12 @@ create_simple_positioner (GdkSurface *surface, static void gdk_wayland_surface_create_xdg_popup (GdkSurface *surface, GdkSurface *parent, - struct wl_seat *seat) + GdkWaylandSeat *grab_input_seat) { GdkWaylandDisplay *display = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); GdkSurfaceImplWayland *impl = GDK_SURFACE_IMPL_WAYLAND (surface->impl); GdkSurfaceImplWayland *parent_impl = GDK_SURFACE_IMPL_WAYLAND (parent->impl); gpointer positioner; - GdkSeat *gdk_seat; - guint32 serial; if (!impl->display_server.wl_surface) return; @@ -2240,10 +2228,13 @@ gdk_wayland_surface_create_xdg_popup (GdkSurface *surface, g_assert_not_reached (); } - if (seat) + if (grab_input_seat) { - gdk_seat = gdk_display_get_default_seat (GDK_DISPLAY (display)); - serial = _gdk_wayland_seat_get_last_implicit_grab_serial (gdk_seat, NULL); + struct wl_seat *seat; + guint32 serial; + + seat = gdk_wayland_seat_get_wl_seat (GDK_SEAT (grab_input_seat)); + serial = _gdk_wayland_seat_get_last_implicit_grab_serial (grab_input_seat, NULL); switch (display->shell_variant) { @@ -2264,7 +2255,7 @@ gdk_wayland_surface_create_xdg_popup (GdkSurface *surface, display->current_popups = g_list_append (display->current_popups, surface); } -static struct wl_seat * +static GdkWaylandSeat * find_grab_input_seat (GdkSurface *surface, GdkSurface *transient_for) { @@ -2277,7 +2268,7 @@ find_grab_input_seat (GdkSurface *surface, * grab before showing the popup surface. */ if (impl->grab_input_seat) - return gdk_wayland_seat_get_wl_seat (impl->grab_input_seat); + return GDK_WAYLAND_SEAT (impl->grab_input_seat); /* HACK: GtkMenu grabs a special surface known as the "grab transfer surface" * and then transfers the grab over to the correct surface later. Look for @@ -2290,7 +2281,7 @@ find_grab_input_seat (GdkSurface *surface, { tmp_impl = GDK_SURFACE_IMPL_WAYLAND (attached_grab_surface->impl); if (tmp_impl->grab_input_seat) - return gdk_wayland_seat_get_wl_seat (tmp_impl->grab_input_seat); + return GDK_WAYLAND_SEAT (tmp_impl->grab_input_seat); } while (transient_for) @@ -2298,7 +2289,7 @@ find_grab_input_seat (GdkSurface *surface, tmp_impl = GDK_SURFACE_IMPL_WAYLAND (transient_for->impl); if (tmp_impl->grab_input_seat) - return gdk_wayland_seat_get_wl_seat (tmp_impl->grab_input_seat); + return GDK_WAYLAND_SEAT (tmp_impl->grab_input_seat); transient_for = tmp_impl->transient_for; } @@ -2394,7 +2385,7 @@ gdk_wayland_surface_map (GdkSurface *surface) if (should_map_as_popup (surface)) { gboolean create_fallback = FALSE; - struct wl_seat *grab_input_seat; + GdkWaylandSeat *grab_input_seat; /* Popup menus can appear without a transient parent, which means they * cannot be positioned properly on Wayland. This attempts to guess the @@ -2468,8 +2459,8 @@ gdk_wayland_surface_map (GdkSurface *surface) if (!create_fallback) { gdk_wayland_surface_create_xdg_popup (surface, - transient_for, - grab_input_seat); + transient_for, + grab_input_seat); } else { @@ -3555,7 +3546,7 @@ gdk_wayland_surface_begin_resize_drag (GdkSurface *surface, if (!is_realized_toplevel (surface)) return; - serial = _gdk_wayland_seat_get_last_implicit_grab_serial (gdk_device_get_seat (device), + serial = _gdk_wayland_seat_get_last_implicit_grab_serial (GDK_WAYLAND_SEAT (gdk_device_get_seat (device)), &sequence); switch (display_wayland->shell_variant) @@ -3606,7 +3597,7 @@ gdk_wayland_surface_begin_move_drag (GdkSurface *surface, if (!is_realized_toplevel (surface)) return; - serial = _gdk_wayland_seat_get_last_implicit_grab_serial (gdk_device_get_seat (device), + serial = _gdk_wayland_seat_get_last_implicit_grab_serial (GDK_WAYLAND_SEAT (gdk_device_get_seat (device)), &sequence); switch (display_wayland->shell_variant) { |