diff options
author | Owen Taylor <otaylor@redhat.com> | 2003-06-09 01:55:01 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2003-06-09 01:55:01 +0000 |
commit | 075958ac88c01e5e4c2ddc9f7f8fd3866150cd1e (patch) | |
tree | aae57ebf9145cc625400c84826132619698be8df /gdk/gdkwindow.c | |
parent | 0815e69c8ec44b53e4dcd744e171355986fcfe31 (diff) | |
download | gtk+-075958ac88c01e5e4c2ddc9f7f8fd3866150cd1e.tar.gz |
Before delivering an event to a widget, check that (if relevant), the
Fri Jun 6 11:07:33 2003 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (event_window_still_viewable):
Before delivering an event to a widget, check that
(if relevant), the event's window is still viewable.
(#105642, Dennis Björklund)
* gdk/gdkwindow.c (_gdk_window_destroy_hierarchy):
NULL out private->parent, since after destruction
it might not be valid any more.
* gdk/gdkwindow.c (gdk_window_is_viewable): Fix some
accesses before g_return_val_if_fail(). Treat
DESTROYED windows as unmapped.
Diffstat (limited to 'gdk/gdkwindow.c')
-rw-r--r-- | gdk/gdkwindow.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 2534ad86d9..21310ceb2b 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -354,6 +354,7 @@ _gdk_window_destroy_hierarchy (GdkWindow *window, } _gdk_windowing_window_destroy (window, recursing, foreign_destroy); + private->parent = NULL; private->destroyed = TRUE; if (private->filters) @@ -780,17 +781,20 @@ gboolean gdk_window_is_viewable (GdkWindow *window) { GdkWindowObject *private = (GdkWindowObject *)window; - GdkScreen *screen = gdk_drawable_get_screen (window); - GdkWindow *root_window = gdk_screen_get_root_window (screen); + GdkScreen *screen; + GdkWindow *root_window; g_return_val_if_fail (window != NULL, FALSE); g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE); + + screen = gdk_drawable_get_screen (window); + root_window = gdk_screen_get_root_window (screen); while (private && (private != (GdkWindowObject *)root_window) && (GDK_WINDOW_TYPE (private) != GDK_WINDOW_FOREIGN)) { - if (!GDK_WINDOW_IS_MAPPED (window)) + if (GDK_WINDOW_DESTROYED (window) || !GDK_WINDOW_IS_MAPPED (window)) return FALSE; private = (GdkWindowObject *)private->parent; |