Annotation of 43BSD/contrib/X/uwm/MoveOpaque.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char *rcsid_MoveOpaque_c = "$Header: MoveOpaque.c,v 10.3 86/02/01 16:23:22 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 = "@(#)MoveOpaque.c        1.7     1/24/86";
                     45: #endif
                     46: 
                     47: #include "uwm.h"
                     48: 
                     49: Bool MoveOpaque(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:     int prev_x, prev_y;                        /* Previous mouse location. */
                     56:     int cur_x, cur_y;                  /* Current mouse location. */
                     57:     int win_x, win_y;                  /* Current window location. */
                     58:     WindowInfo window_info;            /* Event window information. */
                     59:     Window sub_window;                 /* Query mouse event sub-window. */
                     60:     XButtonEvent button_event;         /* Button event packet. */
                     61: 
                     62:     /*
                     63:      * Do not try to move the root window.
                     64:      */
                     65:     if (window == RootWindow)
                     66:         return(FALSE);
                     67: 
                     68:     /*
                     69:      * Change the cursor.
                     70:      */
                     71:     status = XGrabButton(RootWindow, ArrowCrossCursor, mask, EVENTMASK);
                     72:     if (status == FAILURE)
                     73:         Error("MoveOpaque -> Unable to grab button and change cursor.");
                     74: 
                     75:     /*
                     76:      * Gather info on the event window.
                     77:      */
                     78:     status = XQueryWindow(window, &window_info);
                     79:     if (status == FAILURE) return(FALSE);
                     80: 
                     81:     /*
                     82:      * Initialize movement variables.
                     83:      */
                     84:     prev_x = cur_x = x;
                     85:     prev_y = cur_y = y;
                     86:     win_x = window_info.x;
                     87:     win_y = window_info.y;
                     88: 
                     89:     /*
                     90:      * Main loop.
                     91:      */
                     92:     while (TRUE) {
                     93: 
                     94:        /*
                     95:         * Check to see if we have a change in mouse button status.
                     96:         * This is how we get out of this "while" loop.
                     97:         */
                     98:        if (XPending() && GetButton(&button_event)) {
                     99: 
                    100:            /*
                    101:             * If the button event was something other than the
                    102:              * release of the original button pressed, then move the
                    103:              * window back to where it was originally.
                    104:             */
                    105:             if ((button_event.type != ButtonReleased) ||
                    106:                 ((button_event.detail & ValueMask) != button))
                    107:                 XMoveWindow(window, window_info.x, window_info.y);
                    108: 
                    109:             /*
                    110:              * Reset the cursor and return.
                    111:              */
                    112:             Grab(mask);
                    113:             return(TRUE);
                    114:        }
                    115: 
                    116:         /*
                    117:          * Take care of all the little things that have changed; 
                    118:          * i.e., move the window, if necessary.
                    119:          */
                    120:         XUpdateMouse(RootWindow, &cur_x, &cur_y, &sub_window);
                    121:         if ((cur_x != prev_x) || (cur_y != prev_y)) {
                    122:             win_x += (cur_x - prev_x);
                    123:             win_y += (cur_y - prev_y);
                    124:             XMoveWindow(window, win_x, win_y);
                    125:            prev_x = cur_x;
                    126:            prev_y = cur_y;
                    127:        }
                    128:     }
                    129: }

unix.superglobalmegacorp.com

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