Skip to content

Preserve relative order of transient siblings

Vlad Zahorodnii requested to merge work/cherry-pick-15b8fbe6 into Plasma/5.27

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.

BUG: 477262

(cherry picked from commit 15b8fbe6)

Merge request reports