dheller@cory.Berkeley.EDU (Dan Heller) (06/03/88)
I've had some interesting responses from folks ranging from "you can't
do it" to "you can, but it's not worth it." I haven't given up my fight
yet -- quick review: I have my own application which does not use widgets
but it wants to call a routine which opens a dialog box which does use
widgets.
The problem: handling events and multiple creation and destruction of
widget trees.
Well, the handling of events has finally gotten under control.
In my main loop of the program, I test to see if the dialog box
exists and if so, I test to see if there are events in the widget
window (dialog box) by using XtPending(). If so, I service the
widget event and return. I then test all my windows using XPending
and service my own events...
for (;;) {
if (DialogWinCreated && XtPending()) {
XtNextEvent(&event);
XtDispatchEvent(&event);
}
if (!XPending())
continue;
/* deal with my own events */
}
What I did today was create a window and open a separate dialog box
which was entirely built using the example program "xboxes" in the
Xaw examples directory. I merely removed the call to XtMainLoop()
and just returned. I also removed the "exit(0)" call when the "quit"
button was selected.
This works fine until I want to destroy the dialog box. I call
XtDestroyWidget(), but it isn't unmapped as it seems it should be.
I also cannot seem to create it again. Once XtInitialize is called,
you can't call it again. I don't want to leave the stuff around (I
want to free the resources), so manually unmapping it just to not
have it displayed is not an acceptable solution.
Dan Heller <island!argv@sun.com>