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