/* $XConsortium: DiaShellM2.c /main/4 1995/07/15 21:05:58 drk $ */ /* * @OPENGROUP_COPYRIGHT@ * COPYRIGHT NOTICE * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for * the full copyright text. * * This software is subject to an open license. It may only be * used on, with or for operating systems which are themselves open * source systems. You must contact The Open Group for a license * allowing distribution and sublicensing of this software on, with, * or for operating systems which are not Open Source programs. * * See http://www.opengroup.org/openmotif/license for full * details of the license agreement. Any use, reproduction, or * distribution of the program constitutes recipient's acceptance of * this agreement. * * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY * OR FITNESS FOR A PARTICULAR PURPOSE * * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. */ /* * HISTORY */ #include /* callback procedures */ static void quitCB(); Widget BulletinBoard1, PushButton1, PushButton2; Widget Scale; Boolean modal_bug = False; /*PIR3421*/ /*Begin PIR2753*/ static void PostModelessDialog (w, client_data, call_data) Widget w; XtPointer client_data, call_data; { Widget parent, Dialog1, spawnButton; int n; Arg args[10]; XmString tcs; int delay; parent = (Widget) client_data; /* get the posting delay from the Scale*/ n = 0; XtSetArg (args[n], XmNvalue, &delay); n++; XtGetValues (Scale, args, n); n = 0; /* message box resources */ XtSetArg (args[n], XmNmessageString, XmStringCreateSimple ("While this box is up, you should be able to input anywhere else")); n++; XtSetArg (args[n], XmNautoUnmanage, True); n++; XtSetArg (args[n], XmNhelpLabelString, XmStringCreateSimple ("Spawn Dialog Child")); n++; /* dialog shell resources */ XtSetArg (args[n], XmNtitle, "Modeless Dialog"); n++; XtSetArg (args[n], XmNdialogStyle, XmDIALOG_MODELESS); n++; Dialog1 = XmCreateMessageDialog(parent, "Dialog1", args, n); /* make HELP button spawn a child */ spawnButton = XmMessageBoxGetChild (Dialog1, XmDIALOG_HELP_BUTTON); XtAddCallback (spawnButton, XmNactivateCallback, PostModelessDialog, Dialog1); if (delay) sleep (delay); XtManageChild (Dialog1); } /*End PIR2753*/ static void PostPrimaryModalDialog (w, client_data, call_data) Widget w; XtPointer client_data, call_data; { Widget parent, Dialog1, spawnButton; int n; Arg args[10]; XmString tcs; int delay; parent = (Widget) client_data; /* get the posting delay from the Scale*/ n = 0; XtSetArg (args[n], XmNvalue, &delay); n++; XtGetValues (Scale, args, n); n = 0; /* message box resources */ XtSetArg (args[n], XmNmessageString, XmStringCreateSimple ("While this box is up, you should not be able to use its parent")); n++; XtSetArg (args[n], XmNautoUnmanage, True); n++; XtSetArg (args[n], XmNhelpLabelString, XmStringCreateSimple ("Spawn Dialog Child")); n++; /* dialog shell resources */ XtSetArg (args[n], XmNtitle, "Primary Application Modal Dialog"); n++; /* XtSetArg (args[n], XmNmwmInpuMode, XmDIALOG_PRIMARY_APPLICATION_MODAL); n++; */ XtSetArg (args[n], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); n++; Dialog1 = XmCreateMessageDialog(parent, "Dialog1", args, n); /* make HELP button spawn a child */ spawnButton = XmMessageBoxGetChild (Dialog1, XmDIALOG_HELP_BUTTON); XtAddCallback (spawnButton, XmNactivateCallback, PostPrimaryModalDialog, Dialog1); if (delay) sleep (delay); XtManageChild (Dialog1); } static void PostFullAppModalDialog (w, client_data, call_data) Widget w; XtPointer client_data, call_data; { Widget parent, Dialog2, spawnButton; int n; Arg args[10]; int delay; parent = (Widget) client_data; /* get the posting delay from the Scale*/ n = 0; XtSetArg (args[n], XmNvalue, &delay); n++; XtGetValues (Scale, args, n); n = 0; /* message box resources */ XtSetArg (args[n], XmNmessageString, XmStringCreateSimple ("While this box is up, you should not be able to use either Shell1 or Shell2 nor any other dialog box.")); n++; XtSetArg (args[n], XmNautoUnmanage, True); n++; XtSetArg (args[n], XmNhelpLabelString, XmStringCreateSimple ("Spawn Dialog Child")); n++; /* dialog shell resources */ XtSetArg (args[n], XmNtitle, "Full Application Modal Dialog"); n++; /* XtSetArg (args[n], XmNmwmInpuMode, XmDIALOG_PRIMARY_APPLICATION_MODAL); n++; */ XtSetArg (args[n], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); n++; Dialog2 = XmCreateMessageDialog(parent, "Dialog1", args, n); /* make HELP button spawn a child */ spawnButton = XmMessageBoxGetChild (Dialog2, XmDIALOG_HELP_BUTTON); XtAddCallback (spawnButton, XmNactivateCallback, PostFullAppModalDialog, Dialog2); if (delay) sleep (delay); XtManageChild (Dialog2); } static void PostSystemModalDialog (w, client_data, call_data) Widget w; XtPointer client_data, call_data; { Widget parent, Dialog3, spawnButton; int n; Arg args[10]; int delay; parent = (Widget) client_data; /* get the posting delay from the Scale*/ n = 0; XtSetArg (args[n], XmNvalue, &delay); n++; XtGetValues (Scale, args, n); n = 0; /* message box resources */ XtSetArg (args[n], XmNmessageString, XmStringCreateSimple ("While this box is up, you should not be able to use any other application nor any other part of this client.")); n++; XtSetArg (args[n], XmNautoUnmanage, True); n++; XtSetArg (args[n], XmNhelpLabelString, XmStringCreateSimple ("Spawn Dialog Child")); n++; /* dialog shell resources */ XtSetArg (args[n], XmNtitle, "System Modal Dialog"); n++; /* XtSetArg (args[n], XmNmwmInputMode, XmDIALOG_PRIMARY_APPLICATION_MODAL); n++; */ XtSetArg (args[n], XmNdialogStyle, XmDIALOG_SYSTEM_MODAL); n++; Dialog3 = XmCreateMessageDialog(parent, "Dialog1", args, n); /* make HELP button spawn a child */ spawnButton = XmMessageBoxGetChild (Dialog3, XmDIALOG_HELP_BUTTON); XtAddCallback (spawnButton, XmNactivateCallback, PostSystemModalDialog, Dialog3); if (delay) sleep (delay); XtManageChild (Dialog3); } /*Begin PIR1953*/ static void DestroyWorkingDialog (w, client_data, call_data) Widget w; XtPointer client_data, call_data; { XtDestroyWidget((Widget) client_data); } static void PostWorkingDialog (w, client_data, call_data) Widget w; XtPointer client_data, call_data; { Widget parent, DialogW, destroyButton; int n; Arg args[10]; XmString tcs; int delay; parent = (Widget) client_data; /* get the posting delay from the Scale*/ n = 0; XtSetArg (args[n], XmNvalue, &delay); n++; XtGetValues (Scale, args, n); n = 0; /* message box resources */ XtSetArg (args[n], XmNmessageString, XmStringCreateSimple ("This is Working Dialog")); n++; XtSetArg (args[n], XmNautoUnmanage, True); n++; XtSetArg (args[n], XmNhelpLabelString, XmStringCreateSimple ("Destroy Working Dialog")); n++; /* dialog shell resources */ XtSetArg (args[n], XmNtitle, "Working Dialog"); n++; XtSetArg (args[n], XmNdialogStyle, XmDIALOG_MODELESS); n++; DialogW = XmCreateWorkingDialog(parent, "DialogW", args, n); /* make HELP button spawn a child */ destroyButton = XmMessageBoxGetChild (DialogW, XmDIALOG_HELP_BUTTON); XtAddCallback (destroyButton, XmNactivateCallback, DestroyWorkingDialog, DialogW); if (delay) sleep (delay); XtManageChild (DialogW); } /*End PIR1953*/ /*Begin PIR2145*/ static void DestroyPopupShell (w, client_data, call_data) Widget w; XtPointer client_data, call_data; { XtDestroyWidget((Widget) client_data); } static void PostPopupShell (w, client_data, call_data) Widget w; XtPointer client_data, call_data; { Widget parent, Shell3, BB3, DB3; int n; Arg args[10]; int delay; parent = (Widget) client_data; /* get the posting delay from the Scale*/ n = 0; XtSetArg (args[n], XmNvalue, &delay); n++; XtGetValues (Scale, args, n); n = 0; /* message box resources */ XtSetArg (args[n], XmNmessageString, XmStringCreateSimple ("Testing pop up shell and destroy widget.")); n++; XtSetArg (args[n], XmNautoUnmanage, True); n++; /* dialog shell resources */ XtSetArg (args[n], XmNtitle, "Popup Shell"); n++; Shell3 = XtCreatePopupShell("Shell 3", topLevelShellWidgetClass, parent, args, n); n = 0; BB3 = XmCreateBulletinBoard (Shell3, "BB3", args, n); XtManageChild (BB3); n = 0; XtSetArg (args[n], XmNx, 200); n++; XtSetArg (args[n], XmNy, 50); n++; DB3 = XmCreatePushButtonGadget (BB3, "Destroy", args, n); XtManageChild (DB3); XtAddCallback (DB3, XmNactivateCallback, DestroyPopupShell, Shell3); n = 0; XtSetArg (args[n], XmNdefaultButton, DB3); n++; XtSetValues (BB3, args, n); if (delay) sleep (delay); XtPopup(Shell3, XtGrabNone); } /*End PIR2145*/ static void quitCB(w, client_data, call_data) Widget w; XtPointer client_data, call_data; { printf("Begin exiting ... please standby ... \n"); fflush(stdout); exit(0); } /*Begin PIR3421*/ static void destroyDialogCB(w, client_data, call_data) Widget w; XtPointer client_data, call_data; { XtDestroyWidget((Widget) client_data); } /*End PIR3421*/ void main(argc, argv) int argc; char **argv; { register int n; Arg args[MAX_ARGS]; XmString tcs; Widget Shell2; Widget BB1, BB2; Widget DB, DB2, exitButton; Widget test1, test1a, test2, test3; Widget test1b; /*PIR2753*/ Widget test1c; /*PIR2145*/ Widget test2a; Widget test2b; Widget FullAppDialog; /*PIR3421*/ Widget okButton, cancelButton, destroyButton; /*PIR3421*/ CommonTestInit(argc, argv); if (UserData != NULL) /*PIR3421*/ ProcessCommandArgs(); n = 0; XtSetArg(args[n], XmNtitle, "Shell 2"); n++; XtSetArg(args[n], XtNgeometry, "+500+0"); n++; Shell2 = XtAppCreateShell(argv[0], NULL, topLevelShellWidgetClass, display, args, n); /* Shell 1 children */ n = 0; BB1 = XmCreateBulletinBoard (Shell1, "BB1", args, n); XtManageChild (BB1); n = 0; XtSetArg (args[n], XmNx, 300); n++; XtSetArg (args[n], XmNy, 50); n++; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Default Button")); n++; DB = XmCreatePushButton (BB1, "DB", args, n); XtManageChild (DB); n = 0; XtSetArg (args[n], XmNdefaultButton, DB); n++; XtSetValues (BB1, args, n); n = 0; XtSetArg (args[n], XmNx, 300); n++; XtSetArg (args[n], XmNy, 10); n++; exitButton = XmCreatePushButtonGadget (BB1, "Exit", args, n); XtManageChild (exitButton); XtAddCallback (exitButton, XmNactivateCallback, quitCB, NULL); n = 0; XtSetArg(args[n], XmNx, 12); n++; XtSetArg(args[n], XmNy, 20); n++; XtSetArg(args[n], XmNvalue, 0); n++; XtSetArg(args[n], XmNtitleString, XmStringCreateSimple ("Posting Delay")); n++; XtSetArg(args[n], XmNmaximum, 120); n++; XtSetArg(args[n], XmNminimum, 0); n++; XtSetArg(args[n], XmNshowValue, True); n++; XtSetArg(args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++; XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++; Scale = XmCreateScale (BB1, "Scale", args, n); XtManageChild (Scale); n = 0; XtSetArg (args[n], XmNx, 10); n++; XtSetArg (args[n], XmNy, 100); n++; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Create Primary Modal from Shell2")); n++; test1 = XmCreatePushButton (BB1, "test1", args, n); XtManageChild (test1); XtAddCallback (test1, XmNactivateCallback, PostPrimaryModalDialog, Shell2); n = 0; XtSetArg (args[n], XmNx, 10); n++; XtSetArg (args[n], XmNy, 150); n++; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Create Primary Modal from Shell1")); n++; test1a = XmCreatePushButton (BB1, "test1a", args, n); XtManageChild (test1a); XtAddCallback (test1a, XmNactivateCallback, PostPrimaryModalDialog, Shell1); n = 0; XtSetArg (args[n], XmNx, 10); n++; XtSetArg (args[n], XmNy, 200); n++; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Create Full App Modal Dialog")); n++; test2 = XmCreatePushButton (BB1, "test2", args, n); XtManageChild (test2); XtAddCallback (test2, XmNactivateCallback, PostFullAppModalDialog, Shell1); n = 0; XtSetArg (args[n], XmNx, 10); n++; XtSetArg (args[n], XmNy, 250); n++; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Create System Modal Dialog")); n++; test3 = XmCreatePushButton (BB1, "test3", args, n); XtManageChild (test3); XtAddCallback (test3, XmNactivateCallback, PostSystemModalDialog, Shell2); /*Begin PIR2753*/ n = 0; XtSetArg (args[n], XmNx, 10); n++; XtSetArg (args[n], XmNy, 300); n++; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Create Modeless Dialog from Shell1")); n++; test1b = XmCreatePushButton (BB1, "test1b", args, n); XtManageChild (test1b); XtAddCallback (test1b, XmNactivateCallback, PostModelessDialog, Shell1); /*End PIR2753*/ /*Begin PIR2145*/ n = 0; XtSetArg (args[n], XmNx, 10); n++; XtSetArg (args[n], XmNy, 350); n++; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Create Popup Shell from Shell2")); n++; test1c = XmCreatePushButton (BB1, "test1c", args, n); XtManageChild (test1c); XtAddCallback (test1c, XmNactivateCallback, PostPopupShell, Shell2); /*End PIR2145*/ /* Shell 2 children */ n = 0; BB2 = XmCreateBulletinBoard (Shell2, "BB2", args, n); XtManageChild (BB2); n = 0; XtSetArg (args[n], XmNx, 200); n++; XtSetArg (args[n], XmNy, 50); n++; DB2 = XmCreatePushButtonGadget (BB2, "DB2", args, n); XtManageChild (DB2); n = 0; XtSetArg (args[n], XmNx, 10); n++; XtSetArg (args[n], XmNy, 100); n++; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Create Modeless Dialog from Shell2")); n++; test2a = XmCreatePushButton (BB2, "test2a", args, n); XtManageChild (test2a); XtAddCallback (test2a, XmNactivateCallback, PostModelessDialog, Shell2); n = 0; XtSetArg (args[n], XmNx, 10); n++; XtSetArg (args[n], XmNy, 150); n++; XtSetArg (args[n], XmNlabelString, XmStringCreateSimple ("Create Working Dialog from Shell2")); n++; test2b = XmCreatePushButton (BB2, "test2b", args, n); XtManageChild (test2b); XtAddCallback (test2b, XmNactivateCallback, PostWorkingDialog, Shell2); n = 0; XtSetArg (args[n], XmNdefaultButton, DB2); n++; XtSetValues (BB2, args, n); /*Begin PIR3421*/ if (modal_bug == True) { n = 0; XtSetArg (args[n], XmNmessageString, XmStringCreateSimple ("This is a FullApp Modal dialog")); n++; XtSetArg (args[n], XmNtitle, "FullApp Modal Dialog"); n++; XtSetArg (args[n], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); n++; XtSetArg (args[n], XmNhelpLabelString, XmStringCreateSimple ("Destroy Me")); n++; FullAppDialog = XmCreateMessageDialog(Shell1, "FullAppDialog", args, n); cancelButton = XmMessageBoxGetChild (FullAppDialog, XmDIALOG_CANCEL_BUTTON); XtUnmanageChild(cancelButton); okButton = XmMessageBoxGetChild (FullAppDialog, XmDIALOG_OK_BUTTON); XtUnmanageChild(okButton); destroyButton = XmMessageBoxGetChild (FullAppDialog, XmDIALOG_HELP_BUTTON); XtAddCallback (destroyButton, XmNactivateCallback, destroyDialogCB, FullAppDialog); XtManageChild (FullAppDialog); } /*End PIR3421*/ XtRealizeWidget(Shell1); XtRealizeWidget(Shell2); CommonPause(); XtAppMainLoop(app_context); } /*Begin PIR3421*/ #define WORD_LEN 32 ProcessCommandArgs() { char *user_data; char next_word[WORD_LEN + 1]; user_data = UserData; while (*user_data != '\0') { get_next_word(user_data, next_word); user_data += strlen(next_word); if (strcmp(next_word, "-modalbug") == 0) { modal_bug = True; continue; } } free(UserData); } get_next_word(source, dest) char *source; char *dest; { int n; while (isspace(*source)) source++; n = 0; while (!isspace(*source) && *source != '\0' && n < WORD_LEN) { *dest++ = *source++; n++; } *dest = '\0'; } /*End PIR3421*/