Managing floating windows with infinitly scrolling workspaces
I'd like to share my thoughts on the concept of "Mosaic" proposed in this blog post. I like the idea of a floating window manager with some tiling features. That's why I've written the Tiling Assistant extension to expand current GNOME's limited tiling features. My concern with the Mosaic is that it might have a bit too much magic:
Mosaic is the default behavior. You open a window, it opens centered on the screen at a size that makes the most sense for the app. (...) As you open more windows, the existing windows move aside to make room for the new ones. If a new window doesn’t fit (e.g. because it wants to be maximized) it moves to its own workspace.
If the window layout comes close to filling the screen, the windows are automatically tiled.
You can also manually tile windows. If there’s enough space, other windows are left in a mosaic layout. However, if there’s not enough space for this mosaic layout, you’re prompted to pick another window to tile alongside.
I think this approach may not be practical in real-world usage. For common screen sizes to fit apps into 2 rows apps need to be around 500 - 600 px tall. Most apps aren't comfortable to be used at that size. Here is a screenshot of my most used apps (Firefox, Nautilus, Evince, and GNOME Text Editor) with a height of 550 px.
Due to the headerbar, whitespace etc. you only see around 1 - 3 paragraphs of text and 2 full icon rows. So for more natural window sizes you'll likely end up with 2 - 3 window / 1 row workspace. Moreover, the automatic moving of windows to new workspaces and the automatic tiling windows when the screen layout becomes nearly full may create unexpected layouts/groups/workspaces since they rely on random things like the order of opening windows. This means the user would need to manually fix the problem.
My suggestions:
- Don't do auto-tiling/moving. Users should initiate tiling themselves. A system that users have to struggle against can be more frustrating than having no system at all. Especially when it's meant to be the default behavior.
- Make workspaces infinite and open new windows based around the MRU window. This approach would preserve the non-overlapping nature of Mosaic while eliminating the need for manual window management since users would always have their most recent window right then and there.
The second point is what I want to dive deeper into. The PaperWM extension explores this, but it defaults to automatically tiling all windows vertically. I (simliar to the blog post) think that that isn't ideal. PaperWM also diverges from GNOME's default shortcuts and behaviors a bit too much. So it's not ideal to use it to test the idea. That's why I've hacked together (...and it is very hacky
How to install the extension:
- Download the zip file and install the extension with
gnome-extensions install PATH_TO_ZIP
- Restart GNOME Shell
- Enable the extension
- After enabling the extension for the first time, close all windows to ensure a clean state.
How to use the extension:
-
Super
+ (Alt
) +Left
/Right
moves the focus around -
Super
+Scroll
/ Scrolling on workspace/panel also switches focus -
Super
+ (Alt
) +Shift
+Left
/Right
moves the window around -
Super
+Up
/Down
un/maximizes the window (vertically, then fully)
The extension is a very minimal proof of concept I've written in 2 days to test-drive the idea of a floating window manager. I don't intend to maintain it. It only implements the infinitly scrolling concept. Actual tiling (beyond maximizing) isn't part of it. For simplicity
- it only works on GNOME 45
- it only allows 1 row, which I believe should work for most people and most apps; only people with 4k unscaled monitors or windows, which are wide but small will look weird
- only 1 workspace should be used
- true maximized and tiled windows shouldn't be used (and are kinda disabled by the extension)
- animations are a bit buggy and DND isn't supported
- there are probably other issues since I've mostly tested it in VM