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