diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-09-19 13:05:57 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-09-19 13:07:11 -0400 |
commit | 3023a61e1d65bee1db3def19ddacf328ad4b6c90 (patch) | |
tree | 8f356ef82af3ff16116d5b4633c23b34fc20da25 | |
parent | c1e33056fb2ae513c579532d0f747b50bb6f0a49 (diff) | |
download | gtk+-3023a61e1d65bee1db3def19ddacf328ad4b6c90.tar.gz |
wayland: Change backend api to use GdkToplevel
Most of the surface api we have in the Wayland backend
only makes sense for toplevels, so reshuffle things to
take a GdkToplevel instead of a GdkSurface.
Update all callers and the docs.
-rw-r--r-- | docs/reference/gdk/gdk4-sections.txt | 12 | ||||
-rw-r--r-- | gdk/wayland/gdksurface-wayland.c | 267 | ||||
-rw-r--r-- | gdk/wayland/gdkwaylandsurface.h | 68 | ||||
-rw-r--r-- | gtk/gtkapplication-wayland.c | 14 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 18 |
5 files changed, 191 insertions, 188 deletions
diff --git a/docs/reference/gdk/gdk4-sections.txt b/docs/reference/gdk/gdk4-sections.txt index 68343f9923..d16c8ef83d 100644 --- a/docs/reference/gdk/gdk4-sections.txt +++ b/docs/reference/gdk/gdk4-sections.txt @@ -962,10 +962,14 @@ gdk_wayland_display_get_wl_compositor gdk_wayland_display_get_wl_display gdk_wayland_display_query_registry gdk_wayland_surface_get_wl_surface -GdkWaylandSurfaceExported -gdk_wayland_surface_export_handle -gdk_wayland_surface_unexport_handle -gdk_wayland_surface_set_transient_for_exported +GdkWaylandToplevelExported +gdk_wayland_toplevel_export_handle +gdk_wayland_toplevel_unexport_handle +gdk_wayland_toplevel_set_transient_for_exported +gdk_wayland_toplevel_set_application_id +gdk_wayland_toplevel_announce_csd +gdk_wayland_toplevel_inhibit_idle +gdk_wayland_toplevel_uninhibit_idle <SUBSECTION Standard> GDK_TYPE_WAYLAND_DEVICE diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c index aee98a2d48..022ea2c762 100644 --- a/gdk/wayland/gdksurface-wayland.c +++ b/gdk/wayland/gdksurface-wayland.c @@ -186,7 +186,7 @@ struct _GdkWaylandSurface int state_freeze_count; struct { - GdkWaylandSurfaceExported callback; + GdkWaylandToplevelExported callback; gpointer user_data; GDestroyNotify destroy_func; } exported; @@ -198,6 +198,7 @@ struct _GdkWaylandSurface size_t idle_inhibitor_refcount; }; +typedef struct _GdkWaylandSurfaceClass GdkWaylandSurfaceClass; struct _GdkWaylandSurfaceClass { GdkSurfaceClass parent_class; @@ -205,7 +206,6 @@ struct _GdkWaylandSurfaceClass G_DEFINE_TYPE (GdkWaylandSurface, gdk_wayland_surface, GDK_TYPE_SURFACE) -typedef struct _GdkWaylandToplevel GdkWaylandToplevel; struct _GdkWaylandToplevel { GdkWaylandSurface parent_instance; @@ -220,20 +220,14 @@ typedef struct static void gdk_wayland_toplevel_iface_init (GdkToplevelInterface *iface); -GType gdk_wayland_toplevel_get_type (void) G_GNUC_CONST; - -#define GDK_IS_WAYLAND_TOPLEVEL(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WAYLAND_TOPLEVEL)) -#define GDK_WAYLAND_TOPLEVEL(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WAYLAND_TOPLEVEL, GdkWaylandToplevel)) - -#define GDK_TYPE_WAYLAND_TOPLEVEL (gdk_wayland_toplevel_get_type ()) G_DEFINE_TYPE_WITH_CODE (GdkWaylandToplevel, gdk_wayland_toplevel, GDK_TYPE_WAYLAND_SURFACE, G_IMPLEMENT_INTERFACE (GDK_TYPE_TOPLEVEL, gdk_wayland_toplevel_iface_init)) -typedef struct +struct _GdkWaylandPopup { GdkWaylandSurface parent_instance; -} GdkWaylandPopup; +}; typedef struct { @@ -242,12 +236,6 @@ typedef struct static void gdk_wayland_popup_iface_init (GdkPopupInterface *iface); -GType gdk_wayland_popup_get_type (void) G_GNUC_CONST; - -#define GDK_IS_WAYLAND_POPUP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WAYLAND_POPUP)) -#define GDK_WAYLAND_POPUP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WAYLAND_POPUP, GdkWaylandPopup)) - -#define GDK_TYPE_WAYLAND_POPUP (gdk_wayland_popup_get_type ()) G_DEFINE_TYPE_WITH_CODE (GdkWaylandPopup, gdk_wayland_popup, GDK_TYPE_WAYLAND_SURFACE, G_IMPLEMENT_INTERFACE (GDK_TYPE_POPUP, gdk_wayland_popup_iface_init)) @@ -280,7 +268,7 @@ static void gdk_wayland_surface_maybe_resize (GdkSurface *surface, static void gdk_wayland_surface_configure (GdkSurface *surface); -static void maybe_set_gtk_surface_dbus_properties (GdkSurface *surface); +static void maybe_set_gtk_surface_dbus_properties (GdkWaylandSurface *impl); static void maybe_set_gtk_surface_modal (GdkSurface *surface); static void gdk_wayland_surface_sync_margin (GdkSurface *surface); @@ -302,7 +290,7 @@ static void update_popup_layout_state (GdkSurface *surface, int height, GdkPopupLayout *layout); -static gboolean gdk_wayland_surface_is_exported (GdkSurface *surface); +static gboolean gdk_wayland_surface_is_exported (GdkWaylandSurface *impl); static void gdk_wayland_surface_init (GdkWaylandSurface *impl) @@ -868,15 +856,14 @@ gdk_wayland_surface_dispose (GObject *object) static void gdk_wayland_surface_finalize (GObject *object) { - GdkSurface *surface = GDK_SURFACE (object); GdkWaylandSurface *impl; g_return_if_fail (GDK_IS_WAYLAND_SURFACE (object)); impl = GDK_WAYLAND_SURFACE (object); - if (gdk_wayland_surface_is_exported (surface)) - gdk_wayland_surface_unexport_handle (surface); + if (gdk_wayland_surface_is_exported (impl)) + gdk_wayland_toplevel_unexport_handle (GDK_TOPLEVEL (impl)); g_free (impl->title); @@ -913,28 +900,22 @@ gdk_wayland_surface_resize (GdkSurface *surface, } static gboolean -is_realized_shell_surface (GdkSurface *surface) +is_realized_shell_surface (GdkWaylandSurface *impl) { - GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); - return (impl->display_server.xdg_surface || impl->display_server.zxdg_surface_v6); } static gboolean -is_realized_toplevel (GdkSurface *surface) +is_realized_toplevel (GdkWaylandSurface *impl) { - GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); - return (impl->display_server.xdg_toplevel || impl->display_server.zxdg_toplevel_v6); } static gboolean -is_realized_popup (GdkSurface *surface) +is_realized_popup (GdkWaylandSurface *impl) { - GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); - return (impl->display_server.xdg_popup || impl->display_server.zxdg_popup_v6); } @@ -964,7 +945,7 @@ gdk_wayland_surface_maybe_resize (GdkSurface *surface, * force the new size onto the compositor. See bug #772505. */ - is_xdg_popup = is_realized_popup (surface); + is_xdg_popup = is_realized_popup (impl); is_visible = gdk_surface_get_mapped (surface); if (is_xdg_popup && is_visible && !impl->initial_configure_received) @@ -989,7 +970,7 @@ gdk_wayland_surface_sync_parent (GdkSurface *surface, g_assert (parent == NULL || gdk_surface_get_display (surface) == gdk_surface_get_display (parent)); - if (!is_realized_toplevel (surface)) + if (!is_realized_toplevel (impl)) return; if (toplevel->transient_for) @@ -1036,17 +1017,15 @@ gdk_wayland_surface_sync_parent (GdkSurface *surface, } static void -gdk_wayland_surface_sync_parent_of_imported (GdkSurface *surface) +gdk_wayland_surface_sync_parent_of_imported (GdkWaylandSurface *impl) { - GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); - if (!impl->display_server.wl_surface) return; if (!impl->imported_transient_for) return; - if (!is_realized_toplevel (surface)) + if (!is_realized_toplevel (impl)) return; zxdg_imported_v1_set_parent_of (impl->imported_transient_for, @@ -1060,7 +1039,7 @@ gdk_wayland_surface_sync_title (GdkSurface *surface) GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); - if (!is_realized_toplevel (surface)) + if (!is_realized_toplevel (impl)) return; if (!impl->title) @@ -1095,7 +1074,7 @@ gdk_wayland_surface_get_window_geometry (GdkSurface *surface, }; } -static void gdk_wayland_surface_set_geometry_hints (GdkSurface *surface, +static void gdk_wayland_surface_set_geometry_hints (GdkWaylandSurface *impl, const GdkGeometry *geometry, GdkSurfaceHints geom_mask); @@ -1107,11 +1086,11 @@ gdk_wayland_surface_sync_margin (GdkSurface *surface) GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); GdkRectangle geometry; - if (!is_realized_shell_surface (surface)) + if (!is_realized_shell_surface (impl)) return; gdk_wayland_surface_get_window_geometry (surface, &geometry); - gdk_wayland_surface_set_geometry_hints (surface, + gdk_wayland_surface_set_geometry_hints (impl, &impl->geometry_hints, impl->geometry_mask); @@ -1312,7 +1291,7 @@ configure_surface_geometry (GdkSurface *surface) geometry.max_height = geometry.min_height = height; mask = GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE; } - gdk_wayland_surface_set_geometry_hints (surface, &geometry, mask); + gdk_wayland_surface_set_geometry_hints (impl, &geometry, mask); gdk_surface_constrain_size (&geometry, mask, width, height, &width, &height); gdk_wayland_surface_resize (surface, width, height, impl->scale); } @@ -1475,9 +1454,9 @@ gdk_wayland_surface_configure (GdkSurface *surface) impl->has_uncommitted_ack_configure = TRUE; - if (is_realized_popup (surface)) + if (is_realized_popup (impl)) gdk_wayland_surface_configure_popup (surface); - else if (is_realized_toplevel (surface)) + else if (is_realized_toplevel (impl)) gdk_wayland_surface_configure_toplevel (surface); else g_warn_if_reached (); @@ -1707,21 +1686,25 @@ create_zxdg_toplevel_v6_resources (GdkSurface *surface) } void -gdk_wayland_surface_set_application_id (GdkSurface *surface, const char* application_id) +gdk_wayland_toplevel_set_application_id (GdkToplevel *toplevel, + const char *application_id) { GdkWaylandSurface *impl; GdkWaylandDisplay *display_wayland; + g_return_if_fail (GDK_IS_WAYLAND_TOPLEVEL (toplevel)); + g_return_if_fail (application_id != NULL); - if (GDK_SURFACE_DESTROYED (surface)) + if (GDK_SURFACE_DESTROYED (toplevel)) return; - if (!is_realized_toplevel (surface)) + impl = GDK_WAYLAND_SURFACE (toplevel); + + if (!is_realized_toplevel (impl)) return; - display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); - impl = GDK_WAYLAND_SURFACE (surface); + display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (GDK_SURFACE (toplevel))); switch (display_wayland->shell_variant) { @@ -1760,7 +1743,7 @@ gdk_wayland_surface_create_xdg_toplevel (GdkSurface *surface) } gdk_wayland_surface_sync_parent (surface, NULL); - gdk_wayland_surface_sync_parent_of_imported (surface); + gdk_wayland_surface_sync_parent_of_imported (impl); gdk_wayland_surface_sync_title (surface); switch (display_wayland->shell_variant) @@ -1792,9 +1775,9 @@ gdk_wayland_surface_create_xdg_toplevel (GdkSurface *surface) if (app_id == NULL) app_id = "GTK Application"; - gdk_wayland_surface_set_application_id (surface, app_id); + gdk_wayland_toplevel_set_application_id (GDK_TOPLEVEL (impl), app_id); - maybe_set_gtk_surface_dbus_properties (surface); + maybe_set_gtk_surface_dbus_properties (impl); maybe_set_gtk_surface_modal (surface); gdk_profiler_add_mark (GDK_PROFILER_CURRENT_TIME, 0, "wayland", "surface commit"); @@ -2028,10 +2011,13 @@ surface_anchor_to_gravity_legacy (GdkGravity rect_anchor) } void -gdk_wayland_surface_announce_csd (GdkSurface *surface) +gdk_wayland_toplevel_announce_csd (GdkToplevel *toplevel) { - GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); - GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); + GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (GDK_SURFACE (toplevel))); + GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (toplevel); + + g_return_if_fail (GDK_IS_WAYLAND_TOPLEVEL (toplevel)); + if (!display_wayland->server_decoration_manager) return; impl->display_server.server_decoration = @@ -2043,13 +2029,16 @@ gdk_wayland_surface_announce_csd (GdkSurface *surface) } gboolean -gdk_wayland_surface_inhibit_idle (GdkSurface *surface) +gdk_wayland_toplevel_inhibit_idle (GdkToplevel *toplevel) { - GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); - GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); + GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (GDK_SURFACE (toplevel))); + GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (toplevel); + + g_return_val_if_fail (GDK_IS_WAYLAND_TOPLEVEL (toplevel), FALSE); if (!display_wayland->idle_inhibit_manager) - return false; + return FALSE; + if (!impl->idle_inhibitor) { g_assert (impl->idle_inhibitor_refcount == 0); @@ -2058,13 +2047,16 @@ gdk_wayland_surface_inhibit_idle (GdkSurface *surface) impl->display_server.wl_surface); } ++impl->idle_inhibitor_refcount; - return true; + + return TRUE; } void -gdk_wayland_surface_uninhibit_idle (GdkSurface *surface) +gdk_wayland_toplevel_uninhibit_idle (GdkToplevel *toplevel) { - GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); + GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (toplevel); + + g_return_if_fail (GDK_IS_WAYLAND_TOPLEVEL (toplevel)); g_assert (impl->idle_inhibitor && impl->idle_inhibitor_refcount > 0); @@ -2467,15 +2459,15 @@ gdk_wayland_surface_create_xdg_popup (GdkSurface *surface, if (!impl->display_server.wl_surface) return FALSE; - if (!is_realized_shell_surface (parent)) + if (!is_realized_shell_surface (impl)) return FALSE; - if (is_realized_toplevel (surface)) + if (is_realized_toplevel (impl)) { g_warning ("Can't map popup, already mapped as toplevel"); return FALSE; } - if (is_realized_popup (surface)) + if (is_realized_popup (impl)) { g_warning ("Can't map popup, already mapped"); return FALSE; @@ -2874,7 +2866,7 @@ do_queue_relayout (GdkSurface *surface, GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); struct xdg_positioner *positioner; - g_assert (is_realized_popup (surface)); + g_assert (is_realized_popup (impl)); g_assert (impl->popup_state == POPUP_STATE_IDLE || impl->popup_state == POPUP_STATE_WAITING_FOR_FRAME); @@ -3317,15 +3309,14 @@ static const struct gtk_surface1_listener gtk_surface_listener = { }; static void -gdk_wayland_surface_init_gtk_surface (GdkSurface *surface) +gdk_wayland_surface_init_gtk_surface (GdkWaylandSurface *impl) { - GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); GdkWaylandDisplay *display = - GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); + GDK_WAYLAND_DISPLAY (gdk_surface_get_display (GDK_SURFACE (impl))); if (impl->display_server.gtk_surface != NULL) return; - if (!is_realized_toplevel (surface)) + if (!is_realized_toplevel (impl)) return; if (display->gtk_shell == NULL) return; @@ -3335,12 +3326,12 @@ gdk_wayland_surface_init_gtk_surface (GdkSurface *surface) impl->display_server.wl_surface); wl_proxy_set_queue ((struct wl_proxy *) impl->display_server.gtk_surface, impl->event_queue); - gdk_wayland_surface_set_geometry_hints (surface, + gdk_wayland_surface_set_geometry_hints (impl, &impl->geometry_hints, impl->geometry_mask); gtk_surface1_add_listener (impl->display_server.gtk_surface, >k_surface_listener, - surface); + impl); } static void @@ -3348,7 +3339,7 @@ maybe_set_gtk_surface_modal (GdkSurface *surface) { GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); - gdk_wayland_surface_init_gtk_surface (surface); + gdk_wayland_surface_init_gtk_surface (impl); if (impl->display_server.gtk_surface == NULL) return; @@ -3368,26 +3359,24 @@ gdk_wayland_surface_set_modal_hint (GdkSurface *surface, } static void -gdk_wayland_surface_set_geometry_hints (GdkSurface *surface, +gdk_wayland_surface_set_geometry_hints (GdkWaylandSurface *impl, const GdkGeometry *geometry, GdkSurfaceHints geom_mask) { GdkWaylandDisplay *display_wayland; - GdkWaylandSurface *impl; int min_width, min_height; int max_width, max_height; - if (GDK_SURFACE_DESTROYED (surface) || - !SURFACE_IS_TOPLEVEL (surface)) + if (GDK_SURFACE_DESTROYED (impl) || + !SURFACE_IS_TOPLEVEL (impl)) return; - impl = GDK_WAYLAND_SURFACE (surface); - display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); + display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (GDK_SURFACE (impl))); impl->geometry_hints = *geometry; impl->geometry_mask = geom_mask; - if (!is_realized_toplevel (surface)) + if (!is_realized_toplevel (impl)) return; if (geom_mask & GDK_HINT_MIN_SIZE) @@ -3538,7 +3527,7 @@ gdk_wayland_surface_minimize (GdkSurface *surface) !SURFACE_IS_TOPLEVEL (surface)) return; - if (!is_realized_toplevel (surface)) + if (!is_realized_toplevel (GDK_WAYLAND_SURFACE (surface))) return; #if 0 @@ -3574,7 +3563,7 @@ gdk_wayland_surface_maximize (GdkSurface *surface) _gdk_wayland_surface_save_size (surface); - if (is_realized_toplevel (surface)) + if (is_realized_toplevel (impl)) { GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); @@ -3605,7 +3594,7 @@ gdk_wayland_surface_unmaximize (GdkSurface *surface) if (GDK_SURFACE_DESTROYED (surface)) return; - if (is_realized_toplevel (surface)) + if (is_realized_toplevel (impl)) { GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); @@ -3640,7 +3629,7 @@ gdk_wayland_surface_fullscreen_on_monitor (GdkSurface *surface, _gdk_wayland_surface_save_size (surface); - if (is_realized_toplevel (surface)) + if (is_realized_toplevel (impl)) { GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); @@ -3678,7 +3667,7 @@ gdk_wayland_surface_fullscreen (GdkSurface *surface) _gdk_wayland_surface_save_size (surface); - if (is_realized_toplevel (surface)) + if (is_realized_toplevel (impl)) { GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); @@ -3713,7 +3702,7 @@ gdk_wayland_surface_unfullscreen (GdkSurface *surface) impl->initial_fullscreen_output = NULL; - if (is_realized_toplevel (surface)) + if (is_realized_toplevel (impl)) { GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); @@ -3797,7 +3786,7 @@ gdk_wayland_toplevel_begin_resize (GdkToplevel *toplevel, impl = GDK_WAYLAND_SURFACE (surface); display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); - if (!is_realized_toplevel (surface)) + if (!is_realized_toplevel (impl)) return; serial = _gdk_wayland_seat_get_last_implicit_grab_serial (GDK_WAYLAND_SEAT (gdk_device_get_seat (device)), @@ -3844,7 +3833,7 @@ gdk_wayland_toplevel_begin_move (GdkToplevel *toplevel, impl = GDK_WAYLAND_SURFACE (surface); display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); - if (!is_realized_toplevel (surface)) + if (!is_realized_toplevel (impl)) return; serial = _gdk_wayland_seat_get_last_implicit_grab_serial (GDK_WAYLAND_SEAT (gdk_device_get_seat (device)), @@ -3958,7 +3947,7 @@ gdk_wayland_surface_show_window_menu (GdkSurface *surface, return FALSE; } - if (!is_realized_toplevel (surface)) + if (!is_realized_toplevel (impl)) return FALSE; seat = gdk_event_get_seat (event); @@ -4137,10 +4126,8 @@ gdk_wayland_surface_get_gtk_surface (GdkSurface *surface) } static void -maybe_set_gtk_surface_dbus_properties (GdkSurface *surface) +maybe_set_gtk_surface_dbus_properties (GdkWaylandSurface *impl) { - GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); - if (impl->application.was_set) return; @@ -4152,7 +4139,7 @@ maybe_set_gtk_surface_dbus_properties (GdkSurface *surface) impl->application.unique_bus_name == NULL) return; - gdk_wayland_surface_init_gtk_surface (surface); + gdk_wayland_surface_init_gtk_surface (impl); if (impl->display_server.gtk_surface == NULL) return; @@ -4167,19 +4154,19 @@ maybe_set_gtk_surface_dbus_properties (GdkSurface *surface) } void -gdk_wayland_surface_set_dbus_properties_libgtk_only (GdkSurface *surface, - const char *application_id, - const char *app_menu_path, - const char *menubar_path, - const char *window_object_path, - const char *application_object_path, - const char *unique_bus_name) +gdk_wayland_toplevel_set_dbus_properties_libgtk_only (GdkToplevel *toplevel, + const char *application_id, + const char *app_menu_path, + const char *menubar_path, + const char *window_object_path, + const char *application_object_path, + const char *unique_bus_name) { GdkWaylandSurface *impl; - g_return_if_fail (GDK_IS_WAYLAND_SURFACE (surface)); + g_return_if_fail (GDK_IS_WAYLAND_TOPLEVEL (toplevel)); - impl = GDK_WAYLAND_SURFACE (surface); + impl = GDK_WAYLAND_SURFACE (toplevel); impl->application.application_id = g_strdup (application_id); impl->application.app_menu_path = g_strdup (app_menu_path); @@ -4189,7 +4176,7 @@ gdk_wayland_surface_set_dbus_properties_libgtk_only (GdkSurface *surface, g_strdup (application_object_path); impl->application.unique_bus_name = g_strdup (unique_bus_name); - maybe_set_gtk_surface_dbus_properties (surface); + maybe_set_gtk_surface_dbus_properties (impl); } void @@ -4212,10 +4199,10 @@ xdg_exported_handle (void *data, struct zxdg_exported_v1 *zxdg_exported_v1, const char *handle) { - GdkSurface *surface = data; - GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); + GdkToplevel *toplevel = data; + GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (toplevel); - impl->exported.callback (surface, handle, impl->exported.user_data); + impl->exported.callback (toplevel, handle, impl->exported.user_data); if (impl->exported.destroy_func) { g_clear_pointer (&impl->exported.user_data, @@ -4228,10 +4215,10 @@ static const struct zxdg_exported_v1_listener xdg_exported_listener = { }; /** - * GdkWaylandSurfaceExported: - * @surface: the #GdkSurface that is exported + * GdkWaylandToplevelExported: + * @toplevel: the #GdkToplevel that is exported * @handle: the handle - * @user_data: user data that was passed to gdk_wayland_surface_export_handle() + * @user_data: user data that was passed to gdk_wayland_toplevel_export_handle() * * Callback that gets called when the handle for a surface has been * obtained from the Wayland compositor. The handle can be passed @@ -4240,16 +4227,14 @@ static const struct zxdg_exported_v1_listener xdg_exported_listener = { */ static gboolean -gdk_wayland_surface_is_exported (GdkSurface *surface) +gdk_wayland_surface_is_exported (GdkWaylandSurface *impl) { - GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface); - return !!impl->display_server.xdg_exported; } /** - * gdk_wayland_surface_export_handle: - * @surface: the #GdkSurface to obtain a handle for + * gdk_wayland_toplevel_export_handle: + * @toplevel: the #GdkToplevel to obtain a handle for * @callback: callback to call with the handle * @user_data: (closure): user data for @callback * @destroy_func: destroy notify for @user_data @@ -4261,12 +4246,12 @@ gdk_wayland_surface_is_exported (GdkSurface *surface) * It is an error to call this function on a surface that is already * exported. * - * When the handle is no longer needed, gdk_wayland_surface_unexport_handle() + * When the handle is no longer needed, gdk_wayland_toplevel_unexport_handle() * should be called to clean up resources. * * The main purpose for obtaining a handle is to mark a surface * from another surface as transient for this one, see - * gdk_wayland_surface_set_transient_for_exported(). + * gdk_wayland_toplevel_set_transient_for_exported(). * * Note that this API depends on an unstable Wayland protocol, * and thus may require changes in the future. @@ -4275,20 +4260,20 @@ gdk_wayland_surface_is_exported (GdkSurface *surface) * an error occurred. */ gboolean -gdk_wayland_surface_export_handle (GdkSurface *surface, - GdkWaylandSurfaceExported callback, - gpointer user_data, - GDestroyNotify destroy_func) +gdk_wayland_toplevel_export_handle (GdkToplevel *toplevel, + GdkWaylandToplevelExported callback, + gpointer user_data, + GDestroyNotify destroy_func) { GdkWaylandSurface *impl; GdkWaylandDisplay *display_wayland; - GdkDisplay *display = gdk_surface_get_display (surface); + GdkDisplay *display = gdk_surface_get_display (GDK_SURFACE (toplevel)); struct zxdg_exported_v1 *xdg_exported; - g_return_val_if_fail (GDK_IS_WAYLAND_SURFACE (surface), FALSE); + g_return_val_if_fail (GDK_IS_WAYLAND_TOPLEVEL (toplevel), FALSE); g_return_val_if_fail (GDK_IS_WAYLAND_DISPLAY (display), FALSE); - impl = GDK_WAYLAND_SURFACE (surface); + impl = GDK_WAYLAND_SURFACE (toplevel); display_wayland = GDK_WAYLAND_DISPLAY (display); g_return_val_if_fail (!impl->display_server.xdg_exported, FALSE); @@ -4301,7 +4286,7 @@ gdk_wayland_surface_export_handle (GdkSurface *surface, xdg_exported = zxdg_exporter_v1_export (display_wayland->xdg_exporter, impl->display_server.wl_surface); - zxdg_exported_v1_add_listener (xdg_exported, &xdg_exported_listener, surface); + zxdg_exported_v1_add_listener (xdg_exported, &xdg_exported_listener, impl); impl->display_server.xdg_exported = xdg_exported; impl->exported.callback = callback; @@ -4312,11 +4297,11 @@ gdk_wayland_surface_export_handle (GdkSurface *surface, } /** - * gdk_wayland_surface_unexport_handle: - * @surface: the #GdkSurface to unexport + * gdk_wayland_toplevel_unexport_handle: + * @toplevel: the #GdkToplevel to unexport * * Destroys the handle that was obtained with - * gdk_wayland_surface_export_handle(). + * gdk_wayland_toplevel_export_handle(). * * It is an error to call this function on a surface that * does not have a handle. @@ -4325,13 +4310,13 @@ gdk_wayland_surface_export_handle (GdkSurface *surface, * and thus may require changes in the future. */ void -gdk_wayland_surface_unexport_handle (GdkSurface *surface) +gdk_wayland_toplevel_unexport_handle (GdkToplevel *toplevel) { GdkWaylandSurface *impl; - g_return_if_fail (GDK_IS_WAYLAND_SURFACE (surface)); + g_return_if_fail (GDK_IS_WAYLAND_TOPLEVEL (toplevel)); - impl = GDK_WAYLAND_SURFACE (surface); + impl = GDK_WAYLAND_SURFACE (toplevel); g_return_if_fail (impl->display_server.xdg_exported); @@ -4366,13 +4351,13 @@ static const struct zxdg_imported_v1_listener xdg_imported_listener = { }; /** - * gdk_wayland_surface_set_transient_for_exported: - * @surface: the #GdkSurface to make as transient + * gdk_wayland_toplevel_set_transient_for_exported: + * @toplevel: the #GdkToplevel to make as transient * @parent_handle_str: an exported handle for a surface * - * Marks @surface as transient for the surface to which the given + * Marks @toplevel as transient for the surface to which the given * @parent_handle_str refers. Typically, the handle will originate - * from a gdk_wayland_surface_export_handle() call in another process. + * from a gdk_wayland_toplevel_export_handle() call in another process. * * Note that this API depends on an unstable Wayland protocol, * and thus may require changes in the future. @@ -4381,17 +4366,17 @@ static const struct zxdg_imported_v1_listener xdg_imported_listener = { * %FALSE if an error occurred. */ gboolean -gdk_wayland_surface_set_transient_for_exported (GdkSurface *surface, - char *parent_handle_str) +gdk_wayland_toplevel_set_transient_for_exported (GdkToplevel *toplevel, + const char *parent_handle_str) { GdkWaylandSurface *impl; GdkWaylandDisplay *display_wayland; - GdkDisplay *display = gdk_surface_get_display (surface); + GdkDisplay *display = gdk_surface_get_display (GDK_SURFACE (toplevel)); - g_return_val_if_fail (GDK_IS_WAYLAND_SURFACE (surface), FALSE); + g_return_val_if_fail (GDK_IS_WAYLAND_TOPLEVEL (toplevel), FALSE); g_return_val_if_fail (GDK_IS_WAYLAND_DISPLAY (display), FALSE); - impl = GDK_WAYLAND_SURFACE (surface); + impl = GDK_WAYLAND_SURFACE (toplevel); display_wayland = GDK_WAYLAND_DISPLAY (display); if (!display_wayland->xdg_importer) @@ -4406,9 +4391,9 @@ gdk_wayland_surface_set_transient_for_exported (GdkSurface *surface, zxdg_importer_v1_import (display_wayland->xdg_importer, parent_handle_str); zxdg_imported_v1_add_listener (impl->imported_transient_for, &xdg_imported_listener, - surface); + toplevel); - gdk_wayland_surface_sync_parent_of_imported (surface); + gdk_wayland_surface_sync_parent_of_imported (impl); return TRUE; } @@ -4786,7 +4771,7 @@ gdk_wayland_toplevel_present (GdkToplevel *toplevel, wl_callback_add_listener (callback, &reconfigure_listener, &done); - while (is_realized_toplevel (surface) && + while (is_realized_toplevel (impl) && (!impl->initial_configure_received || !done)) wl_display_dispatch_queue (display_wayland->wl_display, impl->event_queue); diff --git a/gdk/wayland/gdkwaylandsurface.h b/gdk/wayland/gdkwaylandsurface.h index 54e0c6ff49..7fd45c519d 100644 --- a/gdk/wayland/gdkwaylandsurface.h +++ b/gdk/wayland/gdkwaylandsurface.h @@ -30,58 +30,72 @@ G_BEGIN_DECLS #ifdef GTK_COMPILATION typedef struct _GdkWaylandSurface GdkWaylandSurface; +typedef struct _GdkWaylandToplevel GdkWaylandToplevel; +typedef struct _GdkWaylandPopup GdkWaylandPopup; #else typedef GdkSurface GdkWaylandSurface; +typedef GdkToplevel GdkWaylandToplevel; +typedef GdkPopup GdkWaylandPopup; #endif -typedef struct _GdkWaylandSurfaceClass GdkWaylandSurfaceClass; #define GDK_TYPE_WAYLAND_SURFACE (gdk_wayland_surface_get_type()) #define GDK_WAYLAND_SURFACE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WAYLAND_SURFACE, GdkWaylandSurface)) -#define GDK_WAYLAND_SURFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WAYLAND_SURFACE, GdkWaylandSurfaceClass)) #define GDK_IS_WAYLAND_SURFACE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WAYLAND_SURFACE)) -#define GDK_IS_WAYLAND_SURFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WAYLAND_SURFACE)) -#define GDK_WAYLAND_SURFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WAYLAND_SURFACE, GdkWaylandSurfaceClass)) + +#define GDK_TYPE_WAYLAND_TOPLEVEL (gdk_wayland_toplevel_get_type()) +#define GDK_WAYLAND_TOPLEVEL(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WAYLAND_TOPLEVEL, GdkWaylandToplevel)) +#define GDK_IS_WAYLAND_TOPLEVEL(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WAYLAND_TOPLEVEL)) + +#define GDK_TYPE_WAYLAND_POPUP (gdk_wayland_popup_get_type()) +#define GDK_WAYLAND_POPUP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WAYLAND_POPUP, GdkWaylandPopup)) +#define GDK_IS_WAYLAND_POPUP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WAYLAND_POPUP)) GDK_AVAILABLE_IN_ALL GType gdk_wayland_surface_get_type (void); GDK_AVAILABLE_IN_ALL +GType gdk_wayland_toplevel_get_type (void); + +GDK_AVAILABLE_IN_ALL +GType gdk_wayland_popup_get_type (void); + +GDK_AVAILABLE_IN_ALL struct wl_surface *gdk_wayland_surface_get_wl_surface (GdkSurface *surface); GDK_AVAILABLE_IN_ALL -void gdk_wayland_surface_set_dbus_properties_libgtk_only (GdkSurface *surface, - const char *application_id, - const char *app_menu_path, - const char *menubar_path, - const char *window_object_path, - const char *application_object_path, - const char *unique_bus_name); - -typedef void (*GdkWaylandSurfaceExported) (GdkSurface *surface, - const char *handle, - gpointer user_data); +void gdk_wayland_toplevel_set_dbus_properties_libgtk_only (GdkToplevel *toplevel, + const char *application_id, + const char *app_menu_path, + const char *menubar_path, + const char *window_object_path, + const char *application_object_path, + const char *unique_bus_name); + +typedef void (*GdkWaylandToplevelExported) (GdkToplevel *toplevel, + const char *handle, + gpointer user_data); GDK_AVAILABLE_IN_ALL -gboolean gdk_wayland_surface_export_handle (GdkSurface *surface, - GdkWaylandSurfaceExported callback, - gpointer user_data, - GDestroyNotify destroy_func); +gboolean gdk_wayland_toplevel_export_handle (GdkToplevel *toplevel, + GdkWaylandToplevelExported callback, + gpointer user_data, + GDestroyNotify destroy_func); GDK_AVAILABLE_IN_ALL -void gdk_wayland_surface_unexport_handle (GdkSurface *surface); +void gdk_wayland_toplevel_unexport_handle (GdkToplevel *toplevel); GDK_AVAILABLE_IN_ALL -gboolean gdk_wayland_surface_set_transient_for_exported (GdkSurface *surface, - char *parent_handle_str); +gboolean gdk_wayland_toplevel_set_transient_for_exported (GdkToplevel *toplevel, + const char *parent_handle_str); GDK_AVAILABLE_IN_ALL -void gdk_wayland_surface_set_application_id (GdkSurface *surface, - const char *application_id); +void gdk_wayland_toplevel_set_application_id (GdkToplevel *toplevel, + const char *application_id); -void gdk_wayland_surface_announce_csd (GdkSurface *surface); +void gdk_wayland_toplevel_announce_csd (GdkToplevel *toplevel); -gboolean gdk_wayland_surface_inhibit_idle (GdkSurface *surface); -void gdk_wayland_surface_uninhibit_idle (GdkSurface *surface); +gboolean gdk_wayland_toplevel_inhibit_idle (GdkToplevel *toplevel); +void gdk_wayland_toplevel_uninhibit_idle (GdkToplevel *toplevel); G_END_DECLS diff --git a/gtk/gtkapplication-wayland.c b/gtk/gtkapplication-wayland.c index 865d60f674..5b175a8ba2 100644 --- a/gtk/gtkapplication-wayland.c +++ b/gtk/gtkapplication-wayland.c @@ -78,14 +78,14 @@ gtk_application_impl_wayland_handle_window_realize (GtkApplicationImpl *impl, gdk_surface = gtk_native_get_surface (GTK_NATIVE (window)); - if (!GDK_IS_WAYLAND_SURFACE (gdk_surface)) + if (!GDK_IS_WAYLAND_TOPLEVEL (gdk_surface)) return; window_path = gtk_application_impl_dbus_get_window_path (dbus, window); - gdk_wayland_surface_set_dbus_properties_libgtk_only (gdk_surface, - dbus->application_id, dbus->app_menu_path, dbus->menubar_path, - window_path, dbus->object_path, dbus->unique_name); + gdk_wayland_toplevel_set_dbus_properties_libgtk_only (GDK_TOPLEVEL (gdk_surface), + dbus->application_id, dbus->app_menu_path, dbus->menubar_path, + window_path, dbus->object_path, dbus->unique_name); g_free (window_path); @@ -125,9 +125,9 @@ gtk_application_impl_wayland_inhibit (GtkApplicationImpl *impl, if (flags & GTK_APPLICATION_INHIBIT_IDLE) { surface = gtk_native_get_surface (GTK_NATIVE (window)); - if (GDK_IS_WAYLAND_SURFACE (surface)) + if (GDK_IS_WAYLAND_TOPLEVEL (surface)) { - success = gdk_wayland_surface_inhibit_idle (surface); + success = gdk_wayland_toplevel_inhibit_idle (GDK_TOPLEVEL (surface)); if (success) { flags &= ~GTK_APPLICATION_INHIBIT_IDLE; @@ -157,7 +157,7 @@ gtk_application_impl_wayland_uninhibit (GtkApplicationImpl *impl, if (inhibitor->dbus_cookie) ((GtkApplicationImplWaylandClass *) G_OBJECT_GET_CLASS (wayland))->dbus_uninhibit (impl, inhibitor->dbus_cookie); if (inhibitor->surface) - gdk_wayland_surface_uninhibit_idle (inhibitor->surface); + gdk_wayland_toplevel_uninhibit_idle (GDK_TOPLEVEL (inhibitor->surface)); gtk_application_wayland_inhibitor_free (inhibitor); wayland->inhibitors = g_slist_delete_link (wayland->inhibitors, iter); return; diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 6dd6ae7be8..dccb6644f2 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -4415,7 +4415,7 @@ gtk_window_realize (GtkWidget *widget) #ifdef GDK_WINDOWING_WAYLAND if (priv->client_decorated && GDK_IS_WAYLAND_SURFACE (surface)) - gdk_wayland_surface_announce_csd (surface); + gdk_wayland_toplevel_announce_csd (GDK_TOPLEVEL (surface)); #endif gdk_toplevel_set_modal (GDK_TOPLEVEL (surface), priv->modal); @@ -6749,9 +6749,9 @@ typedef struct { } WaylandSurfaceHandleExportedData; static void -wayland_surface_handle_exported (GdkSurface *window, - const char *wayland_handle_str, - gpointer user_data) +wayland_surface_handle_exported (GdkToplevel *toplevel, + const char *wayland_handle_str, + gpointer user_data) { WaylandSurfaceHandleExportedData *data = user_data; char *handle_str; @@ -6792,10 +6792,10 @@ gtk_window_export_handle (GtkWindow *window, data->callback = callback; data->user_data = user_data; - if (!gdk_wayland_surface_export_handle (priv->surface, - wayland_surface_handle_exported, - data, - g_free)) + if (!gdk_wayland_toplevel_export_handle (GDK_TOPLEVEL (priv->surface), + wayland_surface_handle_exported, + data, + g_free)) { g_free (data); return FALSE; @@ -6821,7 +6821,7 @@ gtk_window_unexport_handle (GtkWindow *window) #ifdef GDK_WINDOWING_WAYLAND if (GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window)))) { - gdk_wayland_surface_unexport_handle (priv->surface); + gdk_wayland_toplevel_unexport_handle (GDK_TOPLEVEL (priv->surface)); return; } #endif |