diff options
Diffstat (limited to 'gdk/quartz/gdkwindow-quartz.c')
-rw-r--r-- | gdk/quartz/gdkwindow-quartz.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c index f8d3fc2e59..b1551eabb4 100644 --- a/gdk/quartz/gdkwindow-quartz.c +++ b/gdk/quartz/gdkwindow-quartz.c @@ -392,8 +392,10 @@ _gdk_windowing_window_init (void) g_assert (_gdk_root == NULL); _gdk_root = g_object_new (GDK_TYPE_WINDOW, NULL); + private = (GdkWindowObject *)_gdk_root; - + + private->state = 0; /* We don't want GDK_WINDOW_STATE_WITHDRAWN here */ private->window_type = GDK_WINDOW_ROOT; private->depth = 24; } @@ -426,6 +428,20 @@ _gdk_windowing_window_destroy_foreign (GdkWindow *window) /* FIXME: Implement */ } +static gboolean +all_parents_shown (GdkWindowObject *private) +{ + while (GDK_WINDOW_IS_MAPPED (private)) + { + if (private->parent) + private = (GdkWindowObject *)private->parent; + else + return TRUE; + } + + return FALSE; +} + static void show_window_internal (GdkWindow *window, gboolean raise) { @@ -441,7 +457,7 @@ show_window_internal (GdkWindow *window, gboolean raise) impl = GDK_WINDOW_IMPL_QUARTZ (private->impl); - /* FIXME: We need to raise the window (move it to the top in the list)*/ + /* FIXME: We need to raise the window (move it to the top in the list) */ if (impl->toplevel) { @@ -454,6 +470,9 @@ show_window_internal (GdkWindow *window, gboolean raise) [impl->view setNeedsDisplay:YES]; } + if (all_parents_shown (private->parent)) + _gdk_quartz_send_map_events (window); + gdk_synthesize_window_state (window, GDK_WINDOW_STATE_WITHDRAWN, 0); GDK_QUARTZ_RELEASE_POOL; @@ -504,8 +523,11 @@ gdk_window_hide (GdkWindow *window) [impl->view setHidden:YES]; } - gdk_pointer_ungrab (0); + if (window == _gdk_quartz_pointer_grab_window) + gdk_pointer_ungrab (0); + if (window == _gdk_quartz_keyboard_grab_window) + gdk_keyboard_ungrab (0); } void |