From 808cde74bef540912d40353eed3e32dddeae7f21 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Thu, 20 Apr 2023 23:29:17 +0200 Subject: [PATCH] wayland: Construct the frame clock in the surface ... instead of passing it to g_object_new(). --- gdk/wayland/gdkdragsurface-wayland.c | 16 ++++++++++++++++ gdk/wayland/gdkpopup-wayland.c | 12 ++++++++++++ gdk/wayland/gdksurface-wayland.c | 11 ----------- gdk/wayland/gdktoplevel-wayland.c | 8 +++++++- 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/gdk/wayland/gdkdragsurface-wayland.c b/gdk/wayland/gdkdragsurface-wayland.c index ed130271fc..b300e6c877 100644 --- a/gdk/wayland/gdkdragsurface-wayland.c +++ b/gdk/wayland/gdkdragsurface-wayland.c @@ -101,11 +101,27 @@ gdk_wayland_drag_surface_compute_size (GdkSurface *surface) return FALSE; } +static void +gdk_wayland_drag_surface_constructed (GObject *object) +{ + GdkSurface *surface = GDK_SURFACE (object); + GdkFrameClock *frame_clock; + + frame_clock = _gdk_frame_clock_idle_new (); + gdk_surface_set_frame_clock (surface, frame_clock); + g_object_unref (frame_clock); + + G_OBJECT_CLASS (gdk_wayland_drag_surface_parent_class)->constructed (object); +} + static void gdk_wayland_drag_surface_class_init (GdkWaylandDragSurfaceClass *class) { + GObjectClass *object_class = G_OBJECT_CLASS (class); GdkSurfaceClass *surface_class = GDK_SURFACE_CLASS (class); + object_class->constructed = gdk_wayland_drag_surface_constructed; + surface_class->compute_size = gdk_wayland_drag_surface_compute_size; } diff --git a/gdk/wayland/gdkpopup-wayland.c b/gdk/wayland/gdkpopup-wayland.c index c062c8e3e5..9bd064b401 100644 --- a/gdk/wayland/gdkpopup-wayland.c +++ b/gdk/wayland/gdkpopup-wayland.c @@ -1040,6 +1040,17 @@ gdk_wayland_popup_init (GdkWaylandPopup *popup) { } +static void +gdk_wayland_popup_constructed (GObject *object) +{ + GdkWaylandPopup *self = GDK_WAYLAND_POPUP (object); + GdkSurface *surface = GDK_SURFACE (self); + + gdk_surface_set_frame_clock (surface, gdk_surface_get_frame_clock (gdk_popup_get_parent (GDK_POPUP (self)))); + + G_OBJECT_CLASS (gdk_wayland_popup_parent_class)->constructed (object); +} + static void gdk_wayland_popup_get_property (GObject *object, guint prop_id, @@ -1097,6 +1108,7 @@ gdk_wayland_popup_class_init (GdkWaylandPopupClass *class) GdkSurfaceClass *surface_class = GDK_SURFACE_CLASS (class); GdkWaylandSurfaceClass *wayland_surface_class = GDK_WAYLAND_SURFACE_CLASS (class); + object_class->constructed = gdk_wayland_popup_constructed; object_class->get_property = gdk_wayland_popup_get_property; object_class->set_property = gdk_wayland_popup_set_property; diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c index bb6f6135d9..3d2ee45c1e 100644 --- a/gdk/wayland/gdksurface-wayland.c +++ b/gdk/wayland/gdksurface-wayland.c @@ -861,12 +861,6 @@ gdk_wayland_display_create_surface (GdkDisplay *display, GdkSurface *parent) { GdkSurface *surface; - GdkFrameClock *frame_clock; - - if (parent) - frame_clock = g_object_ref (gdk_surface_get_frame_clock (parent)); - else - frame_clock = _gdk_frame_clock_idle_new (); switch (surface_type) { @@ -874,7 +868,6 @@ gdk_wayland_display_create_surface (GdkDisplay *display, g_warn_if_fail (parent == NULL); surface = g_object_new (GDK_TYPE_WAYLAND_TOPLEVEL, "display", display, - "frame-clock", frame_clock, "title", get_default_title (), NULL); break; @@ -883,14 +876,12 @@ gdk_wayland_display_create_surface (GdkDisplay *display, surface = g_object_new (GDK_TYPE_WAYLAND_POPUP, "parent", parent, "display", display, - "frame-clock", frame_clock, NULL); break; case GDK_SURFACE_DRAG: g_warn_if_fail (parent == NULL); surface = g_object_new (GDK_TYPE_WAYLAND_DRAG_SURFACE, "display", display, - "frame-clock", frame_clock, NULL); break; default: @@ -898,8 +889,6 @@ gdk_wayland_display_create_surface (GdkDisplay *display, break; } - g_object_unref (frame_clock); - return surface; } diff --git a/gdk/wayland/gdktoplevel-wayland.c b/gdk/wayland/gdktoplevel-wayland.c index c0d929b984..de78d2a51a 100644 --- a/gdk/wayland/gdktoplevel-wayland.c +++ b/gdk/wayland/gdktoplevel-wayland.c @@ -1283,7 +1283,13 @@ gdk_wayland_toplevel_finalize (GObject *object) static void gdk_wayland_toplevel_constructed (GObject *object) { - GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (GDK_SURFACE (object))); + GdkSurface *surface = GDK_SURFACE (object); + GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface)); + GdkFrameClock *frame_clock; + + frame_clock = _gdk_frame_clock_idle_new (); + gdk_surface_set_frame_clock (surface, frame_clock); + g_object_unref (frame_clock); display_wayland->toplevels = g_list_prepend (display_wayland->toplevels, object); -- 2.30.2