summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2010-09-09 02:13:33 +0200
committerBenjamin Otte <otte@redhat.com>2010-09-26 15:11:41 +0200
commit7c62a443248f9b1b5de5cb79202e33afc3ec94d9 (patch)
tree6ec3f88af3062424d85a63987090f70f69f85dae
parentba21d3e687b316a45b029266fe4ed868df07ab62 (diff)
downloadgtk+-7c62a443248f9b1b5de5cb79202e33afc3ec94d9.tar.gz
gdk: Make GdkWindow cope better with its surface outliving the window
Make extra sure we release the surface properly. Also make sure that the released surface doesn't keep any references to us.
-rw-r--r--gdk/gdkwindow.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 40252bef5b..524a5d977b 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -523,6 +523,8 @@ gdk_window_finalize (GObject *object)
_gdk_window_destroy (window, TRUE);
}
+ gdk_window_drop_cairo_surface (obj);
+
if (obj->impl)
{
g_object_unref (obj->impl);
@@ -1027,8 +1029,7 @@ recompute_visible_regions_internal (GdkWindowObject *private,
private->width,
private->height)))
{
- cairo_surface_destroy (private->cairo_surface);
- private->cairo_surface = NULL;
+ gdk_window_drop_cairo_surface (private);
}
}
@@ -3664,6 +3665,7 @@ gdk_window_drop_cairo_surface (GdkWindowObject *private)
cairo_surface_finish (private->cairo_surface);
cairo_surface_set_user_data (private->cairo_surface, &gdk_window_cairo_key,
NULL, NULL);
+ private->cairo_surface = NULL;
}
}