*/
#pragma once
-
-
-void gdk_wayland_surface_configure_popup (GdkWaylandPopup *popup);
-void frame_callback_popup (GdkWaylandPopup *popup);
-void gdk_wayland_popup_hide_surface (GdkWaylandPopup *popup);
-
gdk_wayland_surface_thaw_state (toplevel);
}
-void
-gdk_wayland_popup_hide_surface (GdkWaylandPopup *popup)
+static void
+gdk_wayland_popup_hide_surface (GdkWaylandSurface *wayland_surface)
{
+ GdkWaylandPopup *popup = GDK_WAYLAND_POPUP (wayland_surface);
GdkSurface *surface = GDK_SURFACE (popup);
GdkDisplay *display = gdk_surface_get_display (surface);
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
}
static void
-finish_pending_relayout (GdkWaylandPopup *wayland_popup)
+gdk_wayland_popup_handle_frame (GdkWaylandSurface *surface)
{
- g_assert (wayland_popup->state == POPUP_STATE_WAITING_FOR_FRAME);
- wayland_popup->state = POPUP_STATE_IDLE;
-
- thaw_popup_toplevel_state (wayland_popup);
-}
+ GdkWaylandPopup *wayland_popup = GDK_WAYLAND_POPUP (surface);
-void
-frame_callback_popup (GdkWaylandPopup *wayland_popup)
-{
- switch (wayland_popup->state)
- {
- case POPUP_STATE_IDLE:
- case POPUP_STATE_WAITING_FOR_REPOSITIONED:
- case POPUP_STATE_WAITING_FOR_CONFIGURE:
- break;
- case POPUP_STATE_WAITING_FOR_FRAME:
- finish_pending_relayout (wayland_popup);
- break;
- default:
- g_assert_not_reached ();
- }
+ switch (wayland_popup->state)
+ {
+ case POPUP_STATE_IDLE:
+ case POPUP_STATE_WAITING_FOR_REPOSITIONED:
+ case POPUP_STATE_WAITING_FOR_CONFIGURE:
+ break;
+ case POPUP_STATE_WAITING_FOR_FRAME:
+ wayland_popup->state = POPUP_STATE_IDLE;
+ thaw_popup_toplevel_state (wayland_popup);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
}
static gboolean
return FALSE;
}
-void
-gdk_wayland_surface_configure_popup (GdkWaylandPopup *wayland_popup)
+static void
+gdk_wayland_popup_handle_configure (GdkWaylandSurface *wayland_surface)
{
- GdkSurface *surface = GDK_SURFACE (wayland_popup);
- GdkWaylandSurface *wayland_surface = GDK_WAYLAND_SURFACE (wayland_popup);
+ GdkSurface *surface = GDK_SURFACE (wayland_surface);
+ GdkWaylandPopup *wayland_popup = GDK_WAYLAND_POPUP (wayland_surface);
GdkRectangle parent_geometry;
int x, y, width, height;
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
GdkSurfaceClass *surface_class = GDK_SURFACE_CLASS (class);
+ GdkWaylandSurfaceClass *wayland_surface_class = GDK_WAYLAND_SURFACE_CLASS (class);
object_class->get_property = gdk_wayland_popup_get_property;
object_class->set_property = gdk_wayland_popup_set_property;
surface_class->compute_size = gdk_wayland_popup_compute_size;
+ wayland_surface_class->handle_configure = gdk_wayland_popup_handle_configure;
+ wayland_surface_class->handle_frame = gdk_wayland_popup_handle_frame;
+ wayland_surface_class->hide_surface = gdk_wayland_popup_hide_surface;
+
gdk_popup_install_properties (object_class, 1);
}
struct _GdkWaylandSurfaceClass
{
GdkSurfaceClass parent_class;
+
+ void (* handle_configure) (GdkWaylandSurface *surface);
+
+ void (* handle_frame) (GdkWaylandSurface *surface);
+
+ void (* hide_surface) (GdkWaylandSurface *surface);
};
+#define GDK_WAYLAND_SURFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WAYLAND_SURFACE, GdkWaylandSurfaceClass))
+
+#define GDK_WAYLAND_SURFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WAYLAND_SURFACE, GdkWaylandSurfaceClass))
+
void gdk_wayland_surface_create_wl_surface (GdkSurface *surface);
void gdk_wayland_surface_update_size (GdkSurface *surface,
int32_t width,
if (!impl->awaiting_frame)
return;
- if (GDK_IS_WAYLAND_POPUP (surface))
- frame_callback_popup (GDK_WAYLAND_POPUP (surface));
+ GDK_WAYLAND_SURFACE_GET_CLASS (impl)->handle_frame (impl);
impl->awaiting_frame = FALSE;
if (impl->awaiting_frame_frozen)
impl->has_uncommitted_ack_configure = TRUE;
- if (GDK_IS_WAYLAND_POPUP (surface))
- gdk_wayland_surface_configure_popup (GDK_WAYLAND_POPUP (surface));
- else if (GDK_IS_WAYLAND_TOPLEVEL (surface))
- gdk_wayland_surface_configure_toplevel (GDK_WAYLAND_TOPLEVEL (surface));
- else
- g_warn_if_reached ();
+ GDK_WAYLAND_SURFACE_GET_CLASS (impl)->handle_configure (impl);
impl->last_configure_serial = impl->pending.serial;
gdk_surface_thaw_updates (surface);
}
- if (GDK_IS_WAYLAND_TOPLEVEL (surface))
- gdk_wayland_toplevel_hide_surface (GDK_WAYLAND_TOPLEVEL (surface));
-
- if (GDK_IS_WAYLAND_POPUP (surface))
- gdk_wayland_popup_hide_surface (GDK_WAYLAND_POPUP (surface));
+ GDK_WAYLAND_SURFACE_GET_CLASS (impl)->hide_surface (impl);
g_clear_pointer (&impl->display_server.wl_surface, wl_surface_destroy);
impl->opaque_region_dirty = TRUE;
}
+static void
+gdk_wayland_surface_default_handle_configure (GdkWaylandSurface *surface)
+{
+}
+
+static void
+gdk_wayland_surface_default_handle_frame (GdkWaylandSurface *surface)
+{
+}
+
+static void
+gdk_wayland_surface_default_hide_surface (GdkWaylandSurface *surface)
+{
+}
+
static void
gdk_wayland_surface_class_init (GdkWaylandSurfaceClass *klass)
{
surface_class->get_scale_factor = gdk_wayland_surface_get_scale_factor;
surface_class->set_opaque_region = gdk_wayland_surface_set_opaque_region;
surface_class->request_layout = gdk_wayland_surface_request_layout;
+
+ klass->handle_configure = gdk_wayland_surface_default_handle_configure;
+ klass->handle_frame = gdk_wayland_surface_default_handle_frame;
+ klass->hide_surface = gdk_wayland_surface_default_hide_surface;
}
/* }}} */
#pragma once
-void gdk_wayland_surface_configure_toplevel (GdkWaylandToplevel *toplevel);
void gdk_wayland_toplevel_set_geometry_hints (GdkWaylandToplevel *toplevel,
const GdkGeometry *geometry,
GdkSurfaceHints geom_mask);
-void gdk_wayland_toplevel_hide_surface (GdkWaylandToplevel *toplevel);
struct gtk_surface1 *
gdk_wayland_toplevel_get_gtk_surface (GdkWaylandToplevel *wayland_toplevel);
static void maybe_set_gtk_surface_dbus_properties (GdkWaylandToplevel *wayland_toplevel);
static void maybe_set_gtk_surface_modal (GdkWaylandToplevel *wayland_toplevel);
-void
-gdk_wayland_toplevel_hide_surface (GdkWaylandToplevel *toplevel)
+static void
+gdk_wayland_toplevel_hide_surface (GdkWaylandSurface *wayland_surface)
{
+ GdkWaylandToplevel *toplevel = GDK_WAYLAND_TOPLEVEL (wayland_surface);
GdkDisplay *display = gdk_surface_get_display (GDK_SURFACE (toplevel));
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
return FALSE;
}
-void
-gdk_wayland_surface_configure_toplevel (GdkWaylandToplevel *wayland_toplevel)
+static void
+gdk_wayland_toplevel_handle_configure (GdkWaylandSurface *wayland_surface)
{
- GdkSurface *surface = GDK_SURFACE (wayland_toplevel);
- GdkWaylandSurface *wayland_surface = GDK_WAYLAND_SURFACE (wayland_toplevel);
+ GdkSurface *surface = GDK_SURFACE (wayland_surface);
+ GdkWaylandToplevel *wayland_toplevel = GDK_WAYLAND_TOPLEVEL (wayland_surface);
GdkWaylandDisplay *display_wayland =
GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface));
GdkToplevelState new_state;
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
GdkSurfaceClass *surface_class = GDK_SURFACE_CLASS (class);
+ GdkWaylandSurfaceClass *wayland_surface_class = GDK_WAYLAND_SURFACE_CLASS (class);
object_class->get_property = gdk_wayland_toplevel_get_property;
object_class->set_property = gdk_wayland_toplevel_set_property;
surface_class->compute_size = gdk_wayland_toplevel_compute_size;
+ wayland_surface_class->handle_configure = gdk_wayland_toplevel_handle_configure;
+ wayland_surface_class->hide_surface = gdk_wayland_toplevel_hide_surface;
+
gdk_toplevel_install_properties (object_class, 1);
}