wayland: Construct the frame clock in the surface
authorBenjamin Otte <otte@redhat.com>
Thu, 20 Apr 2023 21:29:17 +0000 (23:29 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 26 Apr 2023 19:03:34 +0000 (21:03 +0200)
... instead of passing it to g_object_new().

gdk/wayland/gdkdragsurface-wayland.c
gdk/wayland/gdkpopup-wayland.c
gdk/wayland/gdksurface-wayland.c
gdk/wayland/gdktoplevel-wayland.c

index ed130271fcd682b0839c5a65018f993770dfad3a..b300e6c8774993baad2c9a6b2550a46c938577c8 100644 (file)
@@ -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;
 }
 
index c062c8e3e561df4b19cc810d62ff638941098785..9bd064b40124f345b19d6a94a43edfef9f992ef8 100644 (file)
@@ -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;
 
index bb6f6135d90f6e35b04e46b4a3634e42306c4ac1..3d2ee45c1e3d52bfa27e2aadbc0e4b5f1074ca6c 100644 (file)
@@ -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;
 }
 
index c0d929b984afe9996ea15cbf7d28384fdac71cec..de78d2a51a9260c089c7616bcb91f6726395afdf 100644 (file)
@@ -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);