macos: Create drag surface directly
authorBenjamin Otte <otte@redhat.com>
Tue, 18 Apr 2023 14:38:57 +0000 (16:38 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 26 Apr 2023 19:03:34 +0000 (21:03 +0200)
Do not go via macos_surface_new().

gdk/macos/gdkmacosdragsurface-private.h
gdk/macos/gdkmacosdragsurface.c
gdk/macos/gdkmacossurface.c

index bb9bea97e1fcc4c2cebbc807b4afb909d0cab2f9..516562bc3c12cee8a9987bf8f768f8615ad38163 100644 (file)
@@ -32,7 +32,6 @@ typedef struct _GdkMacosDragSurfaceClass GdkMacosDragSurfaceClass;
 
 GType            _gdk_macos_drag_surface_get_type (void);
 GdkMacosSurface *_gdk_macos_drag_surface_new      (GdkMacosDisplay *display,
-                                                   GdkFrameClock   *frame_clock,
                                                    int              x,
                                                    int              y,
                                                    int              width,
index dd6d5e520ebd8f948f7e61287d2e000a5195312d..b5041f7067b446fcf939b36b5ea1c6a5617ccc8d 100644 (file)
@@ -25,6 +25,8 @@
 #include "gdkmacosdisplay-private.h"
 #include "gdkmacosutils-private.h"
 
+#include "gdk/gdkframeclockidleprivate.h"
+
 struct _GdkMacosDragSurface
 {
   GdkMacosSurface parent_instance;
@@ -73,7 +75,6 @@ _gdk_macos_drag_surface_init (GdkMacosDragSurface *self)
 
 GdkMacosSurface *
 _gdk_macos_drag_surface_new (GdkMacosDisplay *display,
-                             GdkFrameClock   *frame_clock,
                              int              x,
                              int              y,
                              int              width,
@@ -81,6 +82,7 @@ _gdk_macos_drag_surface_new (GdkMacosDisplay *display,
 {
   GDK_BEGIN_MACOS_ALLOC_POOL;
 
+  GdkFrameClock *frame_clock;
   GdkMacosWindow *window;
   GdkMacosSurface *self;
   NSScreen *screen;
@@ -113,12 +115,16 @@ _gdk_macos_drag_surface_new (GdkMacosDisplay *display,
   [window setBackgroundColor:[NSColor clearColor]];
   [window setDecorated:NO];
 
+  frame_clock = _gdk_frame_clock_idle_new ();
+
   self = g_object_new (GDK_TYPE_MACOS_DRAG_SURFACE,
                        "display", display,
                        "frame-clock", frame_clock,
                        "native", window,
                        NULL);
 
+  g_object_unref (frame_clock);
+
   GDK_END_MACOS_ALLOC_POOL;
 
   return g_steal_pointer (&self);
index 1c2008a521330033f01fe86a7193f4ab4b2d60c3..92e61d52f3d256eef0534564677923810bd9aab2 100644 (file)
@@ -429,10 +429,8 @@ gdk_macos_surface_drag_begin (GdkSurface         *surface,
 
   gdk_macos_device_query_state (device, surface, NULL, &px, &py, NULL);
   _gdk_macos_surface_get_root_coords (GDK_MACOS_SURFACE (surface), &sx, &sy);
-  drag_surface = _gdk_macos_surface_new (GDK_MACOS_DISPLAY (surface->display),
-                                         GDK_SURFACE_DRAG,
-                                         NULL,
-                                         sx, sy, 1, 1);
+  drag_surface = _gdk_macos_drag_surface_new (GDK_MACOS_DISPLAY (surface->display),
+                                              sx, sy, 1, 1);
   drag = g_object_new (GDK_TYPE_MACOS_DRAG,
                        "drag-surface", drag_surface,
                        "surface", surface,
@@ -640,9 +638,6 @@ _gdk_macos_surface_new (GdkMacosDisplay *display,
       break;
 
     case GDK_SURFACE_DRAG:
-      ret = _gdk_macos_drag_surface_new (display, frame_clock, x, y, width, height);
-      break;
-
     default:
       g_warn_if_reached ();
       ret = NULL;