This is a functional specification for a zooming window switcher, which is one possibility being considered for use in Ubuntu.
The Compiz “stackswitch” plugin is a partial implementation of this specification.
When Alt Tab is pressed, the next-most-recently focused window should be focused instantly, without any effects. The switcher itself should not begin appearing unless Alt remains held down for at least 1000 ms after Tab has been pushed (regardless of whether the Tab key has been released).
It is possible that a panel button may also be provided for invoking (and cancelling) the switcher. If invoked in this way, the initial animation should begin instantly.
Over the course of 500 ms, the background picture should become dimmer, and slide down as if hinged to the screen at the bottom, so that the top appears further away. The exposed area behind the Desktop should be black. This animation should appear natural, accelerating at the beginning and decelerating at the end. Meanwhile any panels should stay exactly where they are, as if attached to the screen rather than to the Desktop.
At the same time, windows should shrink as they fly linearly into their appropriate positions, and should simultaneously dim slightly (except for the highlighted window, if there is one). This animation too should appear natural, accelerating at the beginning and decelerating at the end.
Windows should be presented as if standing upright on the background (very slightly reflecting off the background). The originally-focused window should be in the bottom left, the next-most-recently-focused window to its right, and so on in rows up to the top of the screen. Rows toward the top of the screen should appear smaller and further away, just like the area of the Desktop on which they rest. Apart from this perspective effect, all windows should be shrunken by the same proportion. The number of rows should be chosen so as to shrink the windows as little as possible.
An alert or dialog that has a parent window (such as a Print dialog) should be presented as a single highlightable item together with its parent window. If the normal position of the alert or dialog is completely inside the parent window, this relative position should be retained in the switcher. Otherwise, the thumbnail of the alert or dialog should be centered on the thumbnail of the parent window.
If a window opens while the window switcher is open, it should be ignored and not appear in the switcher, so that its appearance does not cause selection errors by shuffling the other windows (and also because whatever you wanted to switch to, it won’t have been a window that hadn’t opened yet).
If a window closes while the window switcher is open, it should disappear from the switcher (using a suitably-shrunken version of any effect normally used for closing windows), but all other windows should remain exactly where they were, again to avoid selection errors caused by shuffling the other windows.
Highlighted item presentation
The highlighted item is the item that will be selected if the window switcher is closed without being cancelled. It may be a window, an alert/dialog and its parent window(s), or the Desktop. By default, the highlighted item is the window that was most recently focused (second from left in the bottom row if the switcher was invoked using Alt Tab, or bottom left if the switcher was invoked any other way).
If the highlighted item is a window, it should be shown in normal brightness (as opposed to all the other windows), and a bezel should appear over it showing the name of the window. The bezel should be as close to centered on the window as possible, without appearing partly off-screen. If the window title is too long for the entire width of the screen, the minimum necessary should be elided from the middle with an ellipsis (…). The application icon should also appear, slightly overlapping the top of the bezel, and always horizontally centered with the window (even if the bezel itself is not).
If the highlighted item is an alert or dialog and its parent window(s), they should be shown in normal brightness, with a bezel and icon representing the top-level window (not the alert/dialog itself).
If the highlighted item is the Desktop, it should become brighter, and the word “Desktop” should appear in a bezel, horizontally centered in the empty space under the bottom row of windows. This bezel should not have an accompanying icon. To avoid distracting flickering, if the Desktop is highlighted with a pointing device, the bezel and brightening should not appear for 500 ms or until the selection is confirmed, whichever happens first.
Highlighting, cancelling, and confirming
Tab and Shift Tab
Alt Shift Tab should highlight the Desktop, with Alt Shift Tab,Tab highlighting the least-recently-focused window.
While the switcher is open, the arrow keys should alter which item is highlighted. This highlighting should not wrap around — for example, if at a rightmost window, pressing Right should do nothing rather than wrapping to the leftmost window. If on the bottom row, Down should highlight the Desktop.
Unless a drag is in progress, when the switcher is opened, the pointer should be invisible and its position should have no effect. As soon as the pointer is first moved, however, hovering over a window should highlight it.
Releasing (not pressing) the mouse button should select the highlighted item and close the switcher.
Drag and drop
Changes to existing stackswitch
- All windows should remain upright, effectively standing up perpendicular to the flat background.
- Windows should not overlap, and should not move around during the Tab cycle.
- Panels should stay exactly where they are while the switcher is open. (Eventually there may be a button in the panel for invoking the switcher, and it's important that someone be able to turn off the switcher by clicking the button again.)
- The bezel containing the window name should have less vertical padding. The application icon should appear above the window name, and slightly overlap the top of the bezel.
- What should the switcher be called in the interface? “Zooming Window Switcher” is a little long. Does it need a name at all?
What should happen if you push Alt, push Tab, and keep them both down?