Commit 0064831b authored by Sebastian Krzyszkowiak's avatar Sebastian Krzyszkowiak Committed by Guido Gunther

Refine the ordering of layer-shell surfaces

layer-shell doesn't define in-layer stacking order, so it's up to compositor
to come up with a sane behavior.

Ordering layer-shell surfaces in forward order works fine for shell surfaces
with exclusive zone (like panels) - however, it leads to surprising results
for ones with no exclusive zone, as the oldest surfaces are being rendered on
top of the newer ones, which is the opposite of xdg-shell behavior. Example:
a widget dashboard rendered on top of lock screen even though the lock screen
is created afterwards.

On the other hand, just using a reverse order doesn't work well when stacking
surfaces with exclusive zones - a panel with some decorative elements outside
of its exclusive zone should get rendered on top (z-index) of the panel stacked
on top (vertically) of it. For Phosh, this could result in the keyboard being
rendered on top of unfolded home screen, leading to an obviously broken visual
result.

Therefore, to follow the principle of least astonishment, layers without
exclusive-zone gets rendered first in reverse order, and then the ones stacked
to a screen edge with positive exclusive zone follow in forward order.

There's a third case: exclusive-zone set to -1, but I couldn't decide what would
be the most obvious behavior in regards to other surfaces on the same layer, so
I decided to treat them just like the ones without exclusive-zone.
parent 68cde4b2
Pipeline #31957 passed with stages
in 5 minutes and 9 seconds