VarCreate.c revision 1477040f
1444c061aSmrg/* $Xorg: VarCreate.c,v 1.4 2001/02/09 02:03:59 xorgcvs Exp $ */
2444c061aSmrg
3444c061aSmrg/*
4444c061aSmrg
51477040fSmrgCopyright 1993 Sun Microsystems, Inc.  All rights reserved.
61477040fSmrg
71477040fSmrgPermission is hereby granted, free of charge, to any person obtaining a
81477040fSmrgcopy of this software and associated documentation files (the "Software"),
91477040fSmrgto deal in the Software without restriction, including without limitation
101477040fSmrgthe rights to use, copy, modify, merge, publish, distribute, sublicense,
111477040fSmrgand/or sell copies of the Software, and to permit persons to whom the
121477040fSmrgSoftware is furnished to do so, subject to the following conditions:
131477040fSmrg
141477040fSmrgThe above copyright notice and this permission notice (including the next
151477040fSmrgparagraph) shall be included in all copies or substantial portions of the
161477040fSmrgSoftware.
171477040fSmrg
181477040fSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
191477040fSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
201477040fSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
211477040fSmrgTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
221477040fSmrgLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
231477040fSmrgFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
241477040fSmrgDEALINGS IN THE SOFTWARE.
25444c061aSmrg
26444c061aSmrg*/
27444c061aSmrg
28444c061aSmrg/*
29444c061aSmrg
30444c061aSmrgCopyright 1885, 1986, 1987, 1988, 1989, 1994, 1998  The Open Group
31444c061aSmrg
32444c061aSmrgPermission to use, copy, modify, distribute, and sell this software and its
33444c061aSmrgdocumentation for any purpose is hereby granted without fee, provided that
34444c061aSmrgthe above copyright notice appear in all copies and that both that
35444c061aSmrgcopyright notice and this permission notice appear in supporting
36444c061aSmrgdocumentation.
37444c061aSmrg
38444c061aSmrgThe above copyright notice and this permission notice shall be included in
39444c061aSmrgall copies or substantial portions of the Software.
40444c061aSmrg
41444c061aSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
42444c061aSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
43444c061aSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
44444c061aSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
45444c061aSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
46444c061aSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
47444c061aSmrg
48444c061aSmrgExcept as contained in this notice, the name of The Open Group shall not be
49444c061aSmrgused in advertising or otherwise to promote the sale, use or other dealings
50444c061aSmrgin this Software without prior written authorization from The Open Group.
51444c061aSmrg
52444c061aSmrg*/
53444c061aSmrg/* $XFree86: xc/lib/Xt/VarCreate.c,v 3.6 2001/08/22 22:52:20 dawes Exp $ */
54444c061aSmrg
55444c061aSmrg#ifdef HAVE_CONFIG_H
56444c061aSmrg#include <config.h>
57444c061aSmrg#endif
58444c061aSmrg#include "IntrinsicI.h"
59444c061aSmrg#include "StringDefs.h"
60444c061aSmrg#include "Shell.h"
61444c061aSmrg#include "VarargsI.h"
62444c061aSmrg#include "CreateI.h"
63444c061aSmrg
64444c061aSmrg#if (defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE)
65444c061aSmrg#define XtToolkitInitialize _XtToolkitInitialize
66444c061aSmrg#endif /* (SUNSHLIB || AIXSHLIB) && SHAREDCODE */
67444c061aSmrg
68444c061aSmrgstatic Widget
69444c061aSmrg_XtVaCreateWidget(
70444c061aSmrg    String      name,
71444c061aSmrg    WidgetClass widget_class,
72444c061aSmrg    Widget      parent,
73444c061aSmrg    va_list     var,
74444c061aSmrg    int		count)
75444c061aSmrg{
76444c061aSmrg    register Widget         widget;
77444c061aSmrg    XtTypedArgList	    typed_args = NULL;
78444c061aSmrg    Cardinal		    num_args;
79444c061aSmrg
80444c061aSmrg    _XtVaToTypedArgList(var, count, &typed_args, &num_args);
81444c061aSmrg
82444c061aSmrg    widget = _XtCreateWidget(name, widget_class, parent, (ArgList)NULL,
83444c061aSmrg		    (Cardinal)0, typed_args, num_args);
84444c061aSmrg
85444c061aSmrg    if (typed_args != NULL) {
86444c061aSmrg        XtFree((XtPointer)typed_args);
87444c061aSmrg    }
88444c061aSmrg
89444c061aSmrg    return widget;
90444c061aSmrg}
91444c061aSmrg
92444c061aSmrg
93444c061aSmrgWidget
94444c061aSmrgXtVaCreateWidget(
95444c061aSmrg    _Xconst char* name,
96444c061aSmrg    WidgetClass widget_class,
97444c061aSmrg    Widget parent,
98444c061aSmrg    ...)
99444c061aSmrg{
100444c061aSmrg    va_list                 var;
101444c061aSmrg    register Widget         widget;
102444c061aSmrg    int			    total_count, typed_count;
103444c061aSmrg    WIDGET_TO_APPCON(parent);
104444c061aSmrg
105444c061aSmrg    LOCK_APP(app);
106444c061aSmrg    va_start(var,parent);
107444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
108444c061aSmrg    va_end(var);
109444c061aSmrg
110444c061aSmrg    va_start(var,parent);
111444c061aSmrg    widget = _XtVaCreateWidget((String)name, widget_class, parent, var,
112444c061aSmrg				total_count);
113444c061aSmrg    va_end(var);
114444c061aSmrg    UNLOCK_APP(app);
115444c061aSmrg    return widget;
116444c061aSmrg}
117444c061aSmrg
118444c061aSmrg
119444c061aSmrgWidget
120444c061aSmrgXtVaCreateManagedWidget(
121444c061aSmrg    _Xconst char* name,
122444c061aSmrg    WidgetClass widget_class,
123444c061aSmrg    Widget parent,
124444c061aSmrg    ...)
125444c061aSmrg{
126444c061aSmrg    va_list		var;
127444c061aSmrg    register Widget	widget;
128444c061aSmrg    int			total_count, typed_count;
129444c061aSmrg    WIDGET_TO_APPCON(parent);
130444c061aSmrg
131444c061aSmrg    LOCK_APP(app);
132444c061aSmrg    va_start(var,parent);
133444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
134444c061aSmrg    va_end(var);
135444c061aSmrg
136444c061aSmrg    va_start(var,parent);
137444c061aSmrg    widget = _XtVaCreateWidget((String)name, widget_class, parent, var,
138444c061aSmrg				total_count);
139444c061aSmrg    XtManageChild(widget);
140444c061aSmrg    va_end(var);
141444c061aSmrg    UNLOCK_APP(app);
142444c061aSmrg    return widget;
143444c061aSmrg}
144444c061aSmrg
145444c061aSmrg
146444c061aSmrgWidget
147444c061aSmrgXtVaAppCreateShell(
148444c061aSmrg    _Xconst char* name,
149444c061aSmrg    _Xconst char* class,
150444c061aSmrg    WidgetClass widget_class,
151444c061aSmrg    Display* display,
152444c061aSmrg    ...)
153444c061aSmrg{
154444c061aSmrg    va_list                 var;
155444c061aSmrg    register Widget         widget;
156444c061aSmrg    XtTypedArgList          typed_args = NULL;
157444c061aSmrg    Cardinal                num_args;
158444c061aSmrg    int			    total_count, typed_count;
159444c061aSmrg    DPY_TO_APPCON(display);
160444c061aSmrg
161444c061aSmrg    LOCK_APP(app);
162444c061aSmrg    va_start(var,display);
163444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
164444c061aSmrg    va_end(var);
165444c061aSmrg
166444c061aSmrg    va_start(var,display);
167444c061aSmrg
168444c061aSmrg    _XtVaToTypedArgList(var, total_count, &typed_args, &num_args);
169444c061aSmrg    widget = _XtAppCreateShell((String)name, (String)class, widget_class,
170444c061aSmrg		display, (ArgList)NULL, (Cardinal)0, typed_args, num_args);
171444c061aSmrg    if (typed_args != NULL) {
172444c061aSmrg	XtFree((XtPointer)typed_args);
173444c061aSmrg    }
174444c061aSmrg
175444c061aSmrg    va_end(var);
176444c061aSmrg    UNLOCK_APP(app);
177444c061aSmrg    return widget;
178444c061aSmrg}
179444c061aSmrg
180444c061aSmrg
181444c061aSmrgWidget
182444c061aSmrgXtVaCreatePopupShell(
183444c061aSmrg    _Xconst char* name,
184444c061aSmrg    WidgetClass widget_class,
185444c061aSmrg    Widget parent,
186444c061aSmrg    ...)
187444c061aSmrg{
188444c061aSmrg    va_list                 var;
189444c061aSmrg    register Widget         widget;
190444c061aSmrg    XtTypedArgList          typed_args = NULL;
191444c061aSmrg    Cardinal                num_args;
192444c061aSmrg    int			    total_count, typed_count;
193444c061aSmrg    WIDGET_TO_APPCON(parent);
194444c061aSmrg
195444c061aSmrg    LOCK_APP(app);
196444c061aSmrg    va_start(var,parent);
197444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
198444c061aSmrg    va_end(var);
199444c061aSmrg
200444c061aSmrg    va_start(var,parent);
201444c061aSmrg
202444c061aSmrg    _XtVaToTypedArgList(var, total_count, &typed_args, &num_args);
203444c061aSmrg    widget = _XtCreatePopupShell((String)name, widget_class, parent,
204444c061aSmrg		(ArgList)NULL, (Cardinal)0, typed_args, num_args);
205444c061aSmrg    if (typed_args != NULL) {
206444c061aSmrg	XtFree((XtPointer)typed_args);
207444c061aSmrg    }
208444c061aSmrg
209444c061aSmrg    va_end(var);
210444c061aSmrg    UNLOCK_APP(app);
211444c061aSmrg    return widget;
212444c061aSmrg}
213444c061aSmrg
214444c061aSmrgvoid
215444c061aSmrgXtVaSetValues(Widget widget, ...)
216444c061aSmrg{
217444c061aSmrg    va_list                 var;
218444c061aSmrg    ArgList                 args = NULL;
219444c061aSmrg    Cardinal                num_args;
220444c061aSmrg    int			    total_count, typed_count;
221444c061aSmrg    WIDGET_TO_APPCON(widget);
222444c061aSmrg
223444c061aSmrg    LOCK_APP(app);
224444c061aSmrg    va_start(var,widget);
225444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
226444c061aSmrg    va_end(var);
227444c061aSmrg
228444c061aSmrg    va_start(var,widget);
229444c061aSmrg
230444c061aSmrg    _XtVaToArgList(widget, var, total_count, &args, &num_args);
231444c061aSmrg    XtSetValues(widget, args, num_args);
232444c061aSmrg    _XtFreeArgList(args, total_count, typed_count);
233444c061aSmrg
234444c061aSmrg    UNLOCK_APP(app);
235444c061aSmrg    va_end(var);
236444c061aSmrg}
237444c061aSmrg
238444c061aSmrg
239444c061aSmrgvoid
240444c061aSmrgXtVaSetSubvalues(XtPointer base, XtResourceList resources, Cardinal num_resources, ...)
241444c061aSmrg{
242444c061aSmrg    va_list	var;
243444c061aSmrg    ArgList    	args;
244444c061aSmrg    Cardinal   	num_args;
245444c061aSmrg    int		total_count, typed_count;
246444c061aSmrg
247444c061aSmrg    va_start(var, num_resources);
248444c061aSmrg    _XtCountVaList(var, &total_count, &typed_count);
249444c061aSmrg    va_end(var);
250444c061aSmrg
251444c061aSmrg    if (typed_count != 0) {
252444c061aSmrg	XtWarning("XtVaTypedArg is not valid in XtVaSetSubvalues()\n");
253444c061aSmrg    }
254444c061aSmrg
255444c061aSmrg    va_start(var, num_resources);
256444c061aSmrg    _XtVaToArgList((Widget)NULL, var, total_count, &args, &num_args);
257444c061aSmrg
258444c061aSmrg    XtSetSubvalues(base, resources, num_resources, args, num_args);
259444c061aSmrg
260444c061aSmrg    if (num_args != 0) {
261444c061aSmrg        XtFree((XtPointer)args);
262444c061aSmrg    }
263444c061aSmrg
264444c061aSmrg    va_end(var);
265444c061aSmrg}
266444c061aSmrg
267444c061aSmrgWidget
268444c061aSmrg_XtVaOpenApplication(
269444c061aSmrg    XtAppContext *app_context_return,
270444c061aSmrg    _Xconst char* application_class,
271444c061aSmrg    XrmOptionDescList options,
272444c061aSmrg    Cardinal num_options,
273444c061aSmrg    int *argc_in_out,
274444c061aSmrg    String *argv_in_out,
275444c061aSmrg    String *fallback_resources,
276444c061aSmrg    WidgetClass widget_class,
277444c061aSmrg    va_list var_args)
278444c061aSmrg{
279444c061aSmrg    XtAppContext app_con;
280444c061aSmrg    Display * dpy;
281444c061aSmrg    register int saved_argc = *argc_in_out;
282444c061aSmrg    Widget root;
283444c061aSmrg    String attr;
284444c061aSmrg    int count = 0;
285444c061aSmrg    XtTypedArgList typed_args;
286444c061aSmrg
287444c061aSmrg    XtToolkitInitialize(); /* cannot be moved into _XtAppInit */
288444c061aSmrg
289444c061aSmrg    dpy = _XtAppInit(&app_con, (String)application_class, options, num_options,
290444c061aSmrg		     argc_in_out, &argv_in_out, fallback_resources);
291444c061aSmrg
292444c061aSmrg    typed_args = (XtTypedArgList) __XtMalloc((unsigned) sizeof(XtTypedArg));
293444c061aSmrg    attr = va_arg (var_args, String);
294444c061aSmrg    for(; attr != NULL; attr = va_arg (var_args, String)) {
295444c061aSmrg        if (strcmp(attr, XtVaTypedArg) == 0) {
296444c061aSmrg            typed_args[count].name = va_arg(var_args, String);
297444c061aSmrg            typed_args[count].type = va_arg(var_args, String);
298444c061aSmrg            typed_args[count].value = va_arg(var_args, XtArgVal);
299444c061aSmrg            typed_args[count].size = va_arg(var_args, int);
300444c061aSmrg        } else {
301444c061aSmrg	    typed_args[count].name = attr;
302444c061aSmrg	    typed_args[count].type = NULL;
303444c061aSmrg	    typed_args[count].value = va_arg(var_args, XtArgVal);
304444c061aSmrg	    typed_args[count].size = 0;
305444c061aSmrg        }
306444c061aSmrg	count++;
307444c061aSmrg	typed_args = (XtTypedArgList)
308444c061aSmrg	    XtRealloc((char *) typed_args,
309444c061aSmrg		       (unsigned) (count + 1) * sizeof(XtTypedArg));
310444c061aSmrg    }
311444c061aSmrg    typed_args[count].name = NULL;
312444c061aSmrg
313444c061aSmrg    va_end (var_args);
314444c061aSmrg
315444c061aSmrg    root =
316444c061aSmrg	XtVaAppCreateShell( NULL, application_class,
317444c061aSmrg			    widget_class, dpy,
318444c061aSmrg			    XtNscreen, (XtArgVal)DefaultScreenOfDisplay(dpy),
319444c061aSmrg			    XtNargc, (XtArgVal)saved_argc,
320444c061aSmrg			    XtNargv, (XtArgVal)argv_in_out,
321444c061aSmrg			    XtVaNestedList, (XtVarArgsList)typed_args,
322444c061aSmrg			    NULL );
323444c061aSmrg
324444c061aSmrg    if (app_context_return != NULL)
325444c061aSmrg	*app_context_return = app_con;
326444c061aSmrg
327444c061aSmrg    XtFree((XtPointer)typed_args);
328444c061aSmrg    XtFree((XtPointer)argv_in_out);
329444c061aSmrg    return(root);
330444c061aSmrg}
331444c061aSmrg
332444c061aSmrgWidget
333444c061aSmrg_XtVaAppInitialize(
334444c061aSmrg    XtAppContext *app_context_return,
335444c061aSmrg    _Xconst char* application_class,
336444c061aSmrg    XrmOptionDescList options,
337444c061aSmrg    Cardinal num_options,
338444c061aSmrg    int *argc_in_out,
339444c061aSmrg    String *argv_in_out,
340444c061aSmrg    String *fallback_resources,
341444c061aSmrg    va_list var_args)
342444c061aSmrg{
343444c061aSmrg    return _XtVaOpenApplication(app_context_return, application_class,
344444c061aSmrg				options, num_options,
345444c061aSmrg				argc_in_out, argv_in_out, fallback_resources,
346444c061aSmrg				applicationShellWidgetClass, var_args);
347444c061aSmrg}
348444c061aSmrg
349444c061aSmrg#if !((defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE))
350444c061aSmrg
351444c061aSmrg/*
352444c061aSmrg * If not used as a shared library, we still need a front end to
353444c061aSmrg * _XtVaOpenApplication and to _XtVaAppInitialize.
354444c061aSmrg */
355444c061aSmrg
356444c061aSmrgWidget
357444c061aSmrgXtVaOpenApplication(
358444c061aSmrg    XtAppContext *app_context_return,
359444c061aSmrg    _Xconst char* application_class,
360444c061aSmrg    XrmOptionDescList options,
361444c061aSmrg    Cardinal num_options,
362444c061aSmrg    int *argc_in_out,
363444c061aSmrg    String *argv_in_out,
364444c061aSmrg    String *fallback_resources,
365444c061aSmrg    WidgetClass widget_class,
366444c061aSmrg    ...)
367444c061aSmrg{
368444c061aSmrg    va_list	var;
369444c061aSmrg
370444c061aSmrg    va_start(var, widget_class);
371444c061aSmrg    return _XtVaOpenApplication(app_context_return, (String)application_class,
372444c061aSmrg				options, num_options, argc_in_out, argv_in_out,
373444c061aSmrg				fallback_resources, widget_class, var);
374444c061aSmrg}
375444c061aSmrg
376444c061aSmrgWidget
377444c061aSmrgXtVaAppInitialize(
378444c061aSmrg    XtAppContext *app_context_return,
379444c061aSmrg    _Xconst char* application_class,
380444c061aSmrg    XrmOptionDescList options,
381444c061aSmrg    Cardinal num_options,
382444c061aSmrg    int *argc_in_out,
383444c061aSmrg    String *argv_in_out,
384444c061aSmrg    String *fallback_resources,
385444c061aSmrg    ...)
386444c061aSmrg{
387444c061aSmrg    va_list	var;
388444c061aSmrg
389444c061aSmrg    va_start(var, fallback_resources);
390444c061aSmrg    return _XtVaOpenApplication(app_context_return, (String)application_class,
391444c061aSmrg				options, num_options, argc_in_out, argv_in_out,
392444c061aSmrg				fallback_resources,
393444c061aSmrg				applicationShellWidgetClass, var);
394444c061aSmrg}
395444c061aSmrg
396444c061aSmrg#endif /* !((SUNSHLIB || AIXSHLIB) && SHAREDCODE) */
397444c061aSmrg
398