From 7ed0c85c61001c186820385fbde5dd56ca2b823a Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 9 Apr 2018 00:25:03 +0200 Subject: [PATCH] surface: Track all draw contexts created for the surface --- gdk/gdkdrawcontext.c | 7 ++++++- gdk/gdkinternals.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/gdk/gdkdrawcontext.c b/gdk/gdkdrawcontext.c index 565dd307d5..0f020f93e3 100644 --- a/gdk/gdkdrawcontext.c +++ b/gdk/gdkdrawcontext.c @@ -73,7 +73,11 @@ gdk_draw_context_dispose (GObject *gobject) GdkDrawContext *context = GDK_DRAW_CONTEXT (gobject); GdkDrawContextPrivate *priv = gdk_draw_context_get_instance_private (context); - g_clear_object (&priv->surface); + if (priv->surface) + { + priv->surface->draw_contexts = g_slist_remove (priv->surface->draw_contexts, context); + g_clear_object (&priv->surface); + } G_OBJECT_CLASS (gdk_draw_context_parent_class)->dispose (gobject); } @@ -92,6 +96,7 @@ gdk_draw_context_set_property (GObject *gobject, case PROP_SURFACE: priv->surface = g_value_dup_object (value); g_assert (priv->surface != NULL); + priv->surface->draw_contexts = g_slist_prepend (priv->surface->draw_contexts, context); break; default: diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index e17b355200..4a56b91c1d 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -223,6 +223,7 @@ struct _GdkSurface GdkFrameClock *frame_clock; /* NULL to use from parent or default */ + GSList *draw_contexts; GdkDrawingContext *drawing_context; cairo_region_t *opaque_region;