diff options
author | Michael Natterer <mitch@imendio.com> | 2006-01-12 13:50:51 +0000 |
---|---|---|
committer | Michael Natterer <mitch@src.gnome.org> | 2006-01-12 13:50:51 +0000 |
commit | b060715deb11baa409276a148e4af8306624568a (patch) | |
tree | 319d8946c85740f8ef1ec09131aa857ab632cf51 /gdk/gdkimage.c | |
parent | 19454762856bfc9564f307c66e92fb754f655551 (diff) | |
download | gtk+-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.c | 23 |
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++) { |