diff --git a/src/core/stack-tracker.c b/src/core/stack-tracker.c index 5dbac54f3..ebb590302 100644 --- a/src/core/stack-tracker.c +++ b/src/core/stack-tracker.c @@ -1063,7 +1063,8 @@ meta_stack_tracker_restack_managed (MetaStackTracker *tracker, for (old_pos = n_windows - 1; old_pos >= 0; old_pos--) { MetaWindow *old_window = meta_display_lookup_stack_id (tracker->screen->display, windows[old_pos]); - if ((old_window && !old_window->override_redirect) || windows[old_pos] == tracker->screen->guard_window) + if ((old_window && !old_window->override_redirect && !old_window->unmanaging) || + windows[old_pos] == tracker->screen->guard_window) break; } g_assert (old_pos >= 0); @@ -1093,7 +1094,7 @@ meta_stack_tracker_restack_managed (MetaStackTracker *tracker, } MetaWindow *old_window = meta_display_lookup_stack_id (tracker->screen->display, windows[old_pos]); - if (!old_window || old_window->override_redirect) + if (!old_window || old_window->override_redirect || old_window->unmanaging) { old_pos--; continue; diff --git a/src/core/stack.c b/src/core/stack.c index a9c80b6f6..15ea826a1 100644 --- a/src/core/stack.c +++ b/src/core/stack.c @@ -1069,6 +1069,9 @@ stack_sync_to_xserver (MetaStack *stack) Window top_level_window; guint64 stack_id; + if (w->unmanaging) + continue; + meta_topic (META_DEBUG_STACK, "%u:%d - %s ", w->layer, w->stack_position, w->desc); diff --git a/src/tests/stacking/client-side-decorated.metatest b/src/tests/stacking/client-side-decorated.metatest new file mode 100644 index 000000000..1d5dfc646 --- /dev/null +++ b/src/tests/stacking/client-side-decorated.metatest @@ -0,0 +1,22 @@ +new_client 1 x11 +create 1/1 +show 1/1 +create 1/2 csd +show 1/2 +wait +assert_stacking 1/1 1/2 + +destroy 1/2 +wait +assert_stacking 1/1 + +create 1/2 csd +show 1/2 +create 1/3 csd +show 1/3 +wait +assert_stacking 1/1 1/2 1/3 + +destroy 1/2 +wait +assert_stacking 1/1 1/3