This is a follow-up post on http://segfault.linuxmint.com/2013/06/putting-a-window-aside/
After some design discussions with the team and some experimentation with the code, I decided to temporarily leave the idea of a “snap view” aside and to see if we could solve the problem described in the previous post simply by improving the paradigms we already had. In other words, rather than developing new views, new components (like a side dock in which you’d embed a window) , new plugins (such as Expo and Scale), maybe we can just make Cinnamon windows smarter…
In GNOME, and currently in Cinnamon, you can move a window to the edge of the screen and perform something called “edge-tiling”. As a result, the window is put in a state called TILED and it occupies either the left half or the right half of your monitor.
In KDE, you can do the same and more: KDE defines not 1 but 3 edges on each side of the monitor, allowing you to tile windows at 1/2 of the monitor’s width, or to give them 1/4 corner of it. For instance, tiling a window to the left, makes the window occupy the left half of your screen, but if you move it to the top left edge, it will occupy the top-left 1/4 of your screen.
GNOME makes it easy to work with two windows, one of the left and one of the right. KDE does that just as well, but also makes it easy to work with 3 windows, one on one side, two on the other.. or 4 windows, one on each corner.
So already, we’ve identified one way of making Cinnamon better, we should support what KDE does… i.e. not only 1/2 width tiling, but also corner-tiling.
Edge-tiling, edge-flipping, edge-snapping… all these concepts have complicated names and aren’t well known to the public. But what they do makes a lot of sense to everybody. Novices users would enjoy these features and rely on them if we made them more discoverable, trivial to understand and comfortable to use.
One of the key things here in Cinnamon is that these zones are not noticeable or even visible. When you’re ready to drop a window onto an edge, the window manager highlights the dimensions of what the window will be after it is tiled. This is great but it isn’t enough. We need to highlight the edge itself, and if we have 3 different edges we need to make it clear to people what it is they do.
So when you start moving a window, you should notice these features. If Cinnamon gets the feeling you’re interested in tiling, snapping or flipping a window… it should show you what you can do with it.
Edge-flipping is the action of moving to an adjacent workspace and bringing a window with you. The problem with edge-flipping in Cinnamon 1.8, is that it uses the same edge as edge-tiling… and consequently you can’t really use both at the same time. Of course there’s no reason why people might only like one or the other, and so it’s important we allow users to use both. By making edges more discoverable, we should be able to have not only edge-tiling zones on the side of the screen, but also to show some arrow or zone which the user can move the window to in order to perform edge-flipping.
Edge-tiling is commonly called “Aero Snap” and the problem I raised in the previous post is somewhat new. So if you’re confused with the terms I’m using, it’s completely normal. We might find a better word than “snap” for this new concept, but for now that’s how we call it :)
So.. although edge-tiling is commonly called “Aero Snap” and people don’t see a difference between “tiling” and “snapping”, there are two radical use cases at play here and they have very little in common.
- If I want to put something aside and keeping an eye on it while doing my work, I don’t want it to interfere with my work and I don’t want other windows to interfere with it. This is what I call “snapping”.
- If I want to work with multiple windows, I want to be able to resize them quickly and to give them as much space as possible. This is what I call “tiling”.
What we have in Cinnamon 1.8, is some kind of compromise between the two, which isn’t actually very good at solving either of the two use cases. If you “edge-tile” a window to the left in Cinnamon 1.8, it takes the left half side of your screen… and that’s great… but look at the limitations it has:
- You can’t resize your tiled window.. so if instead of 1/2 of my monitor’s width I want the window to take 1/4, I have to un-tile it and resize it myself. In other words, tiling is no good at quickly placing windows where I want. It’s only good at placing them in predefined spaces (1/2 in Cinnamon, and corners as well in KDE).
- If I maximize other windows, they cover my tiled windows… and that’s not what I want. Say I tiled Totem to the left to watch a video while I’m working… I have to remind myself not to maximize anything if I don’t want it to cover the playback.
So instead of that, we could implement edge-tiling differently… whereas it would not be an action which changes the state of the window, but simply an action which actually moves and resizes the window. The window would consequently not be stuck to the side and you would be able to move it and resize it.
And then we could introduce proper “snapping”. Something that would be similar to what edge-tiling is in Cinnamon 1.8, i.e. a window state where the window isn’t resizable, where it’s stuck to the side but where it’s immune to the maximizing of other windows.