ZoomingWindowSwitcher
This is a functional specification for a zooming window switcher being considered for use in Ubuntu.
The Compiz "stackswitcher" plugin is a work-in-progress implementation of this specification.
Design
Invoking the window switcher should allow access to all open windows and the desktop. A window can be selected in the switcher using Tab, Shift Tab, arrow keys, or a pointing device. If the switcher is exited without cancelling, whichever window is selected should be focused.
Invocation
The first Alt+Tab should switch to the next window instantly without any effects. The switcher should not begin appearing unless the Alt key remains held down for at least 1000 ms after the Tab key has been pushed (regardless of whether the Tab key has been released).
Beginning animation
Thumbnail arrangement
Windows should be presented as if standing on the background, with the current window in the bottom left, the next-most-recently-used window to its right, and so on in rows up to the top of the screen. The less recently a window was used, the smaller and further away it should appear.
An alert or dialog that has a parent window should be presented as a single selectable 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.
Navigation
Tab and Shift Tab
Alt Shift Tab should select the desktop, with Alt Shift Tab,Tab selecting the least-recently-focused window.
Arrow keys
Esc
Pointing device
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 select it.
Releasing (not pressing) the mouse button should exit the switcher.
Ending animation
Implementation
Changes to existing stackswitcher
- 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.
Unresolved issues
- A window that opens while the window switcher is open probably shouldn't reshuffle all the windows. What should happen to it? Maybe it should just not appear at all until you exit the switcher.