Annotation of 43BSDTahoe/new/X/uwm/Iconify.c, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.