1: #ifndef lint
   2: static char *rcsid_Iconify_c = "$Header: Iconify.c,v 10.4 86/02/01 16:22:58 tony Rel $";
   3: #endif	lint
   4: 
   5: /************************************************************************
   6:  *									*
   7:  *			Copyright (c) 1986 by				*
   8:  *		Digital Equipment Corporation, Maynard, MA		*
   9:  *		         All Rights Reserved.				*
  10:  *									*
  11:  *	Permission to use, copy, modify, and distribute this software	*
  12:  *	and its documentation is hereby granted only to licensees of 	*
  13:  *	The Regents of the University of California pursuant to their	*
  14:  *	license agreement for the Berkeley Software Distribution 	*
  15:  *	provided that the following appears on all copies.		*
  16:  *									*
  17:  *            "LICENSED FROM DIGITAL EQUIPMENT CORPORATION		*
  18:  *                      COPYRIGHT (C) 1986				*
  19:  *                 DIGITAL EQUIPMENT CORPORATION			*
  20:  *                         MAYNARD, MA					*
  21:  *                     ALL RIGHTS RESERVED.				*
  22:  *									*
  23:  *      THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT	*
  24:  *	NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL	*
  25:  *	EQUIPMENT CORPORATION.  DIGITAL MAKES NO REPRESENTATIONS	*
  26:  *	ABOUT SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE. IT IS	*
  27:  *	SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.		*
  28:  *									*
  29:  * 	IF THE UNIVERSITY OF CALIFORNIA OR ITS LICENSEES MODIFY 	*
  30:  *	THE SOFTWARE IN A MANNER CREATING DERIVATIVE COPYRIGHT 		*
  31:  *	RIGHTS APPROPRIATE COPYRIGHT LEGENDS MAY BE PLACED ON THE	*
  32:  *	DERIVATIVE WORK IN ADDITION TO THAT SET FORTH ABOVE."		*
  33:  *									*
  34:  ************************************************************************/
  35: 
  36: 
  37: /*
  38:  * MODIFICATION HISTORY
  39:  *
  40:  * 000 -- M. Gancarz, DEC Ultrix Engineering Group
  41:  */
  42: 
  43: #ifndef lint
  44: static char *sccsid = "@(#)Iconify.c	3.9	1/29/86";
  45: #endif
  46: 
  47: #include "uwm.h"
  48: 
  49: Bool Iconify(window, mask, button, x, y)
  50: Window window;                          /* Event window. */
  51: int mask;                               /* Button/key mask. */
  52: short button;                           /* Button event detail. */
  53: int x, y;                               /* Event mouse position. */
  54: {
  55:     register WindowInfo window_info;    /* Event window info. */
  56:     register WindowInfo assoc_info; /* Associated window info. */
  57:     char *name;             /* Event window name. */
  58:     int mse_x, mse_y;           /* Mouse X and Y coordinates. */
  59:     int icon_x, icon_y;         /* Icon U. L. X and Y coordinates. */
  60:     int icon_w, icon_h;         /* Icon width and height. */
  61:     int icon_bdr;           /* Icon border width. */
  62:     int num_vectors;            /* Number of vectors in zap buffer. */
  63:     Window assoc;           /* Associated window. */
  64:     Window sub_win;         /* Mouse position sub-window. */
  65:     XButtonEvent button_event;      /* Button event packet. */
  66:     Vertex zap[MAX_ZAP_VECTORS];    /* Zap effect vertex buffer. */
  67:     Bool iconifying;            /* Are we iconifying? */
  68: 
  69:     /*
  70:      * Do not try to iconify the root window.
  71:      */
  72:     if (window == RootWindow)
  73:         return(FALSE);
  74: 
  75:     /*
  76:      * Clear the vector buffer.
  77:      */
  78:     if (Zap) bzero(zap, sizeof(zap));
  79: 
  80:     /*
  81:      * Get the mouse cursor position in case we must put a new
  82:      * icon there.
  83:      */
  84:     XQueryMouse(RootWindow, &mse_x, &mse_y, &sub_win);
  85: 
  86:     /*
  87:      * Get info on the event window.
  88:      */
  89:     status = XQueryWindow(window, &window_info);
  90:     if (status == FAILURE) return(FALSE);
  91: 
  92:     /*
  93:      * If the event window is an icon, de-iconify it and return.
  94:      */
  95:     if (window_info.type == IsIcon) {
  96: 
  97:         assoc = window_info.assoc_wind;
  98: 
  99:         /*
 100:          * Gather info about the assoc window.
 101:          */
 102:         status = XQueryWindow(assoc, &assoc_info);
 103:         if (status == FAILURE) return(FALSE);
 104: 
 105:         /*
 106:          * Store the zap vector buffer.
 107:          */
 108:         if (Zap) {
 109:                 num_vectors = StoreZap(
 110:                     zap,
 111:                     assoc_info.x - 1,
 112:                     assoc_info.y - 1,
 113:                     assoc_info.x + assoc_info.width +
 114:                         (assoc_info.bdrwidth << 1),
 115:                     assoc_info.y + assoc_info.height +
 116:                         (assoc_info.bdrwidth << 1),
 117:                     window_info.x - 1,
 118:                     window_info.y - 1,
 119:                     window_info.x + window_info.width +
 120:                         (window_info.bdrwidth << 1),
 121:                     window_info.y + window_info.height +
 122:                         (window_info.bdrwidth << 1));
 123:         }
 124: 
 125:         /*
 126:          * Map the window and synchronize.
 127:          */
 128:         XMapWindow(assoc);
 129: 
 130:             if (Zap) {
 131:                 /*
 132:                  * Draw the zap lines.
 133:                  */
 134:                 DrawZap();
 135:             }
 136: 
 137:         /*
 138:          * Unmap the icon window.
 139:          */
 140:         XUnmapWindow(window);
 141: 
 142:         return(FALSE);
 143:     }
 144:     else {
 145:         /*
 146:          * If event window doesn't already have an icon window,
 147:          * make one for it.
 148:          */
 149:         if (window_info.assoc_wind == 0) {
 150: 
 151:             /*
 152:              * Set the icon border width.
 153:              */
 154:             icon_bdr = IBorderWidth;
 155: 
 156:             /*
 157:              * Determine the size of the icon window.
 158:              */
 159:             status = XFetchName(window, &name);
 160:             if (status == FAILURE) return(FALSE);
 161:             icon_h = IFontInfo.height + (VIconPad << 1);
 162:             icon_w = XQueryWidth(name, IFont);
 163:             if (icon_w == 0)
 164:                 icon_w = icon_h;
 165:             else icon_w += (HIconPad << 1);
 166: 
 167:             /*
 168:              * Determine the coordinates of the icon window;
 169:              * normalize so that we don't lose the icon off the
 170:              * edge of the screen.
 171:              */
 172:             icon_x = mse_x - (icon_w >> 1) + 1;
 173:             if (icon_x < 0) icon_x = 0;
 174:             icon_y = mse_y - (icon_h >> 1) + 1;
 175:             if (icon_y < 0) icon_y = 0;
 176:             if ((icon_x - 1 + icon_w + (icon_bdr << 1)) > ScreenWidth) {
 177:                 icon_x = ScreenWidth - icon_w - (icon_bdr << 1) + 1;
 178:             }
 179:             if ((icon_y - 1 + icon_h + (icon_bdr << 1)) > ScreenHeight) {
 180:                 icon_y = ScreenHeight - icon_h - (icon_bdr << 1) + 1;
 181:             }
 182: 
 183: 
 184:             /*
 185:              * Create the icon window.
 186:              */
 187:             assoc = XCreateWindow(
 188:                 RootWindow,
 189:                 icon_x, icon_y,
 190:                 icon_w, icon_h,
 191:                 icon_bdr,
 192:                 IBorder, IBackground
 193:             );
 194:             if (assoc == FAILURE) return(FALSE);
 195: 
 196:             /*
 197:              * Use the text cursor whenever the mouse is in the icon window.
 198:              */
 199:             XDefineCursor(assoc, TextCursor);
 200: 
 201:             /*
 202:              * Select "key pressed", "window exposure" and "unmap window"
 203:              * events for the icon window.
 204:              */
 205:             XSelectInput(assoc, (KeyPressed | ExposeWindow | UnmapWindow));
 206: 
 207:             /*
 208:              * Set the event window's icon window to be the new icon window.
 209:              */
 210:             XSetIconWindow(window, assoc);
 211:         }
 212:         else {
 213:             /*
 214:              * If we already have an icon window all we have to do is
 215:              * map it.
 216:              */
 217:             assoc = window_info.assoc_wind;
 218:             status = XQueryWindow(assoc, &assoc_info);
 219:             if (status == FAILURE) return(FALSE);
 220:             icon_x = assoc_info.x;
 221:             icon_y = assoc_info.y;
 222:             icon_w = assoc_info.width;
 223:             icon_h = assoc_info.height;
 224:         }
 225: 
 226:         if (Zap) {
 227:         /*
 228:          * Store the zap effect vectors.
 229:          */
 230:         num_vectors = StoreZap(
 231:             zap,
 232:             window_info.x - 1,
 233:             window_info.y - 1,
 234:             window_info.x + window_info.width + (window_info.bdrwidth << 1),
 235:             window_info.y + window_info.height + (window_info.bdrwidth << 1),
 236:             icon_x - 1,
 237:             icon_y - 1,
 238:             icon_x + icon_w + (icon_bdr << 1),
 239:             icon_y + icon_h + (icon_bdr << 1)
 240:         );
 241:         }
 242: 
 243:         /*
 244:          * Map the icon window.
 245:          */
 246:         XMapWindow(assoc);
 247: 
 248:         if (Zap) {
 249:         /*
 250:          * Draw zap lines from the window to its icon.
 251:          */
 252:             DrawZap();
 253:             DrawZap();
 254:         }
 255: 
 256:         /*
 257:          * Unmap the event window.
 258:          */
 259:         XUnmapWindow(window);
 260:     }
 261:     return(FALSE);
 262: }

Defined functions

Iconify defined in line 49; used 1 times

Defined variables

rcsid_Iconify_c defined in line 2; never used
sccsid defined in line 44; never used
Last modified: 1986-02-01
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1128
Valid CSS Valid XHTML 1.0 Strict