diff options
Diffstat (limited to 'xts5/Xlib13/XChangeActivePointerGrab.m')
-rw-r--r-- | xts5/Xlib13/XChangeActivePointerGrab.m | 404 |
1 files changed, 404 insertions, 0 deletions
diff --git a/xts5/Xlib13/XChangeActivePointerGrab.m b/xts5/Xlib13/XChangeActivePointerGrab.m new file mode 100644 index 00000000..ef38c9d6 --- /dev/null +++ b/xts5/Xlib13/XChangeActivePointerGrab.m @@ -0,0 +1,404 @@ +Copyright (c) 2005 X.Org Foundation L.L.C. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Copyright (c) Applied Testing and Technology, Inc. 1995 +All Rights Reserved. + +>># Project: VSW5 +>># +>># File: xts5/Xlib13/XChangeActivePointerGrab.m +>># +>># Description: +>># Tests for XChangeActivePointerGrab() +>># +>># Modifications: +>># $Log: chngactvpn.m,v $ +>># Revision 1.2 2005-11-03 08:42:38 jmichael +>># clean up all vsw5 paths to use xts5 instead. +>># +>># Revision 1.1.1.2 2005/04/15 14:05:19 anderson +>># Reimport of the base with the legal name in the copyright fixed. +>># +>># Revision 8.0 1998/12/23 23:33:32 mar +>># Branch point for Release 5.0.2 +>># +>># Revision 7.0 1998/10/30 22:55:06 mar +>># Branch point for Release 5.0.2b1 +>># +>># Revision 6.0 1998/03/02 05:24:57 tbr +>># Branch point for Release 5.0.1 +>># +>># Revision 5.0 1998/01/26 03:21:28 tbr +>># Branch point for Release 5.0.1b1 +>># +>># Revision 4.0 1995/12/15 09:08:05 tbr +>># Branch point for Release 5.0.0 +>># +>># Revision 3.1 1995/12/15 01:08:58 andy +>># Prepare for GA Release +>># +/* +Portions of this software are based on Xlib and X Protocol Test Suite. +We have used this material under the terms of its copyright, which grants +free use, subject to the conditions below. Note however that those +portions of this software that are based on the original Test Suite have +been significantly revised and that all such revisions are copyright (c) +1995 Applied Testing and Technology, Inc. Insomuch as the proprietary +revisions cannot be separated from the freely copyable material, the net +result is that use of this software is governed by the ApTest copyright. + +Copyright (c) 1990, 1991 X Consortium + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + +Permission to use, copy, modify, distribute, and sell this software and +its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of UniSoft not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. UniSoft +makes no representations about the suitability of this software for any +purpose. It is provided "as is" without express or implied warranty. +*/ +>>TITLE XChangeActivePointerGrab Xlib13 +void +xname(display, event_mask, cursor, thetime) +Display *display = Dsp; +unsigned int event_mask = PointerMotionMask; +Cursor cursor = None; +Time thetime = CurrentTime; +>>ASSERTION Good A +When the pointer is actively grabbed by the client and the specified time is +not earlier than the last-pointer-grab time nor later than +the current X server time, then a call to xname +changes the specified dynamic parameters. +>>STRATEGY +Create grab_window. +Grab pointer with XGrabPointer using an event_mask of EnterWindowMask. +Check that just enter events are reported. +Call xname to change event_mask to PointerMotionMask. +Verify that now only motion events are reported. +>>CODE +XEvent ev; +Window win; + + (void) warppointer(display, DRW(display), 0, 0); + + win = defwin(display); + + XGrabPointer(display, win, False, EnterWindowMask, GrabModeAsync, + GrabModeAsync, None, None, CurrentTime); + + (void) warppointer(display, win, 0, 0); + (void) warppointer(display, win, 2, 2); + + /* + * This is just a check to see that the grab is behaving as expected. + * delete and return if these fail. We do the same checks + * after the parameters are changed. + */ + if (XCheckMaskEvent(display, EnterWindowMask, &ev)) + CHECK; + else { + delete("No enter event received when checking set up"); + return; + } + if (!XCheckMaskEvent(display, PointerMotionMask, &ev)) + CHECK; + else { + delete("A pointer motion event was received when checking set up"); + return; + } + + (void) warppointer(display, DRW(display), 0, 0); + + XCALL; + + XSync(display, True); /* Flush any remaining event */ + (void) warppointer(display, win, 0, 0); + (void) warppointer(display, win, 2, 2); + if (isdeleted()) + return; + + if (!XCheckMaskEvent(display, EnterWindowMask, &ev)) + CHECK; + else { + report("Event mask was not changed to disallow enter events"); + FAIL; + } + if (XCheckMaskEvent(display, PointerMotionMask, &ev)) + CHECK; + else { + report("Event mask was not changed - no pointer motion event received"); + FAIL; + } + + CHECKPASS(4); +>>ASSERTION Good A +When the specified time is earlier than the last-pointer-grab time +or later than the current X server time, then a call to xname +does not change the parameters. +>>STRATEGY +Create grab_window. +Grab pointer with XGrabPointer using an event_mask of EnterWindowMask. +Use event_mask of PointerMotionMask. +Call xname with time earlier that last pointer grab time. +Verify that enter events are still being reported. + +Call xname with time later than current X server time. +Verify that enter events are still being reported. +>>CODE +XEvent ev; +Window win; +Time t; + + (void) warppointer(display, DRW(display), 0, 0); + + win = defwin(display); + t = gettime(Dsp); + + XGrabPointer(display, win, False, EnterWindowMask, GrabModeAsync, + GrabModeAsync, None, None, t); + + /* Earlier than last-pointer-grab time */ + thetime = t - 12; + XCALL; + + XSync(display, True); /* Flush any event */ + (void) warppointer(display, win, 0, 0); + (void) warppointer(display, win, 2, 2); + if (isdeleted()) + return; + + if (XCheckMaskEvent(display, EnterWindowMask, &ev)) + CHECK; + else { + report("Event mask was changed for time earlier than last-pointer-grab time"); + FAIL; + } + if (!XCheckMaskEvent(display, PointerMotionMask, &ev)) + CHECK; + else { + report("Event mask was changed for time earlier than last-pointer-grab time"); + FAIL; + } + + (void) warppointer(display, DRW(display), 0, 0); + + /* Later than X server time */ + t = gettime(Dsp); + thetime = t + (config.speedfactor+1)*1000000; + XCALL; + + XSync(display, True); /* Flush any event */ + (void) warppointer(display, win, 0, 0); + (void) warppointer(display, win, 2, 2); + if (isdeleted()) + return; + + if (XCheckMaskEvent(display, EnterWindowMask, &ev)) + CHECK; + else { + report("Event mask was changed for time later than X server time"); + FAIL; + } + if (!XCheckMaskEvent(display, PointerMotionMask, &ev)) + CHECK; + else { + report("Event mask was changed for time later than X server time"); + FAIL; + } + + CHECKPASS(4); +>>ASSERTION Good B 3 +A call to xname has no effect on the passive parameters of the function +.F XGrabButton . +>>STRATEGY +Create and map a window. +Create and map another window (curwin) and attach a non-default + cursor (cur) to it. +Select for no events on the window. +Set a passive grab with XGrabButton on that window with owner_events = False, + cursor = None and event_mask = 0. +Clear event queue. +Warp the pointer into the window and around inside it. +Check no events received. +Call xname with event_mask = PointerMotionMask and cursor = cur. +Clear event queue. +Warp the pointer into the window and around inside it. +Check no events received. +If extension available: + Activate grab with simulated button press in window. + Check grab activated. + Warp pointer around in window. + Check no events received. + Check cursor is not equal to that of curwin. + Call xname with event_mask = PointerMotionMask and cursor = cur. + Warp pointer around in window. + Check MotionNotify events received. + Check cursor is now equal to that of curwin. + Release all buttons, hence grab. +else + Issue message and report untested. +>>EXTERN +/* check to see if pointer is grabbed. Use existing win and another client */ +/* Depending on owner_events in xname or when setting grab may cause + * events to appear on grabbing clients event queue. Before checking for + * events in the queue the grabbing client should have flushed any junk + * left by this function. + */ +static int pgrabbed(win) +Window win; +{ + PointerPlace *p; + XEvent ev; + Display *client2 = opendisplay(); + + XSelectInput(client2, win, PointerMotionMask); + XSync(client2, True); + p = warppointer(client2, win, 1,1); + (void) warppointer(client2, win, 10,10); + (void) warppointer(client2, win, 1,1); + (void) warppointer(client2, p->oroot, p->ox, p->oy); + return (!getevent(client2, &ev)); +} +>>CODE +Window win; +Window curwin; +XEvent ev; +int n; +Cursor cur; + + win = defwin(display); + curwin = defwin(display); + cur = makecur2(display); + XDefineCursor(display, curwin, cur); + XSelectInput(display, win, 0L); + XGrabButton(display, AnyButton, 0, win, False, 0, GrabModeAsync, + GrabModeAsync, None, None); + if (isdeleted()) { + delete("Failed to set passive button grab."); + return; + } else + CHECK; + XSync(display, True); + (void) warppointer(display, win, 1,1); + (void) warppointer(display, win, 10,10); + (void) warppointer(display, win, 1,1); + if (n=getevent(display, &ev)) { + delete("Unexpectedly received %d events, first was type %s.", + n, eventname(ev.type)); + return; + } else + CHECK; + event_mask = PointerMotionMask; + cursor = cur; + XCALL; + XSync(display, True); + (void) warppointer(display, win, 1,1); + (void) warppointer(display, win, 10,10); + (void) warppointer(display, win, 1,1); + if (n=getevent(display, &ev)) { + report("event_mask changed passive grab, received %d events, first was type %s.", + n, eventname(ev.type)); + FAIL; + } else + CHECK; + if (noext(1)) { + report("Tested as far as possible without activating grab."); + CHECKUNTESTED(3); + } else { + Window oldf; + int oldr; + + XGetInputFocus(display, &oldf, &oldr); + XSetInputFocus(display, win, RevertToPointerRoot, CurrentTime); + buttonpress(display, Button1); + if (!pgrabbed(win)) { + report("Failed to activate grab."); + relalldev(); + XSetInputFocus(display, oldf, oldr, CurrentTime); + return; + } + XSync(display, True); + (void) warppointer(display, win, 1,1); + (void) warppointer(display, win, 10,10); + (void) warppointer(display, win, 1,1); + if (n=getevent(display, &ev)) { + report("event_mask changed on grab activation, received %d events, first was type %s.", + n, eventname(ev.type)); + FAIL; + } else + CHECK; + if (spriteiswin(display, curwin)) { + report("Cursor changed before grab activated."); + FAIL; + } else + CHECK; + event_mask = PointerMotionMask; + cursor = cur; + XCALL; + XSync(display, True); + (void) warppointer(display, win, 1,1); + (void) warppointer(display, win, 10,10); + (void) warppointer(display, win, 1,1); + if (!(n=getevent(display, &ev)) || ev.type != MotionNotify) { + report("event_mask not changed properly for active grab."); + if (n) + report("First event of %d was %s instead of MotionNotify.", + n, eventname(ev.type)); + FAIL; + } else + CHECK; + if (!spriteiswin(display, curwin)) { + report("Cursor not changed although grab was active."); + FAIL; + } else + CHECK; + + relalldev(); + XSetInputFocus(display, oldf, oldr, CurrentTime); + CHECKPASS(7); + } + +>>ASSERTION Bad A +.ER BadCursor +>>ASSERTION Bad A +.ER BadValue event_mask mask ButtonPressMask ButtonReleaseMask EnterWindowMask LeaveWindowMask PointerMotionMask PointerMotionHintMask Button1MotionMask Button2MotionMask Button3MotionMask Button4MotionMask Button5MotionMask ButtonMotionMask KeymapStateMask |