Re: Sheet interferes with close widget and app quit
Re: Sheet interferes with close widget and app quit
- Subject: Re: Sheet interferes with close widget and app quit
- From: Adam Iser <email@hidden>
- Date: Mon, 20 Aug 2001 22:29:38 -0400
uhoh, it looks like we're moving into HIGuidelines List territory. :)
On Monday, August 20, 2001, David P. Henderson wrote:
Can you quit an application or close windows in it when a regular ie
detached modal dialog is up?
Not in the classic Mac OS. But back then you couldn't create a new
document, or even work on another document in your application either.
Now, with the advent of sheets, the user can continue to work with other
documents when the modal sheet is up. Why shouldn't they be able to
quit the application as well (assuming that dismissing the sheet would
not cause data loss, of course)?
For instance, I'm using OmniWeb and I visit a secure website. Out
slides a sheet asking me for a username and password. "Uhoh, look at
the time, IronChef is coming on. I've gotta run". IMO At this point I
should be able to quit omniWeb and have the sheet automatically
dismissed for me. Why should I need to click 'cancel'? If I'm quitting,
it is obvious that I no longer care about visiting that secure site and
all I want to do is close the window.
Yes. Don't use a sheet or any other modal dialog. Sheets are just modal
dialogs attached to a specific window instance. The idea behind sheets
is to present a per window based modal mechanism such that the user may
continue working with other windows in the application while ignoring
the modal dialog.
I've always looked at modal dialogs as "locks". Before sheets, if an
application couldn't continue without some information (or a
confirmation from the user), it would throw up a dialog and lock the
user from messing with anything else in the application. With the
advent of sheets, it became possible to lock only a single window of an
application, and allow everything else to continue working.
Keep in mind that:
1) The contents of my main window are _completely_ useless when it is
disconnected from the server.
2) The user cannot do _anything_ relating to my main window when I am
disconnected from the server.
3) Quit, about this app, help, and other windows (history lists and
logs) should still work when I'm not connected.
So in my situation, when I become disconnected from the server, I need a
way to lock the user from touching my main window, and my main window
alone. The list of options I came up with
1) Hide the main window when I get disconnected and display a non-modal
connect window instead.
This situation is very disorientating... "hey, where'd my window go!?"
2) Dim everything in the main window and display a separate non-modal
connect window
This is good, except the connection that my main window is dimmed
because the user is disconnected is weak, especially in OSX where
windows are intermingled between apps.
3) Show a connect sheet on my main window
This option is IMO perfect, since it shows a great connection that
my main window will no longer function (and is locked) because the user
needs to connect first.
As far as I can see, I am using the sheet properly. Getting
disconnected is an app crippling problem that needs the user's attention
before anything else in my window can be played with, but since it
relates _only_ to my main window, it would not make sense as an app
modal.
However, I do not want the sheet crippling the user from closing my
window, or quitting my app. If they are pressing Apple-Q, they want out
and they want out now. Ignoring the connect sheet I had open and
closing the window will cause _no_ data loss, so why is it wrong? And
if it is wrong, what would be the better way to handle my app getting
disconnected? A non modal dialog just feels very clunky in this
situation.
implementing the above strategy would be a violation
of UI consistency. Don't pollute the metaphor.
Would adding a 'Quit' button to my sheet be less pollutant to the
interface metaphor? How about removing all the controls in my window
from the superview and replacing then with the contents of my connect
dialog? I am truly at a loss of a more elegant way than a sheet to
accomplish this.
-Adam Iser