Keith Lang said all Mac applications should show a window when you switch to them via command-tab or gestures. I agree. I do think it is best to show nothing when the last window is closed; otherwise closing a window might mean more stuff in your face, not less. But when context-switching back into an application I can’t think of a good reason why applications shouldn’t have something up that you can interact with right now.1
This is the behavior you get when switching between applications by clicking their icons in the dock. It’s unfortunate that you have to do more work for your application to behave consistently no matter how it’s switched-to. Here’s how I’ve done this in IMLocation,
In my NSApplication
delegate I implemented - (void)applicationDidBecomeActive:(NSNotification *)aNotification
to check if no windows were visible, and if so, put something up. Here’s the exact code I use, replace editCurrentLocation:
with what’s right for you:
- (void)applicationDidBecomeActive:(NSNotification *)aNotification { [self displayLocationWindowIfNoWindowIsOpen]; } - (void) displayLocationWindowIfNoWindowIsOpen { NSArray *visibleWindows = [[NSApp windows] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"isVisible == YES"]]; if(IsEmpty(visibleWindows)) [self editCurrentLocation:nil]; }
1Xcode, doesn’t put up anything when you click on it’s icon and you have turned off the “Getting Started” splash screen. This makes a bit of sense, because Xcode is a project editor, not a document editor. Projects are collections of many files, and having an “untitled” default one does not make sense. But by default Xcode shows a window, the splash screen. And there is an argument that it should show an empty file, like an Emacs “scratch buffer”.