ftp://ftp.smr.ru/pub/0/FreeBSD/releases/distfiles/xscreensaver-3.16.tar.gz
[xscreensaver] / driver / dialogs-Xm.c
1 /* dialogs-Xm.c --- Motif widgets for demo, options, and password dialogs.
2  * xscreensaver, Copyright (c) 1993-1998 Jamie Zawinski <jwz@jwz.org>
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and its
5  * documentation for any purpose is hereby granted without fee, provided that
6  * the above copyright notice appear in all copies and that both that
7  * copyright notice and this permission notice appear in supporting
8  * documentation.  No representations are made about the suitability of this
9  * software for any purpose.  It is provided "as is" without express or 
10  * implied warranty.
11  */
12
13 /* The code in this file started off its life as the output of XDesigner,
14    but I've since hacked it by hand...  It's a mess, avert your eyes.
15  */
16
17 #ifdef HAVE_CONFIG_H
18 # include "config.h"
19 #endif
20
21 #include <X11/Xatom.h>
22 #include <X11/Intrinsic.h>
23 #include <X11/Shell.h>
24
25 #include <Xm/Xm.h>
26 #include <Xm/DialogS.h>
27 #include <Xm/DrawnB.h>
28 #include <Xm/Form.h>
29 #include <Xm/Label.h>
30 #include <Xm/List.h>
31 #include <Xm/PushB.h>
32 #include <Xm/ScrollBar.h>
33 #include <Xm/Separator.h>
34 #include <Xm/TextF.h>
35 #include <Xm/ToggleB.h>
36
37 #include <Xm/SelectioB.h>
38
39 #include <stdio.h>
40
41 #include "visual.h"     /* for visual_depth() */
42
43 Widget preferences_dialog;
44 Widget preferences_form;
45 Widget timeout_text;
46 Widget cycle_text;
47 Widget fade_text;
48 Widget fade_ticks_text;
49 Widget lock_timeout_text;
50 Widget passwd_timeout_text;
51 Widget verbose_toggle;
52 Widget install_cmap_toggle;
53 Widget fade_toggle;
54 Widget unfade_toggle;
55 Widget lock_toggle;
56 Widget prefs_done;
57 Widget prefs_cancel;
58
59 Widget demo_dialog;
60 Widget demo_form;
61 Widget label1;
62 Widget label2;
63 Widget text_area;
64 Widget demo_list;
65 Widget text_line;
66 Widget vline;
67 Widget next;
68 Widget prev;
69 Widget edit;
70 Widget done;
71 Widget restart;
72 Widget spacer;
73
74 void
75 create_preferences_dialog(Widget parent, Visual *visual, Colormap colormap)
76 {
77   Widget children[22];      /* Children to manage */
78   Arg al[64];           /* Arg List */
79   register int ac = 0;      /* Arg Count */
80   Widget widget12;
81   Widget widget13;
82   Widget widget14;
83   Widget widget15;
84   Widget widget16;
85   Widget widget17;
86   Widget widget18;
87   Widget widget48;
88   Widget widget29;
89
90   Widget real_dialog;
91   Widget w;
92
93   ac = 0;
94   XtSetArg (al[ac], XmNvisual, visual); ac++;
95   XtSetArg (al[ac], XmNcolormap, colormap); ac++;
96   XtSetArg (al[ac], XmNdepth, visual_depth(XtScreen(parent), visual)); ac++;
97
98   real_dialog = XmCreatePromptDialog (parent, "preferencesForm", al, ac);
99   preferences_dialog = XtParent(real_dialog);
100
101   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_SEPARATOR);
102   if (w) XtUnmanageChild (w);
103   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_TEXT);
104   if (w) XtUnmanageChild (w);
105   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_SELECTION_LABEL);
106   if (w) XtUnmanageChild (w);
107   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_HELP_BUTTON);
108   if (w) XtUnmanageChild (w);
109
110   ac = 0;
111   XtSetArg (al [ac], XmNtopAttachment, XmATTACH_FORM); ac++;
112   XtSetArg (al [ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
113   XtSetArg (al [ac], XmNleftAttachment, XmATTACH_FORM); ac++;
114   XtSetArg (al [ac], XmNrightAttachment, XmATTACH_FORM); ac++;
115   preferences_form = XmCreateForm (real_dialog, "form", al, ac);
116   XtManageChild (preferences_form);
117
118   ac = 0;
119
120   widget12 = XmCreateLabel ( preferences_form, "preferencesLabel", al, ac );
121   widget13 = XmCreateSeparator ( preferences_form, "separator", al, ac );
122   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
123   widget14 = XmCreateLabel ( preferences_form, "timeoutLabel", al, ac );
124   ac = 0;
125   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
126   widget15 = XmCreateLabel ( preferences_form, "cycleLabel", al, ac );
127   ac = 0;
128   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
129   widget16 = XmCreateLabel ( preferences_form, "fadeSecondsLabel", al, ac );
130   ac = 0;
131   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
132   widget17 = XmCreateLabel ( preferences_form, "fadeTicksLabel", al, ac );
133   ac = 0;
134   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
135   widget18 = XmCreateLabel ( preferences_form, "lockLabel", al, ac );
136   ac = 0;
137   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_END); ac++;
138   widget48 = XmCreateLabel ( preferences_form, "passwdLabel", al, ac );
139   ac = 0;
140   timeout_text = XmCreateTextField ( preferences_form, "timeoutText", al, ac );
141   cycle_text = XmCreateTextField ( preferences_form, "cycleText", al, ac );
142   fade_text = XmCreateTextField ( preferences_form, "fadeSecondsText", al, ac);
143   fade_ticks_text = XmCreateTextField ( preferences_form, "fadeTicksText", al, ac);
144   lock_timeout_text = XmCreateTextField ( preferences_form, "passwdText", al, ac);
145   passwd_timeout_text = XmCreateTextField ( preferences_form, "lockText", al, ac);
146   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
147   verbose_toggle = XmCreateToggleButton (preferences_form,"verboseToggle",al,ac);
148   ac = 0;
149   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
150   install_cmap_toggle = XmCreateToggleButton ( preferences_form, "cmapToggle", al, ac);
151   ac = 0;
152   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
153   fade_toggle = XmCreateToggleButton ( preferences_form, "fadeToggle", al, ac);
154   ac = 0;
155   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
156   unfade_toggle = XmCreateToggleButton (preferences_form,"unfadeToggle",al,ac);
157   ac = 0;
158   XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++;
159   lock_toggle = XmCreateToggleButton ( preferences_form, "lockToggle", al, ac);
160   ac = 0;
161   widget29 = XmCreateSeparator ( preferences_form, "separator", al, ac );
162
163   prefs_done = XmSelectionBoxGetChild (real_dialog, XmDIALOG_OK_BUTTON);
164   prefs_cancel = XmSelectionBoxGetChild (real_dialog, XmDIALOG_CANCEL_BUTTON);
165
166   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
167   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
168   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
169   XtSetArg(al[ac], XmNleftOffset, 4); ac++;
170   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
171   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
172   XtSetValues ( widget12,al, ac );
173   ac = 0;
174
175   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
176   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
177   XtSetArg(al[ac], XmNtopWidget, widget12); ac++;
178   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
179   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
180   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
181   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
182   XtSetArg(al[ac], XmNrightOffset, 0); ac++;
183   XtSetValues ( widget13,al, ac );
184   ac = 0;
185
186   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
187   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
188   XtSetArg(al[ac], XmNtopWidget, widget13); ac++;
189   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
190   XtSetArg(al[ac], XmNbottomWidget, timeout_text); ac++;
191   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
192   XtSetArg(al[ac], XmNleftOffset, 20); ac++;
193   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
194   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
195   XtSetArg(al[ac], XmNrightWidget, timeout_text); ac++;
196   XtSetValues ( widget14,al, ac );
197   ac = 0;
198
199   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
200   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
201   XtSetArg(al[ac], XmNtopWidget, cycle_text); ac++;
202   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
203   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
204   XtSetArg(al[ac], XmNbottomWidget, cycle_text); ac++;
205   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
206   XtSetArg(al[ac], XmNleftOffset, 20); ac++;
207   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
208   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
209   XtSetArg(al[ac], XmNrightWidget, cycle_text); ac++;
210   XtSetValues ( widget15,al, ac );
211   ac = 0;
212
213   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
214   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
215   XtSetArg(al[ac], XmNtopWidget, fade_text); ac++;
216   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
217   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
218   XtSetArg(al[ac], XmNbottomWidget, fade_text); ac++;
219   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
220   XtSetArg(al[ac], XmNleftOffset, 20); ac++;
221   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
222   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
223   XtSetArg(al[ac], XmNrightWidget, fade_text); ac++;
224   XtSetValues ( widget16,al, ac );
225   ac = 0;
226
227   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
228   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
229   XtSetArg(al[ac], XmNtopWidget, fade_ticks_text); ac++;
230   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
231   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
232   XtSetArg(al[ac], XmNbottomWidget, fade_ticks_text); ac++;
233   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
234   XtSetArg(al[ac], XmNleftOffset, 20); ac++;
235   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
236   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
237   XtSetArg(al[ac], XmNrightWidget, fade_ticks_text); ac++;
238   XtSetValues ( widget17,al, ac );
239   ac = 0;
240
241   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
242   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
243   XtSetArg(al[ac], XmNtopWidget, lock_timeout_text); ac++;
244   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
245   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
246   XtSetArg(al[ac], XmNbottomWidget, lock_timeout_text); ac++;
247   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
248   XtSetArg(al[ac], XmNleftOffset, 19); ac++;
249   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
250   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
251   XtSetArg(al[ac], XmNrightWidget, lock_timeout_text); ac++;
252   XtSetValues ( widget18,al, ac );
253   ac = 0;
254
255   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
256   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
257   XtSetArg(al[ac], XmNtopWidget, passwd_timeout_text); ac++;
258   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
259   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
260   XtSetArg(al[ac], XmNbottomWidget, passwd_timeout_text); ac++;
261   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
262   XtSetArg(al[ac], XmNleftOffset, 14); ac++;
263   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_WIDGET); ac++;
264   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
265   XtSetArg(al[ac], XmNrightWidget, passwd_timeout_text); ac++;
266   XtSetValues ( widget48,al, ac );
267   ac = 0;
268
269   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
270   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
271   XtSetArg(al[ac], XmNtopWidget, widget13); ac++;
272   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
273   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
274   XtSetArg(al[ac], XmNleftOffset, 141); ac++;
275   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
276   XtSetValues ( timeout_text,al, ac );
277   ac = 0;
278
279   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
280   XtSetArg(al[ac], XmNtopOffset, 2); ac++;
281   XtSetArg(al[ac], XmNtopWidget, timeout_text); ac++;
282   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
283   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
284   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
285   XtSetArg(al[ac], XmNleftWidget, timeout_text); ac++;
286   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
287   XtSetValues ( cycle_text,al, ac );
288   ac = 0;
289
290   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
291   XtSetArg(al[ac], XmNtopOffset, 2); ac++;
292   XtSetArg(al[ac], XmNtopWidget, cycle_text); ac++;
293   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
294   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
295   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
296   XtSetArg(al[ac], XmNleftWidget, cycle_text); ac++;
297   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
298   XtSetValues ( fade_text,al, ac );
299   ac = 0;
300
301   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
302   XtSetArg(al[ac], XmNtopOffset, 2); ac++;
303   XtSetArg(al[ac], XmNtopWidget, fade_text); ac++;
304   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
305   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
306   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
307   XtSetArg(al[ac], XmNleftWidget, fade_text); ac++;
308   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
309   XtSetValues ( fade_ticks_text,al, ac );
310   ac = 0;
311
312   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
313   XtSetArg(al[ac], XmNtopOffset, 2); ac++;
314   XtSetArg(al[ac], XmNtopWidget, fade_ticks_text); ac++;
315   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
316   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
317   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
318   XtSetArg(al[ac], XmNleftWidget, fade_ticks_text); ac++;
319   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
320   XtSetValues ( lock_timeout_text,al, ac );
321   ac = 0;
322
323   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
324   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
325   XtSetArg(al[ac], XmNtopWidget, lock_timeout_text); ac++;
326   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
327   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
328   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
329   XtSetArg(al[ac], XmNleftWidget, lock_timeout_text); ac++;
330   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++;
331   XtSetValues ( passwd_timeout_text,al, ac );
332   ac = 0;
333
334   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
335   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
336   XtSetArg(al[ac], XmNtopWidget, widget13); ac++;
337   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
338   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
339   XtSetArg(al[ac], XmNbottomWidget, timeout_text); ac++;
340   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++;
341   XtSetArg(al[ac], XmNleftOffset, 20); ac++;
342   XtSetArg(al[ac], XmNleftWidget, timeout_text); ac++;
343   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
344   XtSetArg(al[ac], XmNrightOffset, 20); ac++;
345   XtSetValues ( verbose_toggle,al, ac );
346   ac = 0;
347
348   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
349   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
350   XtSetArg(al[ac], XmNtopWidget, cycle_text); ac++;
351   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
352   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
353   XtSetArg(al[ac], XmNbottomWidget, cycle_text); ac++;
354   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
355   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
356   XtSetArg(al[ac], XmNleftWidget, verbose_toggle); ac++;
357   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
358   XtSetArg(al[ac], XmNrightOffset, 20); ac++;
359   XtSetValues ( install_cmap_toggle,al, ac );
360   ac = 0;
361
362   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
363   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
364   XtSetArg(al[ac], XmNtopWidget, fade_text); ac++;
365   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
366   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
367   XtSetArg(al[ac], XmNbottomWidget, fade_text); ac++;
368   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
369   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
370   XtSetArg(al[ac], XmNleftWidget, install_cmap_toggle); ac++;
371   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
372   XtSetArg(al[ac], XmNrightOffset, 20); ac++;
373   XtSetValues ( fade_toggle,al, ac );
374   ac = 0;
375
376   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
377   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
378   XtSetArg(al[ac], XmNtopWidget, fade_ticks_text); ac++;
379   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
380   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
381   XtSetArg(al[ac], XmNbottomWidget, fade_ticks_text); ac++;
382   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
383   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
384   XtSetArg(al[ac], XmNleftWidget, fade_toggle); ac++;
385   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
386   XtSetArg(al[ac], XmNrightOffset, 20); ac++;
387   XtSetValues ( unfade_toggle,al, ac );
388   ac = 0;
389
390   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
391   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
392   XtSetArg(al[ac], XmNtopWidget, lock_timeout_text); ac++;
393   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
394   XtSetArg(al[ac], XmNbottomOffset, 0); ac++;
395   XtSetArg(al[ac], XmNbottomWidget, lock_timeout_text); ac++;
396   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
397   XtSetArg(al[ac], XmNleftOffset, 0); ac++;
398   XtSetArg(al[ac], XmNleftWidget, unfade_toggle); ac++;
399   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
400   XtSetArg(al[ac], XmNrightOffset, 20); ac++;
401   XtSetValues ( lock_toggle,al, ac );
402   ac = 0;
403
404   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
405   XtSetArg(al[ac], XmNtopOffset, 0); ac++;
406   XtSetArg(al[ac], XmNtopWidget, passwd_timeout_text); ac++;
407
408   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
409   XtSetArg(al[ac], XmNbottomOffset, 4); ac++;
410
411   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
412   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
413   XtSetValues ( widget29,al, ac );
414   ac = 0;
415
416
417
418   ac = 0;
419   children[ac++] = widget12;
420   children[ac++] = widget13;
421   children[ac++] = widget14;
422   children[ac++] = widget15;
423   children[ac++] = widget16;
424   children[ac++] = widget17;
425   children[ac++] = widget18;
426   children[ac++] = widget48;
427   children[ac++] = timeout_text;
428   children[ac++] = cycle_text;
429   children[ac++] = fade_text;
430   children[ac++] = fade_ticks_text;
431   children[ac++] = lock_timeout_text;
432   children[ac++] = passwd_timeout_text;
433   children[ac++] = verbose_toggle;
434   children[ac++] = install_cmap_toggle;
435   children[ac++] = fade_toggle;
436   children[ac++] = unfade_toggle;
437   children[ac++] = lock_toggle;
438   children[ac++] = widget29;
439
440   XtManageChildren(children, ac);
441   ac = 0;
442
443   preferences_form = real_dialog;
444 }
445
446
447 void
448 create_demo_dialog(Widget parent, Visual *visual, Colormap colormap)
449 {
450   Arg al[64];           /* Arg List */
451   register int ac = 0;      /* Arg Count */
452
453   Widget real_dialog;
454   Widget w;
455
456
457   ac = 0;
458   XtSetArg (al[ac], XmNvisual, visual); ac++;
459   XtSetArg (al[ac], XmNcolormap, colormap); ac++;
460   XtSetArg (al[ac], XmNdepth, visual_depth(XtScreen(parent), visual)); ac++;
461
462
463   real_dialog = XmCreatePromptDialog (parent, "demoForm", al, ac);
464   demo_dialog = XtParent(real_dialog);
465
466   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_SEPARATOR);
467   if (w) XtUnmanageChild (w);
468   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_TEXT);
469   if (w) XtUnmanageChild (w);
470   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_SELECTION_LABEL);
471   if (w) XtUnmanageChild (w);
472   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_OK_BUTTON);
473   if (w) XtUnmanageChild (w);
474   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_CANCEL_BUTTON);
475   if (w) XtUnmanageChild (w);
476   w = XmSelectionBoxGetChild (real_dialog, XmDIALOG_HELP_BUTTON);
477   if (w) XtUnmanageChild (w);
478
479   ac = 0;
480   XtSetArg (al [ac], XmNtopAttachment, XmATTACH_FORM); ac++;
481   XtSetArg (al [ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
482   XtSetArg (al [ac], XmNleftAttachment, XmATTACH_FORM); ac++;
483   XtSetArg (al [ac], XmNrightAttachment, XmATTACH_FORM); ac++;
484   demo_form = XmCreateForm (real_dialog, "form", al, ac);
485   XtManageChild (demo_form);
486
487   label1 = XmCreateLabel ( demo_form, "label1", al, ac );
488   label2 = XmCreateLabel ( demo_form, "label2", al, ac );
489   demo_list = XmCreateScrolledList ( demo_form, "demoList", al, ac );
490   text_area = XtParent ( demo_list );
491
492   ac = 0;
493   text_line = XmSelectionBoxGetChild (real_dialog, XmDIALOG_TEXT);
494   XtManageChild(text_line);
495
496   /* #### ARRGH!  This is apparently the only way to make hitting return in
497      the text field not *ALSO* activate the most-recently-selected button!
498
499      This has the unfortunate side effect of making the buttons not be
500      keyboard-traversable, but that's less bad than not being able to try
501      out new switches by typing them into the text field.
502
503      XmSelectionBox(3M) says in the "Additional Behavior" section:
504           KActivate:
505                     Calls the activate callbacks for the button with
506                     the keyboard focus.  [... ]  In a List widget or
507                     single-line Text widget, the List or Text action
508                     associated with KActivate is called before the
509                     SelectionBox actions associated with KActivate."
510
511      So they take it as a given that when running activateCallback on a single-
512      line Text widget, you'll also want to run activateCallback on whatever the
513      currently-focussed button is as well!  Morons!  Villains!  Shitheads!
514
515      (Perhaps there's some way to override XmSelectionBox's KActivate behavior.
516      I doubt it, but if there is, I don't know it.)
517   */
518   ac = 0;
519   XtSetArg(al[ac], XmNtraversalOn, False); ac++;
520
521   next = XmCreatePushButton ( real_dialog, "next", al, ac );
522   prev = XmCreatePushButton ( real_dialog, "prev", al, ac );
523   edit = XmCreatePushButton ( real_dialog, "edit", al, ac );
524   done = XmCreatePushButton ( real_dialog, "done", al, ac );
525 #if 0
526   restart = XmCreatePushButton ( real_dialog, "restart", al, ac );
527 #endif
528   XtManageChild(next);
529   XtManageChild(prev);
530   XtManageChild(edit);
531   XtManageChild(done);
532 #if 0
533   XtManageChild(restart);
534 #endif
535
536   ac = 0;
537   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
538   XtSetArg(al[ac], XmNtopOffset, 5); ac++;
539   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
540   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
541   XtSetArg(al[ac], XmNleftOffset, 4); ac++;
542   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
543   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
544   XtSetValues ( label1,al, ac );
545   ac = 0;
546
547   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
548   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
549   XtSetArg(al[ac], XmNtopWidget, label1); ac++;
550   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++;
551   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
552   XtSetArg(al[ac], XmNleftOffset, 4); ac++;
553   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
554   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
555   XtSetValues ( label2,al, ac );
556   ac = 0;
557
558   XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++;
559   XtSetArg(al[ac], XmNtopOffset, 4); ac++;
560   XtSetArg(al[ac], XmNtopWidget, label2); ac++;
561   XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
562   XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
563   XtSetArg(al[ac], XmNleftOffset, 4); ac++;
564   XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
565   XtSetArg(al[ac], XmNrightOffset, 4); ac++;
566   XtSetValues ( text_area,al, ac );
567
568   XtManageChild(demo_list);
569   XtManageChild(label1);
570   XtManageChild(label2);
571
572   demo_form = real_dialog;
573 }