jlv@ebt-inc.uucp (Jeffrey L. Vogel) (12/17/90)
I am having the following problem with the XtR4 Shell Widget. I want to know when the user, via the window manager, requested that my shell be closed. I don't, however, want the shell to be destroyed, just unmapped. So, this is what I did. 1) selected WM_DELETE properties with XSetWMProtocols. 2) Used XtAddEventHandler to register for the ClientMessage events. 3) In the callback I issued a XWithdrawWindow request to the window manager to unmap the window and its icon, as the ICCCM says I should. I believe that the window and widget should not be destroyed unless I explicitly destroy them. Well... I noticed weird things happening to my application after I got my ClientMessage from the Window Manger. SO, I register with the ShellWidget for a XtNdestroyCallback, and sure enough, I was getting called. Apparently, the Xt Shell Widget is getting these messages from the window manager also, and taking it upon itself to destroy itself. Is this TRUE, if so, how can it be stopped?
dex@hpcvlx.cv.hp.com (Dex Smith) (12/20/90)
In Motif, the VendorShell widget class (which is used by application
shells) defines an XmNdeleteResponse resource. The default value for this
resource is XmDESTORY. So, when the window receives a WM_DELETE_WINDOW
message (ie. window manager Close command), the shell is destroyed. If it
is the application's top-level shell, the process terminates.
To "trap" the window manager Close command, you do two things:
1. Set the top-level shell's "deleteResponse" resource to XmDO_NOTHING:
ac = 0;
XtSetArg (al[ac], XmNdeletResponse, XmDO_NOTHING); ac++;
XtSetValues (toplevel, al, ac);
2. Add a window manager protocol callback to detect when the shell gets
the WM_DELETE_WINDOW message:
Atom XaWmDelete;
XaWmDelete= XInternAtom(XtDisplay(toplevel), "WM_DELETE_WINDOW", False);
XmAddWMProtocolCallback(toplevel, XaWmDelete, MenuCB, MENU_File_Exit);
This example code sets the callback to call a MenuCB() callback routine
with an application-specific defined client_data of MENU_File_Exit.
Presumably, this is the same callback and client_data used for the
Exit command in the application's File menu. (That is, the window
manager's Close command is now equivalent to the Exit command in the
File menu.)
I hope this helps!
- Dex Smith, Learning Products Developer
Interface Technology Operation
Hewlett-Packard Company
Corvallis, Oregon
dex@hpcvlx.cv.hp.com