| Summary: | Incorrect window stacking order of transient windows | ||
|---|---|---|---|
| Product: | [Plasma] kwin | Reporter: | Jarek Janik <ann.of.the.green.gables> |
| Component: | core | Assignee: | KWin default assignee <kwin-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | CC: | nate |
| Priority: | NOR | Keywords: | qt6, regression |
| Version First Reported In: | git master | ||
| Target Milestone: | --- | ||
| Platform: | Neon | ||
| OS: | Linux | ||
| Latest Commit: | https://invent.kde.org/plasma/kwin/-/commit/43b2dfa3a2c97dc47a1f7edce488ff172a8a2430 | Version Fixed/Implemented In: | |
| Sentry Crash Report: | |||
|
Description
Jarek Janik
2023-11-20 02:36:59 UTC
MR with fix is here: https://invent.kde.org/plasma/kwin/-/merge_requests/4666 A possibly relevant merge request was started @ https://invent.kde.org/plasma/kwin/-/merge_requests/4678 Git commit 15b8fbe6044a0fd3cb66af78d7e4e44338be5b58 by Vlad Zahorodnii. Committed on 21/11/2023 at 20:26. Pushed by vladz into branch 'master'. Preserve relative order of transient siblings If a constraint indicates that window A must be below window B but it's not the case at the moment, the workspace will move window A right after window B. This can invert the relative order of transient siblings, for example let's say that there are three constraints - A <- B (window A must be below window B) - A <- C - A <- D and the unconstrained stacking order looks as follows: [B, C, D, A]. The final constrained stacking order is expected to look as [A, B, C, D], but currently it's [A, D, C, B] instead: - starting stacking order: [B, C, D, A] - apply A <- B constraint: [C, D, A, B] - apply A <- C constraint: [D, A, C, B] - apply A <- D constraint: [A, D, C, B] In order to fix this issue, this patch makes the workspace traverse the constraint graph in the reverse order. In addition to that, it ensures that the relative order of transient siblings in unconstrained stacking order is preserved in the constrained one. M +16 -7 src/layers.cpp https://invent.kde.org/plasma/kwin/-/commit/15b8fbe6044a0fd3cb66af78d7e4e44338be5b58 Git commit 43b2dfa3a2c97dc47a1f7edce488ff172a8a2430 by Vlad Zahorodnii. Committed on 22/11/2023 at 08:01. Pushed by vladz into branch 'Plasma/5.27'. Preserve relative order of transient siblings If a constraint indicates that window A must be below window B but it's not the case at the moment, the workspace will move window A right after window B. This can invert the relative order of transient siblings, for example let's say that there are three constraints - A <- B (window A must be below window B) - A <- C - A <- D and the unconstrained stacking order looks as follows: [B, C, D, A]. The final constrained stacking order is expected to look as [A, B, C, D], but currently it's [A, D, C, B] instead: - starting stacking order: [B, C, D, A] - apply A <- B constraint: [C, D, A, B] - apply A <- C constraint: [D, A, C, B] - apply A <- D constraint: [A, D, C, B] In order to fix this issue, this patch makes the workspace traverse the constraint graph in the reverse order. In addition to that, it ensures that the relative order of transient siblings in unconstrained stacking order is preserved in the constrained one. (cherry picked from commit 15b8fbe6044a0fd3cb66af78d7e4e44338be5b58) M +16 -7 src/layers.cpp https://invent.kde.org/plasma/kwin/-/commit/43b2dfa3a2c97dc47a1f7edce488ff172a8a2430 |