New Window Metadata for Tiling
Project title
New Window Metadata for Tiling
Mentors
Design: Tobias Bernard (tbernard:gnome.org on Matrix)
Development: TBD
Project length
Needs investigation, probably long?
Description
As outlined in this blog post the design team has a rough plan where we want to go with tiling. In order for this to be implementable in a clean way we'll need more metadata from app windows, primarily a range of preferred sizes and a maximum size.
One important missing piece is having information on the maximum desired size of a window. This is the size beyond which the window content stops looking good. Not having this information is one of the reasons that traditional tiling window managers have issues, especially on larger screens. This maximum size would not be a hard limit and manual resizing would still be possible. Instead, the system would use the maximum size as one factor when it calculates an optimal window layout. For example, when tiling to the side of the screen, a window would only grow as wide as its maximum width rather than filling exactly half of the screen.
In addition, it’d be helpful to know the range of ideal sizes where an app works best. While an app may technically work at mobile sizes that’s probably not the best way to use that app if you have a large display. To stay with our chat example, you probably want to avoid folding the sidebar if it can be avoided, so the range of ideal sizes would be between the point where it becomes single pane and its maximum usable size.
Ideally these properties could be set dynamically depending on the window content. For example, a spreadsheet with a lot of columns but few rows could have a wider ideal size than one with lots of rows.
Goals for this project:
- Some prototyping with the design team to figure out the exact behavior, since there are probably open questions and things that haven't been considered yet. For example, maybe apps would need a different range of preferred sizes depending on the device class, or screen size, or available input methods?
- Discuss this in the relevant places and coordinate with other parties (mutter? Wayland? XDG?)
- Implement for GNOME (probably mutter/gnome-shell, and a few apps to test it with)
Requirements
C/GObject, Javascript
Communication
Matrix