1 /* $Header: /cvsroot/lesstif/lesstif/test/Xm/vendor/test6.c,v 1.1 2001/03/16 14:28:01 amai Exp $ */
2 /*
3 
4    see http://www.mail-archive.com/lesstif@hungry.com/msg00535.html
5 
6       Hello Lesstif,
7 
8       Scenario:
9 
10       lesstif-0.91.4
11       Motif-2.0 widgets
12       Redhat 6.2
13 
14       I get the warning message:
15 
16       Warning: XtRemoveGrab asked to remove a widget not on the list
17 
18       twice every time I destroy a toplevel shell.
19 
20       I've included a simple example, press "Create Window 2" to make
21       a second window, and when you press "Quit 2" in this window, you'll
22       get the error message...
23 
24       I don't get this message with openmotif :-)
25 
26       Am I doing something wrong in my code, or is this a bug in Lesstif?
27 
28       Mogens
29       --
30       Mogens Kjaer, Carlsberg Laboratory, Dept. of Chemistry
31       Gamle Carlsberg Vej 10, DK-2500 Valby, Denmark
32       Phone: +45 33 27 53 25, Fax: +45 33 27 47 08
33       Email: mk@crc.dk Homepage: http://www.crc.dk
34 
35 */
36 
37 
38 #include <stdio.h>
39 
40 #include <Xm/Xm.h>
41 #include <Xm/Form.h>
42 #include <Xm/Label.h>
43 #include <Xm/PushB.h>
44 
45 void quit_callback ();
46 void window2_callback ();
47 
48 static int n;
49 static Arg wargs[1000];
50 static Widget toplevel, form, quit, make_w2;
51 static Widget toplevel2, form2, quit2;
52 
53 void
quit_callback(Widget w,caddr_t client_data,caddr_t user_data)54 quit_callback (Widget w, caddr_t client_data, caddr_t user_data)
55 {
56   exit (0);
57 }
58 
59 void
quit2_callback(Widget w,caddr_t client_data,caddr_t user_data)60 quit2_callback (Widget w, caddr_t client_data, caddr_t user_data)
61 {
62   XtDestroyWidget (toplevel2);
63 }
64 
65 void
make_w2_callback(Widget w,caddr_t client_data,caddr_t user_data)66 make_w2_callback (Widget w, caddr_t client_data, caddr_t user_data)
67 {
68   n = 0;
69   XtSetArg (wargs[n], XtNtitle, "Window 2");
70   n++;
71   toplevel2 =
72     XtCreateApplicationShell ("Window2", topLevelShellWidgetClass, wargs, n);
73 
74   n = 0;
75   form2 =
76     XtCreateManagedWidget ("form2", xmFormWidgetClass, toplevel2, wargs, n);
77 
78   n = 0;
79   XtSetArg (wargs[n], XmNtopAttachment, XmATTACH_FORM);
80   n++;
81   XtSetArg (wargs[n], XmNleftAttachment, XmATTACH_FORM);
82   n++;
83   XtSetArg (wargs[n], XmNlabelString, XmStringCreateSimple ("Quit 2"));
84   n++;
85   quit2 =
86     XtCreateManagedWidget ("quit2", xmPushButtonWidgetClass, form2, wargs, n);
87   XtAddCallback (quit2, XmNactivateCallback, (XtCallbackProc) quit2_callback,
88 		 NULL);
89 
90   XtRealizeWidget (toplevel2);
91 }
92 
93 int
main(int argc,char * argv[])94 main (int argc, char *argv[])
95 {
96   Widget xref;
97 
98   n = 0;
99   toplevel =
100     XtInitialize ("example", "Example", (XrmOptionDescRec *) wargs, n, &argc,
101 		  argv);
102 
103   n = 0;
104   form =
105     XtCreateManagedWidget ("form", xmFormWidgetClass, toplevel, wargs, n);
106 
107   n = 0;
108   XtSetArg (wargs[n], XmNtopAttachment, XmATTACH_FORM);
109   n++;
110   XtSetArg (wargs[n], XmNleftAttachment, XmATTACH_FORM);
111   n++;
112   XtSetArg (wargs[n], XmNlabelString, XmStringCreateSimple ("Quit"));
113   n++;
114   xref = quit =
115     XtCreateManagedWidget ("quit", xmPushButtonWidgetClass, form, wargs, n);
116   XtAddCallback (quit, XmNactivateCallback, (XtCallbackProc) quit_callback,
117 		 NULL);
118 
119   n = 0;
120   XtSetArg (wargs[n], XmNtopAttachment, XmATTACH_FORM);
121   n++;
122   XtSetArg (wargs[n], XmNleftAttachment, XmATTACH_WIDGET);
123   n++;
124   XtSetArg (wargs[n], XmNleftWidget, xref);
125   n++;
126   XtSetArg (wargs[n], XmNlabelString,
127 	    XmStringCreateSimple ("Create Window 2")); n++;
128   xref = make_w2 =
129     XtCreateManagedWidget ("make_w2", xmPushButtonWidgetClass, form, wargs,
130 			   n);
131   XtAddCallback (make_w2, XmNactivateCallback,
132 		 (XtCallbackProc) make_w2_callback, NULL);
133 
134   XtRealizeWidget (toplevel);
135 #if 0
136   XtMainLoop ();
137 #else
138   LessTifTestMainLoop(toplevel);
139 #endif
140 
141   exit(0);
142 }
143