From: Matthias Clasen Date: Thu, 11 May 2023 00:19:23 +0000 (-0400) Subject: gtk: Don't drop too many references X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~280^2~4 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1a9c03449e7b9441dc2680ee4b1ec1815b91f238;p=gtk4.git gtk: Don't drop too many references 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. --- diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c index 42e2b06384..b9fa4d2b72 100644 --- a/gtk/gtkpopover.c +++ b/gtk/gtkpopover.c @@ -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 diff --git a/gtk/gtktexthandle.c b/gtk/gtktexthandle.c index a27db0bc6f..898e08f3b6 100644 --- a/gtk/gtktexthandle.c +++ b/gtk/gtktexthandle.c @@ -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 diff --git a/gtk/gtktooltipwindow.c b/gtk/gtktooltipwindow.c index 341a606cf6..0802e09691 100644 --- a/gtk/gtktooltipwindow.c +++ b/gtk/gtktooltipwindow.c @@ -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); } diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 34ede32264..3b83dd12ab 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -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