Annotation of 43BSD/contrib/X/uwm/MoveOpaque.c, revision 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.