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