GNOME Bugzilla – Bug 89315
Workspace switching should have wrapping style
Last modified: 2012-10-09 18:11:59 UTC
Currently, switching workspaces in metacity wraps around at the borders in a non-intuitive manner. The attached patch adds a "no wrap", "toroidal", and "classic" style. These styles can be selected by setting the /apps/metacity/general/wrap_style key to one of the phrases in quotes above.
Created attachment 10104 [details] [review] Patch implementing proposed switching behavior
cc'ing UI dudes.
By "switching workspaces", you mean with Ctrl+Alt+arrow, right? What do you find non-intuitive about it? As far as I can see you get a 2-D layout of your workspaces that you can navigate with the four cursor keys, what could be more intuitive than that....? This sounds a bit like overkill to me.
The question is what happens when you right-arrow off the rightmost workspace, etc.
Hmm, right... well, I still think we should aim to pick one behaviour and stick with it if possible :) If the user has set up a 2D array of workspaces then it's presumably to match some mental model they have of their workspace layout, so my guess would be that either the "toroidal" or "no wrap" models would match that most closely. (And anything other than the toroidal model would be a pain if you only had a single row or column of workspaces).
Calum Benson wrote: > ... (And anything other than the toroidal model would be a > pain if you only had a single row or column of workspaces) But if you have more than one row/column, it can be frustrating if you go one workspace too far in some direction and don't realize it, especially since the switcher doesn't show you what windows are on the desktop until you let go of the modifier key. It's nice to have a boundary to bump up against.
True... maybe then the rule is "toroidal if you only have two workspaces, otherwise don't wrap"...? You have a good point about the workspace not switching until you let go of the keys-- I wonder how feasible it would be to show the workspace switcher thumbnails instead of generic "workspace" icons in the popup that appears while you're pressing Ctrl+Alt+arrows... or even just pop up some version of the workspace switcher applet itself that you could navigate around in a simlilar way.
You have an old version I think Calum, the switchy popup thing does display a workspace-switcher-like mini-view of each space these days.
Aha, so it does.... cool.
It seems the conclusion is we shouldn't wrap unless we only have two workspaces.
> It seems the conclusion is we shouldn't wrap unless we only have two > workspaces. ??? I'm not sure where that comes from. The fewer workspaces the _less_ you need wrapping. My problem with wrapping is that it can be confusing if you "overshoot" and don't realize what you've done. Thus I prefer no wrapping ever. I contend that more people than just me would like this setting available, so my patch allows you to choose "wrapping" vs. "no wrapping" ( vs. the old behavior which doesn't seem to be very popular at the moment).
I think the current behaviour is fine. Try the CVS version, the popup is now like the desktop switcher applet so you do actually see what windows are where, and you see "where you are" clearly marked with the dark rectangle, it is easy to just use Ctrl-Alt-cursorts to go where you want. It was an issue wiht the popup that had just the document icon, but it really works a lot better like this (CVS version). It is not an issue anymore and I think the current behaviour is fine.
*** Bug 90142 has been marked as a duplicate of this bug. ***
Au contraire - I don't spend time looking at popups that appear transitorily on my screen for a few milliseconds as I switch rapidly to the leftmost desktop. Except now I do - I have to watch it like a hawk, because in order to get to the leftmost column of my 3x4 desktops I have to be extremely careful to press only precisely the right number of keystrokes; thus making it impossible to reliably navigate to a known desktop from an arbitrary other desktop without watching the pager, which is painful. I would imagine the 'infinite clickable area' thing is apt here, a bounded area is far more useable - certainl for 2 dimensional geometries.
In a gnome-terminal bug it was suggested that this should be consistent with the switch left/right notebook tab shortcuts, as in GtkNotebook or Galeon.
Since you can arrange workspaces in a 2D manner, looking at notebook tab behavior may not be what you want. Just for kicks, arrange your workspaces that way for a few days (say- in a 3x2 grid) and see how confusing it can be sometimes. For example, starting on the top-leftmost workspace, going left-up-right-down doesn't return you to the starting workspace--you end up one off to the right. I *do* like wrapping, and if it's left on (or as an option) I think it should be made saner when there's a 2D arrangement of workspaces. However, I think that wrapping could probably just be taken out completely, as this is the simplest way to solve the problem, and my guess is it's easy to get used to.
I'd just like to add some comments here, in garnome 2.1.5 wrapping has gone, and it's not good at all for somebody like me with 1 row of 7 desktops, as I with wrapping on no desktop was ever more than 4 swithes away, now the max in 7 which slows me down no end. Wrapping is definately a useful feature, and shouldn't just be removed. If the old model didn't work for everyone, maybe (ouch, sorry havoc) a pref, or perhaps it should dynamically adapt to the number/layout of desktops. A metacity without wrapping hurts :(
There doesn't appear to be any clear conclusion on whether or not workspace wrapping is 'necessary'. I spent a few minutes trying to figure out the arguments against it, and didn't come up with anything really useful. I'm sure the fans of not wrapping will have the same problem seeing the arguments for it. The original wraping behaviour was a bit confusing, so I'd been taking notes on it for a while. They're not yet complete, but I'm pretty sure that that scheme can be done is such a way that it's clearly better than the "toroidal" one. Looks like I either need to apply this patch locally (bleah), or convince havoc to add it until we can get some more data on the "right" answer here.
Here are my thoughts: - if you have a small number of spaces, why not bind direct keys? I always bind Alt+1, Alt+2, etc. for example - if you have a large number of spaces, wrapping seems bad for the reason Michael gives, and is not so useful anyway since often you won't be on the edge of the screen - wrapping requires a more "abstract" computer-like conceptual model than stopping; stopping corresponds to the physical display of the spaces - stopping is more like the behavior with notebooks, Ctrl+PgUp etc. - stopping is probably better for accessibility just as it is with notebooks Basically this is your standard combinatorial explosion of preferences; you can change number of spaces and their layout, and choose directional or direct-to-space or mouse navigation, etc. etc., and so then you might learn to work in a way that involves wrapping or not, and then it goes on and on. How many ways can we accomplish the same simple task... I'm opposed to a preference here, it just perpetuates the insanity and is feature-micromanagement-via-prefs. Let's just pick something and go with it.
No further changes planned here (there may be another bug that had more discussion, I forget)
Sorry, I haven't looked at the code, so this may not be a helpful suggestion. I propose that the Pager be responsible for desktop switching, and Metacity (or whatever) should send the Ctrl-Alt arrow events to it. That way, alternate pagers could be developed to satisfy those of us that want wrapping behavior, and Metacity could remain free of another dastardly preference. If this is already how things are done, then fine. Those of us that want wrapping and greater control of virtual desktop management can just create an alternate pager.
It is possible to implement desktop switching keybindings in the pager or other external process, yes.
*** Bug 80291 has been marked as a duplicate of this bug. ***
*** Bug 102129 has been marked as a duplicate of this bug. ***
Forgive me if this has been said elsewhere, but has this wrapping feature officially been removed? The report summarizes wrapping styles that can be set in a config file. However, the current applet does not reflect these options, nor do I seem to have a /apps/metacity/general/wrap_style anywhere on my system. If it has been removed, I urge the developers to reconsider dropping this useful feature. Of all the desktops I've used that support virtual desktops/workspaces, I find the wrapping/looping feature very useful. I typically have a single row of 10 or more workspaces, and switching from the first to the last, and vice versa, is terribly inconvenient without wrapping. One either has to use the mouse to click on the last workspace in the panel applet, which defeats the purpose of keyboard shortcuts, or use the key-bindings, which become unmanageable for large numbers of workspaces. In this respect, I second Mike Hearn's complaint (comment #17). In direct counter to Havoc Pennington's arguments against wrapping, I submit the following: > - if you have a small number of spaces, why not bind > direct keys? I always bind Alt+1, Alt+2, etc. for example Regardless of the number of workspaces, it will always be easier to continue navigating by wrapping left/right/up/down then it will be to remember and use a specific keybinding for each workspace. You've got the panel applet and the popup to explicitly tell you where you are after each switch. There's no way to get lost. > - if you have a large number of spaces, wrapping seems > bad for the reason Michael gives, and is not so useful anyway > since often you won't be on the edge of the screen There will certainly be cases where such a feature may be un-useful, but that's hardly fair grounds to remove it entirely. As I've stated, for small or large numbers of workspaces, primarily arraigned in a row, wrapping is a huge convenience. And simply implementing the feature doesn't mean it has to be mandatory. Providing a preference to enable/disable wrapping would hardly clutter the current 4 preferences. > - wrapping requires a more "abstract" computer-like conceptual > model than stopping; stopping corresponds to the physical > display of the spaces I'm not quite sure I understand this comment. Wrapping, as I imagine it, corresponds exactly to the physical display in the panel applet, in that wrapping is done vertically or horizontally depending on the current layout of the workspaces. Allow me to illustrate with some crude ascii art, where 'x' represents the currently active workspace, and 'o' represents a non-active workspace. In my case, if I have 15 workspaces, with the 1st currently active, my panel applet appears something like: xoooooooooooooo Now, for a single row, wrapping vertically is moot. However, navigating left at this point should cause the applet to wrap horizontally, jumping to workspace 10, which would appear as: oooooooooooooox If I recall the default settings for the keybindings, which use the Fn keys, this would be difficult, if not impossible to do. Now, for a slightly more complex example, say we have 9 workspaces displayed in 3 rows with the 2nd workspace active, resulting in a 3x3 grid such as: oxo ooo ooo Now, navigating up would trigger vertical wrapping, which would cause the applet to jump to workspace 8, resulting in: ooo ooo oxo I apologize if this is redundant or an overly simple example, but I don't buy the argument that says we shouldn't have a wrapping feature because it's too hard to implement. Wrapping is extremely simple to visualize with the pager, and I would suspect, almost as simple to code since we already have the layout information needed for correct horizontal and vertical wrapping based on workspace layout. > - stopping is more like the behavior with notebooks, > Ctrl+PgUp etc. Again, I'm not sure what this comment refers to. If by "notebook" you mean a tabbed layout, such as the one in Firefox, they mostly implement wrapping as well (as does Firefox). > - stopping is probably better for accessibility just as > it is with notebooks This comment can be summarized with the previous one. Overall, I feel a wrapping feature can only be beneficial. There are scant few preferences currently, so adding this useful feature certainly won't add to bloat. For those that deem it harmful in certain situations, we could always set the default setting to disabled, but removing it entirely is a mistake. I urge you to reconsider this feature. Sincerely, Chris Spencer
Appreciate the carefully-thought-out reply and reasonable tone. I don't think this makes sense, though. There are just too many little things like this we could make tweakable, and the net effect of doing all of them is pretty detrimental. I know it always seems like each one is not a big deal. This has been the way it is for a long time now and I'd like to avoid changing behavior back and forth every couple of years. It does continue to be consistent with GTK+ notebooks (tabs as you say), Firefox is probably inconsistent but that's just the usual problem with Firefox not using GTK+ widgets. Anyway, there are lots of issues where there's a reasonable argument to be made one way and the other way, but in the end the right thing to do is just pick a way and go with it.
Very well. I respect your adversion to feature creep. However, despite it's minor technical nature, I don't consider it a minor feature. I've been using a similar feature in every desktop I've used prior to Gnome (which I just switched to recently) and I find it's absence immensely frustrating. If this feature will never be added to primary trunk, then I will create a custom patch for myself. Am I correct in understanding that the only modifications required to implement looping would be to modify lines in meta_workspace_get_neighbor() from: if (layout.current_col < 0) layout.current_col = 0; if (layout.current_col >= layout.cols) layout.current_col = layout.cols - 1; if (layout.current_row < 0) layout.current_row = 0; if (layout.current_row >= layout.rows) layout.current_row = layout.rows - 1; to: if (layout.current_col < 0) layout.current_col = layout.cols - 1; if (layout.current_col >= layout.cols) layout.current_col = 0; ?
Very well. I respect your adversion to feature creep. However, despite it's minor technical nature, I don't consider this a minor feature. I've used a similar feature in nearly every desktop I've used prior to Gnome (which I just switched to recently) and I find it's absence immensely limiting. If this feature will never be added to primary trunk, then I will create a custom patch for myself. Am I correct in understanding that the only modifications required to implement looping would be to modify the following lines in meta_workspace_get_neighbor() from: if (layout.current_col < 0) layout.current_col = 0; if (layout.current_col >= layout.cols) layout.current_col = layout.cols - 1; if (layout.current_row < 0) layout.current_row = 0; if (layout.current_row >= layout.rows) layout.current_row = layout.rows - 1; to: if (layout.current_col < 0) layout.current_col = layout.cols - 1; if (layout.current_col >= layout.cols) layout.current_col = 0; if (layout.current_row < 0) layout.current_row = layout.rows - 1; if (layout.current_row >= layout.rows) layout.current_row = 0; within workspace.c?
That looks likely, yes.
*** Bug 305084 has been marked as a duplicate of this bug. ***
*** Bug 316362 has been marked as a duplicate of this bug. ***
*** Bug 342842 has been marked as a duplicate of this bug. ***
*** Bug 444663 has been marked as a duplicate of this bug. ***
*** Bug 494842 has been marked as a duplicate of this bug. ***
*** Bug 522373 has been marked as a duplicate of this bug. ***
Why did this get marked FIXED in comment 29? Isn't it actually a WONTFIX, since we never did implement wrapping style? I'd really like to get the pager to handle workspace switching, fwiw, since it's already halfway impossible to do proper workspace management without the pager (it loses the number of rows).
*** Bug 531400 has been marked as a duplicate of this bug. ***
Um, comment 36 was written on the wrong bug. Sorry.
This has always been the most annoying thing about Gnome -- guess i was blaming the wrong piece. For those geezers like me that remember CDE on various other Unices, workspaces wrapped. I generally only use 4 workspaces, but it still comes in very handy -- i setup a hot key to move forward, and if the wrapping works correctly, as it did in my old RH 7.2, I generally only use Forward. If I'm doing something that takes 2 workspaces and they happen to be 2 apart, then 2 clicks flips between them every time. Wiring them to function keys is inferior, because i use ctrl-space which works one-handed. So this is not only a regression from an earlier sawfish, but something that all the ancient systems like OSM, Solaris, and HPUX could do. I wouldn't care if just the default was wrong, as long as I had a knob for it.
This should have been WONTFIX, I think, not FIXED (since it certainly isn't fixed). The patch is actually fairly trivial, though. Maybe there should be a place on live.gnome.org that people can grab patches from for WONTFIX features and add them in as needed. However: * There will not be a switch for this. We have far too many switches already. * There will however be a default either of wrapping or not wrapping. Since currently we have wrapping, we need to decide whether there are any particularly good reasons to change away from that, and any particularly bad effects of changing the default to wrapping.
It's a good idea for users to choose whether to have multiple wrapping styles, if users would like to wrap around at the borders when switching workspaces in metacity, they can download and use the patch, else they can ignore the patch. I think there would never be agreement on this wrapping issue, but actually now I prefer that the patch can be integrated into metacity, and the style without wrapping around at the borders can be set to default.
Right: this is not going to make it into being a switch unless someone gives me a much better reason why (or perhaps unless Havoc or Elijah appear and tell me they think it's the most awesome idea ever, which I can't see happening); nobody has yet given me any good reasons at all other than "it would be nice", which isn't any good. If anyone wants to make a patch which adds a switch, be my guest; I'll even write up how to do so. Then they can give it to their distro and ask them to include it, or just run it themselves. Any thoughts on the *default*, though? Marking WONTFIX, anyway.
Reading this made me cry. The best reason I can think of to add a switch is that (at least from this bug) it seems that the decision to choose wrap over no-wrap was just a 'we had to pick something' decision, and there wasn't any strong reasons one way or another. If this was the case, than the only reason for not adding a switch is feature creep? It seems the other windows managers I've used (compiz mostly) either wrap or have a switch for enabling wrapping. Thus, for the people who use the wrapping feature on other window managers, the switch would make moving between windows managers/computers much more seamless. This would probably eliminate the frustration previous posters (and I) experience when we need to use metacity.
it is not 'we had to pick something', there are several rationales given in comment 19 for example.
*** Bug 597649 has been marked as a duplicate of this bug. ***
*** Bug 630502 has been marked as a duplicate of this bug. ***
Like Chris in comment 25 I can not fully follow each rationale in comment 19, but that's probably my level of understanding of things. I fully agree though that it is important to: 'avoid changing behavior back and forth every couple of years' (comment 26) But in the light of that remark then, I'm a little bit disappointed as well after reading this thread. I would argue that the continuously returning request for this particular feature is the -one- thing that has -not- changed for already 8 years.
I don't get any of the non-wrapping arguments. The most reasonable on is that you might get lost. This in it self is ridiculous because of the icon that pops up on the screen. Also if your workspaces are organized that you need to go to the first one I could only assume that you know what workspace you are on currently. I think that it should be added, and ideally there would be an option for enabling it. About the feature creep, I understand that metacity is a boring window manager but one feature, especially one as large and prominent than this is no big deal at all. In fact it is only a deal when you don't agree with the current setting. If we think about what we use most about a window manager it is clearly switching desktops. We only open new windows when we start doing something new. Personally I leave firefox open on my first workspace and what I am working on on my next two. I use the full-screen function once for most windows and the same with the close. The thing that I use most often are minimize and switch workspaces. I usually use alt-tab for switching windows (and they wrap so I don't need to use alt-shift-tab). The other most common is switching workspaces. I probably do this about every 20 seconds. This is a huge part of using my desktop environment and it is a HUGE pain not to have the wrap. I think that something as big as this can have it's own config setting.
Many moons later, and the Gnome3 debacle, and I've finally just gotten off my duff to try LXDE. It allows wrapping of workspaces (desktops) just fine with a simple change to its config files. So anyone looking for a replacement can also consider LXDE.