summaryrefslogtreecommitdiff
path: root/xc/test/xsuite/xtest/tset/CH07/ungrbbttn/ungrbbttn.m
diff options
context:
space:
mode:
Diffstat (limited to 'xc/test/xsuite/xtest/tset/CH07/ungrbbttn/ungrbbttn.m')
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/ungrbbttn/ungrbbttn.m292
1 files changed, 292 insertions, 0 deletions
diff --git a/xc/test/xsuite/xtest/tset/CH07/ungrbbttn/ungrbbttn.m b/xc/test/xsuite/xtest/tset/CH07/ungrbbttn/ungrbbttn.m
new file mode 100644
index 000000000..a778a3bbe
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/ungrbbttn/ungrbbttn.m
@@ -0,0 +1,292 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUngrabButton CH07
+void
+xname()
+Display *display = Dsp;
+unsigned int button = Button1;
+unsigned int modifiers = 0;
+Window grab_window = defwin(display);
+>>EXTERN
+>>SET end-function restoredevstate
+
+/*
+ * Returns True if the pointer is grabbed. This is not a general purpose
+ * routine since it knows about the Grab Button args.
+ * When the pointer is grabbed then pointer events are not reported to
+ * none grabbing clients.
+ */
+static
+pgrabbed()
+{
+Display *client2;
+XEvent ev;
+
+ client2 = opendisplay();
+
+ XSelectInput(client2, grab_window, PointerMotionMask|EnterWindowMask);
+ /* Flush events for client2 */
+ XSync(client2, True);
+
+ /*
+ * Ensure that pointer either enters or moves within grab_window.
+ */
+ (void) warppointer(display, grab_window, 1, 1);
+ (void) warppointer(display, grab_window, 1, 2);
+
+ XSync(client2, False);
+ if (getevent(client2, &ev)) {
+ /*
+ * An event was reported - pointer isn't grabbed, do a sanity
+ * check on the type of event.
+ */
+ if (ev.type != MotionNotify && ev.type != EnterNotify) {
+ delete("Unexpected event received in pgrabbed()");
+ delete(" event type %s", eventname(ev.type));
+ }
+ return(False);
+ } else {
+ return(True);
+ }
+}
+
+#define ACTPOSX 3
+#define ACTPOSY 6
+/*
+ * Warp to the grab_window and press the keys in modifiers and then press
+ * the button in the 'button' arg.
+ * (This activates the previously set up grab if the arg variables
+ * have not been changed.)
+ */
+static
+activate()
+{
+ (void) warppointer(display, grab_window, ACTPOSX, ACTPOSY);
+ if (modifiers)
+ modpress(display, modifiers);
+ buttonpress(display, button);
+}
+
+>>ASSERTION Good B 3
+When a passive grab for the specified button/key
+combination on the specified window
+exists and it was grabbed by this client, then
+a call to xname releases the grab.
+>>STRATEGY
+If no test extension:
+ Grab button.
+ Call xname to release grab.
+ UNTESTED touch test only.
+Place a passive grab on a button.
+Activate grab.
+Check that grab is active.
+Release grab.
+Call xname to remove grab.
+Attempt to activate grab.
+Verify that pointer is not grabbed.
+>>CODE
+
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ if (isdeleted())
+ return;
+
+
+ if (noext(1)) {
+ XCALL;
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ activate();
+ if (pgrabbed())
+ CHECK;
+ else {
+ delete("Could not set up grab");
+ return;
+ }
+
+ relbuttons();
+
+ XCALL;
+
+ activate();
+ if (pgrabbed()) {
+ report("Grab was not removed");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+A
+.A modifiers
+argument of
+.S AnyModifier
+is equivalent to issuing
+the ungrab request for all possible modifier combinations, including
+no modifiers.
+>>STRATEGY
+If no test extension:
+ Touch test using AnyModifier.
+Set passive grabs for different modifier combination on grab_window.
+Set modifier to AnyModifier.
+Call xname.
+Verify that all grabs have been released.
+>>CODE
+unsigned int mods;
+
+ if (noext(1)) {
+ modifiers = AnyModifier;
+ XCALL;
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ mods = wantmods(display, 3);
+
+ /* Try a few modifiers */
+ modifiers = mods;
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ /* Try no modifiers */
+ modifiers = 0;
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ modifiers = AnyModifier;
+ XCALL;
+
+ /* Try to activate with modifier combination */
+ modifiers = mods;
+ activate();
+ if (pgrabbed()) {
+ report("Grab with modifiers %s was not released", keymaskname(mods));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Try to activate with no modifiers */
+ modifiers = 0;
+ activate();
+ if (pgrabbed()) {
+ report("Grab with no modifiers was not released");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+A
+.A button
+argument of
+.S AnyButton
+is equivalent to issuing the
+request for all possible buttons.
+>>STRATEGY
+If no test extension:
+ Touch test using AnyButton.
+Set passive grabs for different buttons.
+Set button to AnyButton.
+Call xname.
+Verify that all grabs have been released.
+>>CODE
+
+ if (noext(1)) {
+ button = AnyButton;
+ XCALL;
+ report("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ button = Button1;
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ if (nbuttons() > 1)
+ button = Button2;
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ button = AnyButton;
+ XCALL;
+
+ /* Check the first grab */
+ button = Button1;
+ activate();
+
+ if (pgrabbed()) {
+ report("Grab on button1 was not released with AnyButton");
+ FAIL;
+ } else
+ CHECK;
+
+ if (nbuttons() > 1) {
+ button = Button2;
+ activate();
+ if (pgrabbed()) {
+ report("Grab on button2 was not released with AnyButton");
+ FAIL;
+ } else
+ CHECK;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+A call to xname has no effect on an active grab.
+>>STRATEGY
+If test extension available:
+ Set up passive grab.
+ Activate grab.
+ Call xname.
+ Verify that pointer is still grabbed.
+>>CODE
+
+ if (noext(1))
+ return;
+
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ activate();
+
+ XCALL;
+
+ if (pgrabbed())
+ CHECK;
+ else {
+ report("A call to %s released already active grab", TestName);
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+.ER BadValue modifiers mask ShiftMask LockMask ControlMask Mod1Mask Mod2Mask Mod3Mask Mod4Mask Mod5Mask AnyModifier
+>>ASSERTION Bad A
+.ER BadWindow