summaryrefslogtreecommitdiff
path: root/gdk/gdkimage.c
diff options
context:
space:
mode:
authorMichael Natterer <mitch@imendio.com>2006-01-12 13:50:51 +0000
committerMichael Natterer <mitch@src.gnome.org>2006-01-12 13:50:51 +0000
commitb060715deb11baa409276a148e4af8306624568a (patch)
tree319d8946c85740f8ef1ec09131aa857ab632cf51 /gdk/gdkimage.c
parent19454762856bfc9564f307c66e92fb754f655551 (diff)
downloadgtk+-b060715deb11baa409276a148e4af8306624568a.tar.gz
connect to the display's "closed" signal and free the cached scratch
2006-01-12 Michael Natterer <mitch@imendio.com> * gdk/gdkimage.c (scratch_image_info_for_depth): connect to the display's "closed" signal and free the cached scratch images upon display closing (bug #85715).
Diffstat (limited to 'gdk/gdkimage.c')
-rw-r--r--gdk/gdkimage.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/gdk/gdkimage.c b/gdk/gdkimage.c
index a2744261a2..db47ebe361 100644
--- a/gdk/gdkimage.c
+++ b/gdk/gdkimage.c
@@ -226,6 +226,25 @@ allocate_scratch_images (GdkScratchImageInfo *info,
return TRUE;
}
+static void
+scratch_image_info_display_closed (GdkDisplay *display,
+ gboolean is_error,
+ GdkScratchImageInfo *image_info)
+{
+ gint i;
+
+ g_signal_handlers_disconnect_by_func (display,
+ scratch_image_info_display_closed,
+ image_info);
+
+ scratch_image_infos = g_slist_remove (scratch_image_infos, image_info);
+
+ for (i = 0; i < image_info->n_images; i++)
+ g_object_unref (image_info->static_image[i]);
+
+ g_free (image_info);
+}
+
static GdkScratchImageInfo *
scratch_image_info_for_depth (GdkScreen *screen,
gint depth)
@@ -249,6 +268,10 @@ scratch_image_info_for_depth (GdkScreen *screen,
image_info->depth = depth;
image_info->screen = screen;
+ g_signal_connect (gdk_screen_get_display (screen), "closed",
+ G_CALLBACK (scratch_image_info_display_closed),
+ image_info);
+
/* Try to allocate as few possible shared images */
for (i=0; i < G_N_ELEMENTS (possible_n_images); i++)
{