window: Add support for vertically split tiled windows

Open Marco Trevisan requested to merge 3v1n0/mutter:vertical-tiling into main
We supported horizontally tiled windows in horizontally disposed
monitors, but we had no similar implementation when they are disposed
And in such setup it's often required to tile windows in cascading form.

So adapt the current logic that we can handle the top-bottom tiling

Keybindings are <Super><Ctrl>Up/Down, and as per this also add the
<Super><Ctrl>Left/Right aliases.

In case edge-tiling is enabled we also support creating top-splits but
only if we have another bottom-split defined, so tiling to the bottom
is required to create top-tiles too.
In this way we can both support the edge-gesture for both maximization
and top-splitting without confusion.

When an horizontal / vertical split is defined in a workarea, then
only splits of the same type (horizontal or vertical) are allowed.
This is because, not having tiling groups defined yet, allowing both
cases would create confusion and partially covered windows.

From the design POV I've mostly followed what's been used before, while further changes will come in upcoming MRs, but to keep this simple and avoid being wrongly used (but I'd need some guidance with them):

  • Vertical tiling is enabled only if windows have enough vertical space once split
  • Edge top-tiling is available only if we have another tile set in the bottom
    • This can be changed, by using other approaches, like using a timeout to switch between maximization and top-tiling or, based on the distance from the work-area edge, but I need some input here
  • Only one kind of tiles are possible for a workspace

Fixes: #1596

Edited by Marco Trevisan

Merge request reports