Better window management
by clem 23

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…

Improving edge-tiling

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.

Improving discoverability

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.

Improving edge-flipping

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.

Improving edge-snapping

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.

23 thoughts on “Better window management

  1. Reply Ilan Jun 17, 2013 10:38

    Learning something new every time I read this blog. I’m glad you decided to take the whole issue to a higher, broader level instead of getting stuck on just the one function.

  2. Reply hdra Jun 17, 2013 11:21

    Can’t wait to see it in action. Some suggestion though:
    - I am a big fan of tiling window manager, such as i3. One of the best thing in it is the way it handles window focus switching. Instead of cycling through the window with alt-tab, it uses a modifier key and the arrow keys to switch focus directly to that direction. This may sounds like a small thing, but when I work with a lot of windows without any specific sequence, it is a huge productivity improvement.
    - On the edge tiling thing, instead making a bunch of hot edges/corners, why not combine it with some modifier key. e.g. when I drag window to the left, it will fill the left half of the screen, but when I do so when pressing the Super key, it will move the window to the next workspace, etc. Those are just an illustration of the use case, the point is not limiting the use of these limited edges/corners.
    - or even better, make a “tiling mode”, where it behaves almost like a full-tiling-window-manager :) (or at least, make it more accessible with keyboard).

  3. Reply Anand Jun 17, 2013 11:35

    “Improving discoverability” and proper naming conventions (yet attractive) is what Linux desktops need and I feel you’re rather approaching the problem well. As you’ve noted, visual clues and immediate previews would really help and guide users in adopting features soon. But at the same they should not be overdone as to be intrusive (Eg: ‘Plasma Cashew’ that appears all the time by default).
    Am also glad that some of the powerful KDE features are being considered. (http://www.hackerpaparazzi.com/?p=755- Here is an article on what KDE can learn from Cinnamon but learning is two-way indeed!). Another KDE feature (not windows management) I miss in my Cinnamon usage is the powerful Krunner (Alt + F2 in KDE is way powerful than Cinnamon / Win + R). You may want to consider it. Thanks Clem for hearing.

  4. Reply Rüssel Jun 17, 2013 11:58

    In Mint 11 edge-tiling had a brief appearance as part of the Gnome 2 desktop. I liked it very much, and miss it since then (using the Mate edition afterwards).
    Is there a chance to get edge-tiling in Mate? Or is it already there, but I just can’t see it?
    Regarding KDE, it’s good that you want to not only copy their features, but make them more usable. Someone told that KDE is very powerful. That might indeed be the case. Nonetheless, every time I start using KDE, I am unable to find that hidden power within.

  5. Reply VolMi Jun 17, 2013 15:17

    The hardest loss when I moved from Gnome 2 with Compiz to the world of Gnome 3/Cinnamon was the lousy tiling. The most unbelievable limiation for me has always been that you cannot resize a tiled window.
    If you want to have two windows tiled, it makes plenty of sense to let them have a width of X and (1-X), respectively, with arbitrary X in [0...1]. I broke my habit to use tiling due to this silly limitation to X=0.5 and soliced myself with the knowledge that the Windows-world is even worse.

    I agree with all your comments (@clem) and am looking forward to seeing this improved in the future. I find visual hints when moving a window very smart and important, too. Without some (undisturbing) visual help, a lot of the smart features, a DE might have, stay unused like all the helpful nerdy shortcuts of applications.
    I think of these visual helpers as quarter-circles in the corners and half-circles at the edges, calmly fading in as you start to move a window. A direction detection might help to show these helpers only at the positions you are currently moving the window to (± 60° or so).

  6. Reply Lucas Sichardt Jun 17, 2013 16:21

    Hello Clem,

    I’m very happy to read this article. I think there are many people like me who miss tiling as it was possible with Compiz. At this time I’m using Xfce and it has the advantage of being able to tile vertically and horizontally. But in fact it’s not enough.
    What I would like to have is something “VolMi” has suggested I think:

    1. It should be possible to tile to half of the screen or to quarter of the screen as you have mentioned KDE does. It should depend on whether you drag the window to the edge or to the corner.

    2. Proportions should be variable: I think there should be a setting where a user can set his preferred left-right ratio and his preferred top-bottom ratio as well.

    For example my workspace also looks like this: One main window like the browser or LibreOffice or something is on the left – filling the left 2/3 of the screen. Additionally I have smaller windows at the right (file browser for instance) filling the right top corner (1/6 of the screen) and the right bottom corner (also 1/6 of the screen).
    For this I rely on the fact that Opera and LibreOffice remember theire last geometry as well as Thunar at least remembers it’s size while Xfwm places windows quite intelligently.
    But when opening a pdf file or other applications it all doesn’t work anymore.

    So I think the window manager should all that for me. I also think that giving the user a setting for his individual “layout template” by deviding the screen into four not necessarily equal tiles is a good idea. It will also catch the users attention in the settings center so that the user knows about all the tiling stuff and will not be surprised by windows changing in size accidently….

    Best regards,

    Lucas Sichardt

  7. Reply Jake Biesinger Jun 17, 2013 22:36

    I’m with Lucas and VolMi. While I like the snapping windows, it drives me nuts to not be able to resize once snapped. I think it would be better to have something like http://vimeo.com/48442494#t=40 where you can specify what part of the screen the application should take up.

    Thanks for Mint and especially Cinnamon!

  8. Reply Geoff Jun 18, 2013 00:15

    You all say you can’t resize a tiled window. I do it all the time by dragging ALT + Right-click, an indispensable feature that should be ON by default. The problem is since it’s been off by default for such a long time it’s been forgotten by users.

    • Reply Geoff Jun 18, 2013 00:17

      There isn’t even a setting in the cinnamon settings dialogs to turn this on, you have to use dconf (which isn’t part of the default install…)
      dconf write /org/gnome/desktop/wm/preferences/resize-with-right-button true

      • Reply VolMi Jun 18, 2013 07:58

        Whoa, the world did not end there…! Thank you!

        Still, it is utter nonsense to having to ALT + right-click (after adjusting a dconf entry, of course). What was the reasoning to decide “In tiled mode, let the user not be able to grab the window frame the same way he always did, hehehehehuaaHAHAHAAAAAHAAA!!!!11!”?
        Perhaps, those friendly gnome folks literally implemented an easter egg and grabbing is possible on Easter Sunday.

  9. Reply Richard Jun 18, 2013 08:19

    One consideration – can we have an option (maybe by using a modifier key such as ctrl) to just move the windows to where I put them without tiling, snapping flipping or any other seemingly random action… Sometimes I just want to move a window aside for a second, and the last thing I want is for the window manager to decide to do something clever with it.

    • Reply clem Jun 18, 2013 11:40

      Yes, that’s what we want “tiling” to be.. it will just move/resize the window, and nothing else.

  10. Reply quapurna Jun 18, 2013 08:30

    A Better Window Management ? I do not understand sophisticated things like your idea. I just expect that any window can fit in 600 pixel screen height minus panel’s pixels. If a window is too high/tall, the better window management will make it fit and will provide a vertical scroll-bar inside the target window. So, I do not have to use the Alt+Click.

    • Reply clem Jun 18, 2013 12:10

      The content of the window is designed by the application developer, it’s not something which relates to the WM. But you can’t expect developers to work within 600px. That’s just not reasonnable in 2013. I won’t tell you to upgrade or to buy new hardware.. you’re perfectly free to use older techs, but on it you should probably run older software. You can’t expect modern UI developers to restrict their designs and give themselves a 600px compatibility limitation.

      Note: Looking at the stats, the percentage of users under 600px is 1.2% at the moment, with half of them at 480px or below.

      • Reply quapurna Jun 21, 2013 16:50

        I am a stupid ordinary user.

        There is an adjustable window and by default it is 650 pixel height.
        On 600 pixel screen, it is too high.
        On 768 pixel screen, it does not fully use the screen height.

        If not Window Manager; then, what is responsible to automatically adjust the window to always fits on 600 pixel and 768 pixel height screen minus the panel/s height ??

        Thanks.

  11. Reply Emmanuel Jun 18, 2013 11:41

    Hi Clem.

    Nice post and a lot of work to do.

    What could be nice, but I know Totem is not a Mint project, is that we could have Totem in a small part of the screen, but like if it was in full screen mode.

    For example, Totem could be in the top left part, but just the video. No menu. That way we could win a lot of space.
    For Totem it’s like if it’s in full screen mode, in a small screen, inside the main screen.

  12. Reply dRaiser Jun 18, 2013 12:01

    Absolutelly can’t wait!

  13. Reply Saeed Jun 28, 2013 07:15

    so nice… exactly what I need. and also a keyboard short-cut is necessary.

  14. Reply Geoff Jul 5, 2013 05:08

    I think the priority right now in order to improve window management would be to fix the erratic behavior of window placement when we use keyboard shortcuts. I use mostly the keyboard to maximize my windows, put them on a left/right half of the screen or send it to the other monitor. Often times they get stuck in one placement and I have to go grab the mouse and unsnap the window to get it to respond to the keyboard again.

  15. Reply Marco Meijer Aug 15, 2013 22:31

    I quite often find myself wanting for a window to tile to less or more than 50% of the screen. This aspect of Cinnamon is what annoys me the most, do I’m very happy it’s going to get fixed. There’s little else for me to complain about.

Leave a Reply