|
|
1.1 ! root 1: #include "copyright.h" ! 2: ! 3: /* $Header: XGetHints.c,v 11.16 87/09/09 15:42:48 swick Exp $ */ ! 4: ! 5: /*********************************************************** ! 6: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, ! 7: and the Massachusetts Institute of Technology, Cambridge, Massachusetts. ! 8: ! 9: All Rights Reserved ! 10: ! 11: Permission to use, copy, modify, and distribute this software and its ! 12: documentation for any purpose and without fee is hereby granted, ! 13: provided that the above copyright notice appear in all copies and that ! 14: both that copyright notice and this permission notice appear in ! 15: supporting documentation, and that the names of Digital or MIT not be ! 16: used in advertising or publicity pertaining to distribution of the ! 17: software without specific, written prior permission. ! 18: ! 19: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ! 20: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ! 21: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ! 22: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ! 23: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ! 24: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ! 25: SOFTWARE. ! 26: ! 27: ******************************************************************/ ! 28: ! 29: #include <stdio.h> ! 30: #include "Xlibint.h" ! 31: #include "Xutil.h" ! 32: #include "Xatomtype.h" ! 33: #include "Xatom.h" ! 34: ! 35: Status XGetSizeHints (dpy, w, hints, property) ! 36: Display *dpy; ! 37: Window w; ! 38: XSizeHints *hints; ! 39: Atom property; ! 40: { ! 41: xPropSizeHints *prop = NULL; ! 42: Atom actual_type; ! 43: int actual_format; ! 44: long leftover; ! 45: unsigned long nitems; ! 46: if (XGetWindowProperty(dpy, w, property, 0L, (long)NumPropSizeElements, ! 47: False, XA_WM_SIZE_HINTS, &actual_type, &actual_format, ! 48: &nitems, &leftover, (unsigned char **)&prop) ! 49: != Success) return (0); ! 50: ! 51: if ((actual_type != XA_WM_SIZE_HINTS) || ! 52: (nitems < NumPropSizeElements) || (actual_format != 32)) { ! 53: if (prop != NULL) Xfree ((char *)prop); ! 54: return(0); ! 55: } ! 56: hints->flags = prop->flags; ! 57: hints->x = prop->x; ! 58: hints->y = prop->y; ! 59: hints->width = prop->width; ! 60: hints->height = prop->height; ! 61: hints->min_width = prop->minWidth; ! 62: hints->min_height = prop->minHeight; ! 63: hints->max_width = prop->maxWidth; ! 64: hints->max_height = prop->maxHeight; ! 65: hints->width_inc = prop->widthInc; ! 66: hints->height_inc = prop->heightInc; ! 67: hints->min_aspect.x = prop->minAspectX; ! 68: hints->min_aspect.y = prop->minAspectY; ! 69: hints->max_aspect.x = prop->maxAspectX; ! 70: hints->max_aspect.y = prop->maxAspectY; ! 71: Xfree((char *)prop); ! 72: return(1); ! 73: } ! 74: ! 75: /* ! 76: * must return a pointer to the hint, in malloc'd memory, or routine is not ! 77: * extensible; any use of the caller's memory would cause things to be stepped ! 78: * on. ! 79: */ ! 80: ! 81: XWMHints *XGetWMHints (dpy, w) ! 82: Display *dpy; ! 83: Window w; ! 84: { ! 85: xPropWMHints *prop = NULL; ! 86: register XWMHints *hints; ! 87: Atom actual_type; ! 88: int actual_format; ! 89: long leftover; ! 90: unsigned long nitems; ! 91: if (XGetWindowProperty(dpy, w, XA_WM_HINTS, ! 92: 0L, (long)NumPropWMHintsElements, ! 93: False, XA_WM_HINTS, &actual_type, &actual_format, ! 94: &nitems, &leftover, (unsigned char **)&prop) ! 95: != Success) return (NULL); ! 96: ! 97: /* If the property is undefined on the window, return null pointer. */ ! 98: ! 99: if ((actual_type != XA_WM_HINTS) || ! 100: (nitems < NumPropWMHintsElements) || (actual_format != 32)) { ! 101: if (prop != NULL) Xfree ((char *)prop); ! 102: return(NULL); ! 103: } ! 104: /* static copies not allowed in library, due to reentrancy constraint*/ ! 105: hints = (XWMHints *) Xcalloc (1, (unsigned) sizeof(XWMHints)); ! 106: hints->flags = prop->flags; ! 107: hints->input = prop->input; ! 108: hints->initial_state = prop->initialState; ! 109: hints->icon_pixmap = prop->iconPixmap; ! 110: hints->icon_window = prop->iconWindow; ! 111: hints->icon_x = prop->iconX; ! 112: hints->icon_y = prop->iconY; ! 113: hints->icon_mask = prop->iconMask; ! 114: hints->window_group = prop->windowGroup; ! 115: Xfree ((char *)prop); ! 116: return(hints); ! 117: } ! 118: ! 119: Status ! 120: XGetZoomHints (dpy, w, zhints) ! 121: Display *dpy; ! 122: Window w; ! 123: XSizeHints *zhints; ! 124: { ! 125: return (XGetSizeHints(dpy, w, zhints, XA_WM_ZOOM_HINTS)); ! 126: } ! 127: ! 128: Status ! 129: XGetNormalHints (dpy, w, hints) ! 130: Display *dpy; ! 131: Window w; ! 132: XSizeHints *hints; ! 133: { ! 134: return (XGetSizeHints(dpy, w, hints, XA_WM_NORMAL_HINTS)); ! 135: } ! 136: ! 137: ! 138: /* ! 139: * XGetIconSizes reads the property ! 140: * ICONSIZE_ATOM type: ICONSIZE_ATOM format: 32 ! 141: */ ! 142: ! 143: Status XGetIconSizes (dpy, w, size_list, count) ! 144: Display *dpy; ! 145: Window w; /* typically, root */ ! 146: XIconSize **size_list; ! 147: int *count; /* number of items on the list */ ! 148: { ! 149: xPropIconSize *prop = NULL; ! 150: register xPropIconSize *pp; ! 151: register XIconSize *hp, *hints; ! 152: Atom actual_type; ! 153: int actual_format; ! 154: long leftover; ! 155: unsigned long nitems; ! 156: register int i; ! 157: ! 158: if (XGetWindowProperty(dpy, w, XA_WM_ICON_SIZE, 0L, 60L, ! 159: False, XA_WM_ICON_SIZE, &actual_type, &actual_format, ! 160: &nitems, &leftover, (unsigned char **)&prop) ! 161: != Success) return (0); ! 162: ! 163: pp = prop; ! 164: ! 165: if ((actual_type != XA_WM_ICON_SIZE) || ! 166: (nitems < NumPropIconSizeElements) || (actual_format != 32)) { ! 167: if (prop != NULL) Xfree ((char *)prop); ! 168: return(0); ! 169: } ! 170: /* static copies not allowed in library, due to reentrancy constraint*/ ! 171: *count = nitems / NumPropIconSizeElements; ! 172: if (*count < 1) { ! 173: if (prop != NULL) Xfree((char *)prop); ! 174: return(0); ! 175: } ! 176: ! 177: hp = hints = (XIconSize *) ! 178: Xcalloc ((unsigned)*count, (unsigned) sizeof(XIconSize)); ! 179: ! 180: /* march down array putting things into native form */ ! 181: for (i = 0; i < *count; i++) { ! 182: hp->min_width = pp->minWidth; ! 183: hp->min_height = pp->minHeight; ! 184: hp->max_width = pp->maxWidth; ! 185: hp->max_height = pp->maxHeight; ! 186: hp->width_inc = pp->widthInc; ! 187: hp->height_inc = pp->heightInc; ! 188: hp += 1; ! 189: pp += 1; ! 190: } ! 191: *size_list = hints; ! 192: if (prop != NULL) Xfree ((char *)prop); ! 193: return(1); ! 194: ! 195: } ! 196: ! 197: Status ! 198: XGetTransientForHint(dpy, w, propWindow) ! 199: Display *dpy; ! 200: Window w; ! 201: Window *propWindow; ! 202: { ! 203: Atom actual_type; ! 204: int actual_format; ! 205: unsigned long nitems; ! 206: long leftover; ! 207: Window *data = NULL; ! 208: if (XGetWindowProperty(dpy, w, XA_WM_TRANSIENT_FOR, 0L, 1L, False, ! 209: XA_WINDOW, ! 210: &actual_type, ! 211: &actual_format, &nitems, &leftover, (char **) &data) != Success) { ! 212: *propWindow = None; ! 213: return (0); ! 214: } ! 215: if ( (actual_type == XA_WINDOW) && (actual_format == 32) ) { ! 216: *propWindow = *data; ! 217: Xfree( (char *) data); ! 218: return (1); ! 219: } ! 220: *propWindow = None; ! 221: Xfree( (char *) data); ! 222: return(0); ! 223: } ! 224: ! 225: Status ! 226: XGetClassHint(dpy, w, classhint) ! 227: Display *dpy; ! 228: Window w; ! 229: XClassHint *classhint; ! 230: { ! 231: int len_name, len_class; ! 232: Atom actual_type; ! 233: int actual_format; ! 234: unsigned long nitems; ! 235: long leftover; ! 236: unsigned char *data = NULL; ! 237: if (XGetWindowProperty(dpy, w, XA_WM_CLASS, 0L, (long)BUFSIZ, False, ! 238: XA_STRING, ! 239: &actual_type, ! 240: &actual_format, &nitems, &leftover, &data) != Success) { ! 241: classhint = NULL; ! 242: return (0); ! 243: } ! 244: ! 245: if ( (actual_type == XA_STRING) && (actual_format == 8) ) { ! 246: len_name = strlen(data); ! 247: len_class = strlen(data+len_name+1); ! 248: classhint->res_name = Xmalloc(len_name+1); ! 249: strcpy(classhint->res_name, data); ! 250: classhint->res_class = Xmalloc(len_class+1); ! 251: strcpy(classhint->res_class, data+len_name+1); ! 252: Xfree( (char *) data); ! 253: return(Success); ! 254: } ! 255: classhint = NULL; ! 256: Xfree( (char *) data); ! 257: return(0); ! 258: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.