gtk: Don't drop too many references
authorMatthias Clasen <mclasen@redhat.com>
Thu, 11 May 2023 00:19:23 +0000 (20:19 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 11 May 2023 10:13:03 +0000 (06:13 -0400)
We only have one reference to the surface,
and it is dropped by gdk_surface_destroy.

All the users of surfaces in gtk had the same
bug: they were all stealing an extra reference
to drop - the one that the renderer was leaking
until recently.

gtk/gtkpopover.c
gtk/gtktexthandle.c
gtk/gtktooltipwindow.c
gtk/gtkwindow.c

index 42e2b0638441062b06e6ad61d6f00886db9c8c03..b9fa4d2b721bfa409c2c2132392fbbfdbcd2f6cf 100644 (file)
@@ -1017,8 +1017,7 @@ gtk_popover_unrealize (GtkWidget *widget)
   g_signal_handlers_disconnect_by_func (priv->surface, surface_render, widget);
   g_signal_handlers_disconnect_by_func (priv->surface, surface_event, widget);
   gdk_surface_set_widget (priv->surface, NULL);
-  gdk_surface_destroy (priv->surface);
-  g_clear_object (&priv->surface);
+  g_clear_pointer (&priv->surface, gdk_surface_destroy);
 }
 
 static gboolean
index a27db0bc6f73630ed37d61ee4743edec79646592..898e08f3b65cdd559c2162f95eff8274e8e8283f 100644 (file)
@@ -280,8 +280,7 @@ gtk_text_handle_unrealize (GtkWidget *widget)
   g_signal_handlers_disconnect_by_func (handle->surface, surface_mapped_changed, widget);
 
   gdk_surface_set_widget (handle->surface, NULL);
-  gdk_surface_destroy (handle->surface);
-  g_clear_object (&handle->surface);
+  g_clear_pointer (&handle->surface, gdk_surface_destroy);
 }
 
 static void
index 341a606cf62b4ca97f0d5351fdeaea2b12fbd396..0802e09691ac9f87cfc12ed27cc59a977e60a163 100644 (file)
@@ -240,8 +240,7 @@ gtk_tooltip_window_unrealize (GtkWidget *widget)
   g_signal_handlers_disconnect_by_func (window->surface, surface_render, widget);
   g_signal_handlers_disconnect_by_func (window->surface, surface_event, widget);
   gdk_surface_set_widget (window->surface, NULL);
-  gdk_surface_destroy (window->surface);
-  g_clear_object (&window->surface);
+  g_clear_pointer (&window->surface, gdk_surface_destroy);
 }
 
 
index 34ede3226437a45cc79f6b1ace1d0a247904b2f3..3b83dd12abfa1e4e3994eb7830f165e11f8bc13e 100644 (file)
@@ -4451,8 +4451,7 @@ gtk_window_unrealize (GtkWidget *widget)
   GTK_WIDGET_CLASS (gtk_window_parent_class)->unrealize (widget);
 
   gdk_surface_set_widget (surface, NULL);
-  gdk_surface_destroy (surface);
-  g_clear_object (&priv->surface);
+  g_clear_pointer (&priv->surface, gdk_surface_destroy);
 }
 
 static void