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