by Kyle D'Addario
& Wincent Colaiuta
Windowing & Visibility in OS X
March 16th, 2001
As those of you who have tried out Mac OS X Public Beta will know, when Apple ships the brand new version 10.0 of its operating system on 24 March it will bring with it some radical changes to the interface that Mac users have grown to know and love since the Macintosh's 1984 debut.
In this issue of Hot Cocoa, I'll be focussing on one particular area - windowing - and reviewing some of the changes that we can expect to see in OS X, as well as offering some tips for how to get the most out of the new system's windowing capabilities.
The new window model
The beautiful Aqua interface of OS X leverages the power of the underlying Quartz graphics engine to produce some effects that will be unfamiliar to many Mac users. Most readily noticeable to first-time OS X users will be things like solid window dragging and resizing, in which the contents of windows are fluidly moved around the screen instead of just rubber-banded outlines like in OS 9. Then there are nice touches like windows casting subtle shadows to help users easily identify which windows overlap other windows, and transparency.
More fundamentally, however, Quartz brings with it a new model for interacting with windows, in which every single window is assigned its own layer in the graphics subsystem. Previously, all windows for an application were grouped into a single, shared layer. Clicking on one window would bring all windows for that application to the front. In OS X, things are different: clicking on one window brings only that window to the front; any other windows belonging to the same application will remain unaffected.
Control over visibility = productivity
The more quickly you can control the visibility of items on screen, the more quickly you can achieve your goals. Time spent rearranging windows, or digging around looking for hidden palettes is wasted time. While the new layering model used for Quartz windows may be confusing at first, it actually has a huge potential for increasing productivity. The following example illustrates this.
Consider how useful it might be to have many Finder windows open at once showing you all the files of a project. What if you want to drag one of these files into the window of your word processing application? In Mac OS 9 you'd have to make sure that the folder you wanted was in view; and when you clicked on the Finder to locate the item you wanted, all the Finder windows would pop to the front, potentially obscuring the word processing window you were working in previously; then you'll have to rearrange windows to make sure you can see all the things you need to at once. Finally, you can do the drag.
In OS X, because of the independence between the windows of each particular application, you'll be able to bring only the specific Finder window that you need to access to the front, leaving all the others out of view and out of the way. A few days spent working in OS X should be enough to convince even the most skeptical users of the benefits of this model, and the number of occasions on which one finds oneself taking advantage of it.
So how do we actually control visibility?
I'll now offer a few tips on how we can make the most out of the Quartz windowing model by taking advantage of it's new features. It may require the breaking of a few old OS 9 habits, but with time it will come naturally.
Reducing screen clutter - method one
This is something that Steve Jobs has taken great pleasure in demonstrating on stage during his keynotes: the "genie effect," in which minimized Cocoa and Carbon apps shrink fluidly into the dock. If you want to clear some screen space, or just get one particular window out of the way then this is a quick way to do it. Minimizing can be achieved in any one of four ways: double-clicking the title bar of the window, hitting the Command+M key combination, clicking the yellow minimize widget in the title bar, or selecting "Minimize Window" from the application's "Window" menu.
Reducing screen clutter - method two
This is one that Jobs hasn't demonstrated at all, but which I find myself using all the time. It's the OS X equivalent of OS 9's "Hide" function. By selecting "Hide" from the application's main menu you can cause all of the application's windows to disappear, including any that are minimized in the dock (although note that the main application icon itself still shows in the dock). Once again this only works for Carbon and Cocoa apps. An excellent keyboard shortcut to remember here is Command+H. And like in OS 9, there are still the "Hide others" and "Show all" functions in the menubar, but with one extra shortcut unique to OS X: "Hide others" has an equivalent shortcut; if you click on an application's dock icon will holding Command+Option you'll achieve the same effect.
But why is this so useful is OS X? Why do I find myself doing this more often than I ever did it in OS 9?As I will show below, it is because in OS X, the reverse operation of Hide (i.e. "Show") is so much easier.
Reversing the hide
There is less of a time penalty associated with hiding and showing in OS X because it can be done with a simple keypress (Command-H) to hide, and a single click (on the application's icon in the dock) to bring all to the front. In OS 9 this same operation would involve two comparatively time-consuming trips to select the appropriate menu item.
It's also much more desirable to hide apps in OS X than it ever was in OS 9 because of the versatility of the dock. Application's dock icons are always visible, even when their windows are hidden, and it is through their dock icons that they can communicate valuable information and get your attention when needed. Two good examples are Apple's "Mail" and Eric Peyton's Fire. Mail's dock icon shows me the number of unread messages waiting for me at any time, and Fire's flashes to let me know when I have an incoming message. I've found myself constantly hiding and showing these apps with the simple Command+H/click-on-dock-icon pair, and it all happens instantly and painlessly.
Showing on a per-window basis
There's more than one way to reverse a hide in OS X, the easiest of which is probably to use, once again, the dock. We click and hold on the application's icon in the dock to give us a list of all the windows for that app. Choosing a window brings only that window to the front, leaving the others behind or obscured. The behavior is slightly different depending on whether an application's windows have been explicitly hidden by a "Hide" from the application menu, or if they're just out of view because windows from other applications have obscured them. In the former case, selecting a window unhides all of the application's windows and brings the selected window to the very front. In the latter, only the selected window is brought to the front and the others remain entirely unaffected.
If we're already working in an application that has a lot of windows open, we can use the same method to locate windows that might be hidden at the back, but we also have the option of using the "Window" menu of the application, which in Carbon and Cocoa apps includes a list of all open windows. Another useful item in this menu is "Bring all to front," which is useful for those times when windows get "buried" far back behind the windows of other applications.
All of this may sound complicated compared the old OS 9 way of doing things. There are multiple ways of performing the same operation. I haven't even touched on some of the other possibilities offered by Quartz and Aqua, such as translucent windows which allow you to see what is behind the front layers (imagine having a transparent terminal window open, typing in commands that you are reading from a Web page behind the terminal window). But what this really means is flexibility, and flexibility results in productivity and better workflow. I still find myself doing things occasionally that I used to do in OS 9 (like clicking on a window thinking it will bring all windows for that application to the front), but now, more often than not, I find myself in OS 9 wishing that I could do the things that are easy now in OS X.
You are encouraged to send Richard your comments, or to post them below.
Most Recent Hot Cocoa Columns
Mac OS X & Firewalls: Part One - The Basics
Console Yourself: Understanding Mac OS X Logs
Making NFS Work On Mac OS X
Hot Cocoa Archives
Back to The Mac Observer For More Mac News!
Kyle D'Addario is the assistant editor of The Mac Observer and has logged about as much time on Mac OS X as is humanly possible. Kyle studies Computer-Mediated Communication, whatever that is, at the graduate level, and was a founding member of the original Webintosh team.
Wincent Colaiuta runs Macintosh news and criticism site, wincent.org, and joined The Mac Observer team as a contributor in March 2001. He has worked with computers since 1984, and his interests in that area include Macs, PHP programming and security.