workspace: fix syncing the stacking order with Xorg

Deleted windows have frameId zero, which makes Xorg stack other windows
below the bottom-most window instead of the correct one. To avoid that,
filter out deleted windows in Workspace::propagateWindows.

BUG: 478556
wilder/Plasma/6.2
Vyacheslav Mayorov 2 years ago
parent 33fe211471
commit 4e01d2c8b7
  1. 4
      src/layers.cpp

@ -165,7 +165,7 @@ void Workspace::propagateWindows(bool propagate_new_windows)
for (int i = stacking_order.size() - 1; i >= 0; --i) { for (int i = stacking_order.size() - 1; i >= 0; --i) {
X11Window *window = qobject_cast<X11Window *>(stacking_order.at(i)); X11Window *window = qobject_cast<X11Window *>(stacking_order.at(i));
if (!window || window->isUnmanaged() || window->hiddenPreview()) { if (!window || window->isDeleted() || window->isUnmanaged() || window->hiddenPreview()) {
continue; continue;
} }
@ -182,7 +182,7 @@ void Workspace::propagateWindows(bool propagate_new_windows)
// these windows that should be unmapped to interfere with other windows // these windows that should be unmapped to interfere with other windows
for (int i = stacking_order.size() - 1; i >= 0; --i) { for (int i = stacking_order.size() - 1; i >= 0; --i) {
X11Window *window = qobject_cast<X11Window *>(stacking_order.at(i)); X11Window *window = qobject_cast<X11Window *>(stacking_order.at(i));
if (!window || window->isUnmanaged() || !window->hiddenPreview()) { if (!window || window->isDeleted() || window->isUnmanaged() || !window->hiddenPreview()) {
continue; continue;
} }
newWindowStack << window->frameId(); newWindowStack << window->frameId();

Loading…
Cancel
Save