diff options
author | Benjamin Otte <otte@redhat.com> | 2010-09-09 02:13:33 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2010-09-26 15:11:41 +0200 |
commit | 7c62a443248f9b1b5de5cb79202e33afc3ec94d9 (patch) | |
tree | 6ec3f88af3062424d85a63987090f70f69f85dae | |
parent | ba21d3e687b316a45b029266fe4ed868df07ab62 (diff) | |
download | gtk+-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.c | 6 |
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; } } |