diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c index 00990ea40e..6d8e92aec3 100644 --- a/gdk/gdksurface.c +++ b/gdk/gdksurface.c @@ -2657,18 +2657,6 @@ gdk_synthesize_surface_state (GdkSurface *surface, gdk_surface_set_state (surface, (surface->state | set_flags) & ~unset_flags); } -static void -hide_popup_chain (GdkSurface *surface) -{ - GdkSurface *parent; - - gdk_surface_hide (surface); - - parent = surface->parent; - if (parent->autohide) - hide_popup_chain (parent); -} - static gboolean check_autohide (GdkEvent *event) { @@ -2695,13 +2683,23 @@ check_autohide (GdkEvent *event) device = gdk_event_get_device (event); if (gdk_device_grab_info (display, device, &grab_surface, NULL)) { - GdkSurface *event_surface = gdk_event_get_surface (event); + GdkSurface *event_surface; + + event_surface = gdk_event_get_surface (event); if (grab_surface != event_surface && grab_surface != event_surface->parent && grab_surface->autohide) { - hide_popup_chain (grab_surface); + GdkSurface *surface = grab_surface; + + do + { + gdk_surface_hide (surface); + surface = surface->parent; + } + while (surface->autohide && surface != event_surface); + return TRUE; } }