diff --git a/src/core/screen.c b/src/core/screen.c index 4fbf22456..b8ac22f76 100644 --- a/src/core/screen.c +++ b/src/core/screen.c @@ -2888,7 +2888,15 @@ check_fullscreen_func (gpointer data) g_slist_free (fullscreen_monitors); if (in_fullscreen_changed) - g_signal_emit (screen, screen_signals[IN_FULLSCREEN_CHANGED], 0, NULL); + { + /* DOCK window stacking depends on the monitor's fullscreen + status so we need to trigger a re-layering. */ + MetaWindow *window = meta_stack_get_top (screen->stack); + if (window) + meta_stack_update_layer (screen->stack, window); + + g_signal_emit (screen, screen_signals[IN_FULLSCREEN_CHANGED], 0, NULL); + } return FALSE; } diff --git a/src/core/stack.c b/src/core/stack.c index 1375f26fa..a9f6d1dac 100644 --- a/src/core/stack.c +++ b/src/core/stack.c @@ -286,8 +286,8 @@ get_standalone_layer (MetaWindow *window) break; case META_WINDOW_DOCK: - /* still experimenting here */ - if (window->wm_state_below) + if (window->wm_state_below || + (window->monitor && window->monitor->in_fullscreen)) layer = META_LAYER_BOTTOM; else layer = META_LAYER_DOCK;