We supported horizontally tiled windows in horizontally disposed monitors, but we had no similar implementation when they are disposed vertically. 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 case. 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