summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-05-10 20:19:23 -0400
committerMatthias Clasen <mclasen@redhat.com>2023-05-11 06:13:03 -0400
commit1a9c03449e7b9441dc2680ee4b1ec1815b91f238 (patch)
treef0b4e2238940facea07783d5852962c47d863506
parentaee214b09d41a481cfa1e26aa777b8f5da59e183 (diff)
downloadgtk+-1a9c03449e7b9441dc2680ee4b1ec1815b91f238.tar.gz
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.
-rw-r--r--gtk/gtkpopover.c3
-rw-r--r--gtk/gtktexthandle.c3
-rw-r--r--gtk/gtktooltipwindow.c3
-rw-r--r--gtk/gtkwindow.c3
4 files changed, 4 insertions, 8 deletions
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