Tiling Windows in GNOMEHalf & Quarter Tiling |
Contents
Information
Interested Parties: Lapo, Georges, Florian
Goals
- Improve workflow when using concurrent windows
- Allow consuming the contents of 2-4 windows simultaneously
- Allow resizing 2-4 windows simultaneously
- Improve keyboard interaction
Concepts
T-Group: 2-4 windows tiled in complementary way
Raise: put the window at the top of the stack
Details
Tiled windows that are not complementary sizes are not in the same T-Group
When resizing, they join a T-Group if their borders match
Resizing to screen borders change to maximized
Keyboard tiling always join T-Groups
When raising a window in a T-Group, the entire group is raised as well
- Should GNOME Shell treat T-Groups as a single window?
- Needs shortcut to break the group and move a single window?
- Untiling the window (Meta + Down)
- Maximizing the window (Meta + Up)
- Swapping the tile mode (Meta + Left/Right)
- Cursor should be different on T-Groups (v/h double arrow, or cross)
- Can grab the borders oposite to the tile mode
- Top/bottom when horizontally tiled
- Left/right when vertically tiled
- All when maximized
Tile Groups
1. User opens 2 windows, (A) and (B).
+--------------------------------------+ | +---------+ +--------------+ | | | | | | | | | | | | | | | A | | | | | | | | | | | | | | B | | | +---------+ | | | | | | | | | | | | +--------------+ | | | +--------------------------------------+
2. User tiles (A) to the left, (B) to the right. This is State 1 (tiled windows, not grouped)
+--------------------------------------+ | | | | | | | | | | | | | | | | A | B | | | | | | | | | | | | | | | | +--------------------------------------+
3. User groups (A) and (B). This is State 2 (tiled windows, grouped)
+--------------------------------------+ | ‖ | | ‖ | | ‖ | | ‖ | | ‖ | | A ‖ B | | ‖ | | ‖ | | ‖ | | ‖ | | ‖ | +--------------------------------------+
Grouped windows are:
- Treated as a single block by GNOME Shell
- Moved to other workspaces in tandem
- Moved to other monitors in tandem
Needs Design:
- Visual feedback for State 2 (grouped)
Tasks
3.26
Goal |
Description |
Bug |
Status |
T-Groups |
|||
Fine-tune "tile match" implementation |
Also consider horizontal borders to find a matching window |
Done |
|
Half Tiling |
|||
Resize tiled windows in tandem |
Allow resizing tiled windows together |
Done |
|
Snapping when tandem resizing |
Add snapping points in key screen positions |
Done |
|
Rework GTK+ internals for tiling |
CSD windows manage their own states, and are out of Mutter's control |
Done |
|
Design protocol for constrained edges |
We need to expose more data for CSD windows, so that GTK+ can mimic Mutter's behavior |
|
Done |
3.28
Goal |
Description |
Bug |
Status |
T-Groups |
|||
Define behavior |
Have design feedback for the target behavior |
--- |
Done |
Implement grouping behavior |
Needs to implement and go through a session of testing |
--- |
To Do |
Implement explicit group activation |
Needs to implement and go through a session of testing |
--- |
To Do |
Half Tiling |
|||
Use T-Groups |
Instead of storing the sibling window, make it part of a group |
To Do |
3.30
Goal |
Description |
Bug |
Status |
Quarter Tiling |
|||
Extend tiling to TOP/BOTTOM |
Left/right snapping should be complementary to top/bottom |
To Do |
|
Allow vertical resizing and snapping |
Should be just a matter of adding y/height in code |
To Do |
|
Add keyboard shortcuts |
Users should be able to tile & snap with keyboard |
To Do |
Challenges & Obstacles
- T-Groups
The border match calculation can potentially be extremely tricky
- A window can have more than one horizontal/vertical match - how to deal with that?
- Tiling
- We should improve the visual indication of tiling state (perhaps with a thick black border)
- Should there be any constraints?
- I'm stupidly ignorant about window management
Feedback
(Drop any feedback here)