Tiling Windows in GNOME

Half & Quarter Tiling


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

645153

Done

Half Tiling

Resize tiled windows in tandem

Allow resizing tiled windows together

645153

Done

Snapping when tandem resizing

Add snapping points in key screen positions

645153

Done

Rework GTK+ internals for tiling

CSD windows manage their own states, and are out of Mutter's control

783669

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

645153

To Do

3.30

Goal

Description

Bug

Status

Quarter Tiling

Extend tiling to TOP/BOTTOM

Left/right snapping should be complementary to top/bottom

751857

To Do

Allow vertical resizing and snapping

Should be just a matter of adding y/height in code

751857

To Do

Add keyboard shortcuts

Users should be able to tile & snap with keyboard

751857

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)

GeorgesNeto/MinutesOfFeaneron/Tiling (last edited 2017-11-24 20:41:59 by GeorgesNeto)