summaryrefslogtreecommitdiff
path: root/gdk/gdkwindow.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2003-06-09 01:55:01 +0000
committerOwen Taylor <otaylor@src.gnome.org>2003-06-09 01:55:01 +0000
commit075958ac88c01e5e4c2ddc9f7f8fd3866150cd1e (patch)
treeaae57ebf9145cc625400c84826132619698be8df /gdk/gdkwindow.c
parent0815e69c8ec44b53e4dcd744e171355986fcfe31 (diff)
downloadgtk+-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.c10
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;