ephrem@oakhill.UUCP (Ephrem Chemaly) (12/11/90)
I have included a sample source code for a client that crashes. Here is a brief description of the problem. I create a motif widget called 'button'. This widget pops up another widget 'popup1' and 'button' is set to insensitive. 'popup1' is a Selection widget. If I push the help button in 'popup1', I popup the 'popup2' widget, and set 'popup1' to insensitive. When I am done, I pop down popup2, and set popup1 to sensitive. Then if I popdown 'popup1' the application crashes. Why is that? I have included the source code. There are two ways to compile this file. cc -L/usr/local/lib -o learn learn.c -lXm -lXtm -lXmu -lXt -lX11 which works, and cc -L/usr/local/lib -Dsensitive -o learn learn.c -lXm -lXtm -lXmu -lXt -lX11 which sets the preprocessor's 'sensitive' flag which I use with #ifdef to compile some extra code. This does not work. I get the following error: X Error of failed request: BadDrawable (invalid Pixmap or Window parameter) Major opcode of failed request: 62 (X_CopyArea) Minor opcode of failed request: 0 Resource id in failed request: 0x70001d Serial number of failed request: 406 Current serial number in output stream: 406 So the problem is isolated at the extra line compiled near #ifdef sensitive which sets popup1 the insensitive. I see this problem an my Sun 3/260 with X11R4, and A/UX with X11R3. Please use the address below to reply by e-mail. Regards, Ephrem A. Chemaly +=========================================================================+ | Motorola Inc. Ephrem A. Chemaly | | 6501 William Cannon Drive West | | Austin, Texas 78735 U.S.A. | | Mail Drop: OE-21 | | (512) 891-2760 | | | | Internal Addr: ephrem@soleil-tx (or at) oakhill!soleil-tx!ephrem | | Internet Addr: ...!soleil-tx.sps.mot.com!ephrem | | UUCP Address: oakhill!soleil-tx!ephrem@cs.utexas.edu | +=========================================================================+ ----------- THIS IS THE SOURCE CODE BELOW ------------------------------------- /****************************************************************************** * * Compilation (Method 1 that works): * cc -L/usr/local/lib -o learn learn.c -lXm -lXtm -lXmu -lXt -lX11 * Compilation (Method 2 that does not work): * cc -L/usr/local/lib -Dsensitive -o learn learn.c -lXm -lXtm -lXmu -lXt -lX11 * ******************************************************************************/ #include <Xm/Xm.h> #include <Xm/MainW.h> #include <Xm/Frame.h> #include <Xm/Form.h> #include <Xm/DialogS.h> #include <Xm/RowColumn.h> #include <Xm/PushB.h> #include <Xm/SelectioB.h> #include <Xm/MessageB.h> Widget popup1, popup2, button; /******************************************************************************* ********** Kill2(): Kill the second level. ************ *******************************************************************************/ void Kill2(widget, closure, callData) Widget widget; caddr_t closure; /* unused */ caddr_t callData; /* unused */ { XtDestroyWidget(popup2); XtSetSensitive(popup1, TRUE); } /******************************************************************************* ********** Kill1(): Kill the first level. ************ *******************************************************************************/ void Kill1(widget, closure, callData) Widget widget; caddr_t closure; /* unused */ caddr_t callData; /* unused */ { XtDestroyWidget(popup1); XtSetSensitive(button, TRUE); } /******************************************************************************* ********** Popup2(): Popup the second level. ************ *******************************************************************************/ void Popup2(widget, closure, callData) Widget widget; caddr_t closure; /* unused */ caddr_t callData; /* unused */ { Arg args[10]; static XtCallbackRec callback[2]; static XtCallbackRec KillCallback[2]; int n; #ifdef sensitive XtSetSensitive(widget, FALSE); #endif n = 0; XtSetArg(args[n], XmNautoUnmanage, False); n++; KillCallback[0].callback = Kill2; KillCallback[0].closure = (caddr_t)NULL; XtSetArg(args[n], XmNokCallback, KillCallback); n++; XtSetArg(args[n], XmNcancelCallback, KillCallback); n++; XtSetArg(args[n], XmNhelpCallback, KillCallback); n++; popup2 = XmCreateInformationDialog(widget, "Popup1", args, n); XtManageChild(popup2); } /******************************************************************************* ********** Popup1(): Popup the first level. ************ *******************************************************************************/ void Popup1(widget, closure, callData) Widget widget; caddr_t closure; /* Widget */ caddr_t callData; { Arg args[10]; static XtCallbackRec HelpCallback[2]; static XtCallbackRec KillCallback[2]; int n; XtSetSensitive(widget, FALSE); n = 0; XtSetArg(args[n], XmNautoUnmanage, False); n++; HelpCallback[0].callback = Popup2; HelpCallback[0].closure = (caddr_t)NULL; XtSetArg(args[n], XmNhelpCallback, HelpCallback); n++; KillCallback[0].callback = Kill1; KillCallback[0].closure = (caddr_t)NULL; XtSetArg(args[n], XmNokCallback, KillCallback); n++; XtSetArg(args[n], XmNcancelCallback, KillCallback); n++; popup1 = XmCreateSelectionDialog(widget, "Popup1", args, n); XtManageChild(popup1); } /******************************************************************************* ********** main(): main function for this program. ************ *******************************************************************************/ void main(argc, argv) unsigned int argc; char **argv; { Widget topLevel, BaseFrame, frame; Arg args[10]; static XtCallbackRec callback[2]; int n, i; /* Initialize the X toolkit. */ topLevel = XtInitialize(argv[0], "Learn", NULL, NULL, &argc, argv); n = 0; BaseFrame = XtCreateManagedWidget( "clientBaseFrame", xmMainWindowWidgetClass, topLevel, args, n); frame = XmCreateFrame(BaseFrame, "Frame", args, n); XtManageChild(frame); n = 0; callback[0].callback = Popup1; callback[0].closure = (caddr_t)NULL; XtSetArg(args[n], XmNactivateCallback, callback); n++; button = XmCreatePushButton(frame, "Button", args, n); XtManageChild(button); /* Display the widgets. */ XtRealizeWidget(topLevel); /* Start the main event loop. */ XtMainLoop(); } /* Please use the address below to reply by e-mail. Regards, Ephrem A. Chemaly +=========================================================================+ | Motorola Inc. Ephrem A. Chemaly | | 6501 William Cannon Drive West | | Austin, Texas 78735 U.S.A. | | Mail Drop: OE-21 | | (512) 891-2760 | | | | Internal Addr: ephrem@soleil-tx (or at) oakhill!soleil-tx!ephrem | | Internet Addr: ...!soleil-tx.sps.mot.com!ephrem | | UUCP Address: oakhill!soleil-tx!ephrem@cs.utexas.edu | +=========================================================================+ */