8.2.1 The Shell
In Chapter 4, The Main Window, we demonstrated the purpose of a main window in an application and the kinds of
widgets that you use in a top−level window. Dialog boxes, as introduced in Chapter 5, Introduction to Dialogs, are
thought of as transient windows that act as satellites to a top−level shell. A transient dialog should use a DialogShell
widget. However, not all dialogs are transient. A dialog may act as a secondary application window that remains on
display for an extended period of time. This usage is especially common in large applications. The MainWindow
widget can even be used in a dialog box. For dialogs of this type, you may want to use a TopLevelShell or an
ApplicationShell.
Choosing the appropriate shell widget for a dialog depends on the activities carried out in the dialog, so it is difficult
to provide rules or even heuristics to guide you in your choice. As discussed in Chapter 5, a DialogShell cannot be
iconified, it is always placed on top of the shell widget that owns the parent of the dialog, and it is always destroyed or
withdrawn from the screen if its parent is destroyed or withdrawn. These three characteristics may influence your
decision to use a DialogShell. An ApplicationShell or a TopLevelShell, on the other hand, is always independent of
other windows, so you can change its stacking order, iconify it separately, and not worry about it being withdrawn
because of another widget. The main difference between an ApplicationShell and a TopLevelShell ...