1dbd550edSchristos /*-
2dbd550edSchristos * Copyright (c) 1996
3dbd550edSchristos * Rob Zimmermann. All rights reserved.
4dbd550edSchristos * Copyright (c) 1996
5dbd550edSchristos * Keith Bostic. All rights reserved.
6dbd550edSchristos *
7dbd550edSchristos * See the LICENSE file for redistribution information.
8dbd550edSchristos */
9dbd550edSchristos
10dbd550edSchristos #include "config.h"
11dbd550edSchristos
12*2f698edbSchristos #include <sys/cdefs.h>
13*2f698edbSchristos #if 0
14dbd550edSchristos #ifndef lint
15dbd550edSchristos static const char sccsid[] = "Id: m_util.c,v 8.12 2003/11/05 17:10:00 skimo Exp (Berkeley) Date: 2003/11/05 17:10:00 ";
16dbd550edSchristos #endif /* not lint */
17*2f698edbSchristos #else
18*2f698edbSchristos __RCSID("$NetBSD: m_util.c,v 1.2 2014/01/26 21:43:45 christos Exp $");
19*2f698edbSchristos #endif
20dbd550edSchristos
21dbd550edSchristos #include <sys/types.h>
22dbd550edSchristos #include <sys/queue.h>
23dbd550edSchristos
24dbd550edSchristos #include <X11/Intrinsic.h>
25dbd550edSchristos #include <X11/StringDefs.h>
26dbd550edSchristos #include <X11/Shell.h>
27dbd550edSchristos #include <X11/Xatom.h>
28dbd550edSchristos
29dbd550edSchristos #include <bitstring.h>
30dbd550edSchristos #include <stdio.h>
31dbd550edSchristos #include <string.h>
32dbd550edSchristos
33dbd550edSchristos #undef LOCK_SUCCESS
34dbd550edSchristos #include "../common/common.h"
35dbd550edSchristos #include "../ipc/ip.h"
36dbd550edSchristos #include "m_motif.h"
37dbd550edSchristos
38dbd550edSchristos
39dbd550edSchristos /* Widget hierarchy routines
40dbd550edSchristos *
41dbd550edSchristos * void XutShowWidgetTree( FILE *fp, Widget root, int indent )
42dbd550edSchristos * prints the widgets and sub-widgets beneath the named root widget
43dbd550edSchristos */
44dbd550edSchristos #ifdef DEBUG
45dbd550edSchristos #if defined(__STDC__)
XutShowWidgetTree(FILE * fp,Widget root,int indent)46dbd550edSchristos void XutShowWidgetTree( FILE *fp, Widget root, int indent )
47dbd550edSchristos #else
48dbd550edSchristos void XutShowWidgetTree( fp, root, indent )
49dbd550edSchristos FILE *fp;
50dbd550edSchristos Widget root;
51dbd550edSchristos int indent;
52dbd550edSchristos #endif
53dbd550edSchristos {
54dbd550edSchristos #if ! defined(DECWINDOWS)
55dbd550edSchristos WidgetList l, l2;
56dbd550edSchristos int i, count = 0;
57dbd550edSchristos
58dbd550edSchristos /* print where we are right now */
59dbd550edSchristos fprintf( fp,
60dbd550edSchristos "%*.*swidget => 0x%x name => \"%s\"\n\r",
61dbd550edSchristos indent,
62dbd550edSchristos indent,
63dbd550edSchristos "",
64dbd550edSchristos root,
65dbd550edSchristos XtName(root) );
66dbd550edSchristos
67dbd550edSchristos /* get the correct widget values */
68dbd550edSchristos XtVaGetValues( root, XtNchildren, &l, 0 );
69dbd550edSchristos XtVaGetValues( root, XtNchildren, &l2, 0 );
70dbd550edSchristos XtVaGetValues( root, XtNnumChildren, &count, 0 );
71dbd550edSchristos
72dbd550edSchristos /* print the sub-widgets */
73dbd550edSchristos for ( i=0; i<count; i++ ) {
74dbd550edSchristos XutShowWidgetTree( fp, l[i], indent+4 );
75dbd550edSchristos }
76dbd550edSchristos
77dbd550edSchristos /* tidy up if this thing contained children */
78dbd550edSchristos if ( count > 0 ) {
79dbd550edSchristos /* we may or may not have to free the children */
80dbd550edSchristos if ( l != l2 ) {
81dbd550edSchristos XtFree( (char *) l );
82dbd550edSchristos XtFree( (char *) l2 );
83dbd550edSchristos }
84dbd550edSchristos }
85dbd550edSchristos #endif
86dbd550edSchristos }
87dbd550edSchristos #endif
88dbd550edSchristos
89dbd550edSchristos
90dbd550edSchristos /* Utilities for converting X resources...
91dbd550edSchristos *
92dbd550edSchristos * __XutConvertResources( Widget, String root, XutResource *, int count )
93dbd550edSchristos * The resource block is loaded with converted values
94dbd550edSchristos * If the X resource does not exist, no change is made to the value
95dbd550edSchristos * 'root' should be the application name.
96dbd550edSchristos *
97dbd550edSchristos * PUBLIC: void __XutConvertResources __P((Widget, String, XutResource *, int));
98dbd550edSchristos */
__XutConvertResources(Widget wid,String root,XutResource * resources,int count)99dbd550edSchristos void __XutConvertResources(Widget wid, String root, XutResource *resources, int count)
100dbd550edSchristos {
101dbd550edSchristos int i;
102dbd550edSchristos XrmValue from, to;
103dbd550edSchristos String kind;
104dbd550edSchristos Boolean success = True;
105dbd550edSchristos
106dbd550edSchristos /* for each resource */
107dbd550edSchristos for (i=0; i<count; i++) {
108dbd550edSchristos
109dbd550edSchristos /* is there a value in the database? */
110dbd550edSchristos from.addr = XGetDefault( XtDisplay(wid), root, resources[i].name );
111dbd550edSchristos if ( from.addr == NULL || *from.addr == '\0' )
112dbd550edSchristos continue;
113dbd550edSchristos
114dbd550edSchristos /* load common parameters */
115dbd550edSchristos from.size = strlen( from.addr );
116dbd550edSchristos to.addr = resources[i].value;
117dbd550edSchristos
118dbd550edSchristos /* load type-specific parameters */
119dbd550edSchristos switch ( resources[i].kind ) {
120dbd550edSchristos case XutRKinteger:
121dbd550edSchristos to.size = sizeof(int);
122dbd550edSchristos kind = XtRInt;
123dbd550edSchristos break;
124dbd550edSchristos
125dbd550edSchristos case XutRKboolean:
126dbd550edSchristos /* String to Boolean */
127dbd550edSchristos to.size = sizeof(Boolean);
128dbd550edSchristos kind = XtRBoolean;
129dbd550edSchristos break;
130dbd550edSchristos
131dbd550edSchristos case XutRKfont:
132dbd550edSchristos /* String to Font structure */
133dbd550edSchristos to.size = sizeof(XFontStruct *);
134dbd550edSchristos kind = XtRFontStruct;
135dbd550edSchristos break;
136dbd550edSchristos
137dbd550edSchristos case XutRKpixelBackup:
138dbd550edSchristos /* String to Pixel backup algorithm */
139dbd550edSchristos if ( success ) continue;
140dbd550edSchristos /* FALL through */
141dbd550edSchristos
142dbd550edSchristos case XutRKpixel:
143dbd550edSchristos /* String to Pixel */
144dbd550edSchristos to.size = sizeof(Pixel);
145dbd550edSchristos kind = XtRPixel;
146dbd550edSchristos break;
147dbd550edSchristos
148dbd550edSchristos case XutRKcursor:
149dbd550edSchristos /* String to Cursor */
150dbd550edSchristos to.size = sizeof(int);
151dbd550edSchristos kind = XtRCursor;
152dbd550edSchristos break;
153dbd550edSchristos
154dbd550edSchristos default:
155dbd550edSchristos return;
156dbd550edSchristos }
157dbd550edSchristos
158dbd550edSchristos /* call the converter */
159dbd550edSchristos success = XtConvertAndStore( wid, XtRString, &from, kind, &to );
160dbd550edSchristos }
161dbd550edSchristos }
162