diff options
author | Matthias Clasen <mclasen@redhat.com> | 2010-02-23 12:32:36 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2010-02-23 12:51:44 -0500 |
commit | 325cbef27edd58b801509a2016aee6ab6e49d2f1 (patch) | |
tree | 076fec0990de286d1db0ba25b560e61efda7a6dd /gdk/x11 | |
parent | cc66fd5eae6fd9d9cd879c02c40c3965334d1131 (diff) | |
download | gtk+-325cbef27edd58b801509a2016aee6ab6e49d2f1.tar.gz |
Protect against X errors when clearing the DND cache
This was reported as a problem in bug 609952.
Diffstat (limited to 'gdk/x11')
-rw-r--r-- | gdk/x11/gdkdnd-x11.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/gdk/x11/gdkdnd-x11.c b/gdk/x11/gdkdnd-x11.c index 2da9567b61..824f96d235 100644 --- a/gdk/x11/gdkdnd-x11.c +++ b/gdk/x11/gdkdnd-x11.c @@ -573,15 +573,21 @@ static void gdk_window_cache_destroy (GdkWindowCache *cache) { GdkWindow *root_window = gdk_screen_get_root_window (cache->screen); - - XSelectInput (GDK_WINDOW_XDISPLAY (root_window), + + XSelectInput (GDK_WINDOW_XDISPLAY (root_window), GDK_WINDOW_XWINDOW (root_window), cache->old_event_mask); gdk_window_remove_filter (root_window, gdk_window_cache_filter, cache); gdk_window_remove_filter (NULL, gdk_window_cache_shape_filter, cache); - g_list_foreach (cache->children, (GFunc)free_cache_child, + gdk_error_trap_push (); + + g_list_foreach (cache->children, (GFunc)free_cache_child, gdk_screen_get_display (cache->screen)); + + gdk_flush (); + gdk_error_trap_pop (); + g_list_free (cache->children); g_hash_table_destroy (cache->child_hash); |