diff options
Diffstat (limited to 'xts5/Xlib4/XMoveWindow/XMoveWindow.m')
-rw-r--r-- | xts5/Xlib4/XMoveWindow/XMoveWindow.m | 434 |
1 files changed, 434 insertions, 0 deletions
diff --git a/xts5/Xlib4/XMoveWindow/XMoveWindow.m b/xts5/Xlib4/XMoveWindow/XMoveWindow.m new file mode 100644 index 00000000..d09b0260 --- /dev/null +++ b/xts5/Xlib4/XMoveWindow/XMoveWindow.m @@ -0,0 +1,434 @@ +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. +$Header: /cvs/xtest/xtest/xts5/tset/Xlib4/XMoveWindow/XMoveWindow.m,v 1.2 2005-11-03 08:43:35 jmichael Exp $ + +Copyright (c) Applied Testing and Technology, Inc. 1995 +All Rights Reserved. + +>># Project: VSW5 +>># +>># File: xts5/tset/Xlib4/XMoveWindow/XMoveWindow.m +>># +>># Description: +>># Tests for XMoveWindow() +>># +>># Modifications: +>># $Log: mvwdw.m,v $ +>># Revision 1.2 2005-11-03 08:43:35 jmichael +>># clean up all vsw5 paths to use xts5 instead. +>># +>># Revision 1.1.1.2 2005/04/15 14:05:25 anderson +>># Reimport of the base with the legal name in the copyright fixed. +>># +>># Revision 8.0 1998/12/23 23:26:31 mar +>># Branch point for Release 5.0.2 +>># +>># Revision 7.0 1998/10/30 22:44:48 mar +>># Branch point for Release 5.0.2b1 +>># +>># Revision 6.0 1998/03/02 05:18:46 tbr +>># Branch point for Release 5.0.1 +>># +>># Revision 5.0 1998/01/26 03:15:17 tbr +>># Branch point for Release 5.0.1b1 +>># +>># Revision 4.0 1995/12/15 08:47:55 tbr +>># Branch point for Release 5.0.0 +>># +>># Revision 3.1 1995/12/15 00:46:28 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 XMoveWindow Xlib4 +void + +Display *display = Dsp; +Window w; +int x; +int y; +>>EXTERN + +/* The structure that is used as the default argument to the function. */ +static XWindowChanges winchng; + +/* + * Convenience routine that sets the 'w' argument to be simple window + * with a background of W_FG at position (10,8) and * size 10x9. + * The border width is 0. + */ +#define OW_X 10 +#define OW_Y 8 +#define OW_WIDTH 23 +#define OW_HEIGHT 9 + +#define NEW_X OW_X+5 +#define NEW_Y OW_Y+5 + + +static Window +onewin() +{ +Window base; +struct area area; + + base = defwin(display); + setarea(&area, OW_X, OW_Y, OW_WIDTH, OW_HEIGHT); + + w = crechild(display, base, &area); + XSetWindowBackground(display, w, W_FG); + XClearWindow(display, w); + + return(base); +} + + +/* + * Window tree for the restacking operations. + */ +static char *Tstack[] = { + ". borders", + "bottom . (30,2) 60x34", + "A . (10,5) 30x20", + "B . (15, 10) 30x20", + "mid . (20, 15) 30x20", + "C . (25, 20) 30x20", + "D . (30, 25) 30x20", + "alone . (50,50) 20x20", /* does not overlap with any window */ + "olmid . (3,32) 20x20", /* Overlaps mid */ + "top . (5,80) 19x4", +}; +#define NTstack (NELEM(Tstack)) +>>ASSERTION Good A +A call to xname moves the window so that the +coordinates of the upper-left outer corner of the window +are +.M x , +.M y +relative to the origin of the parent window. +>>STRATEGY +Create test window with background of W_FG. +Set x and y. +Call xname. +Verify that window has moved on screen with checkarea(). +>>CODE +Window base; +struct area area; + + base = onewin(); + + setarea(&area, 20, 50, OW_WIDTH, OW_HEIGHT); + x = area.x; + y = area.y; + + XCALL; + + if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL)) + CHECK; + else { + report("Error in moving window"); + FAIL; + } + + CHECKPASS(1); +>>ASSERTION Good A +When the window is moved +and the window is mapped +and the window is not obscured by non-children, then the current window +contents are not lost. +>>STRATEGY +Create window. +Draw pattern in window. +Move window without a size change. +Verify that window contents are unchanged. +>>CODE +XImage *imp; + + (void) onewin(); + + pattern(display, w); + + x = NEW_X; + y = NEW_Y; + + imp = savimage(display, w); + + XCALL; + + if (compsavimage(display, w, imp)) + CHECK; + else { + report("Window contents affected by moving window"); + FAIL; + } + + CHECKPASS(1); +>>ASSERTION Good D 3 +When the window is moved +and the window is mapped +and backing store is being maintained for the window, then the current window +contents are not lost. +>># Kieron reckoned a sibling assertion to this in XConfigureWindow +>># was D 3. I have no reason to doubt this! stuart. +>>ASSERTION Good A +When a call to xname +uncovers part of any window that was formerly obscured, then +either +.S Expose +events are generated or the contents are restored from backing store. +>>STRATEGY +Create windows. +Create second client to receive events on. +Call setforexpose() on unobscured window. +Create other windows to partially obscure this window. +Reconfigure window with xname, ensuring that first window is now unobscured. +Verify for correct expose or backing store behaviour with exposecheck(). +>>CODE +Window base; +Display *client2; +struct buildtree *bt; +int i; + + base = defwin(display); + setforexpose(display, base); + + bt = buildtree(display, base, Tstack, NTstack); + + client2 = opendisplay(); + XSelectInput(client2, base, ExposureMask); + XSync(client2, False); + + /* + * This loop will throw all the subwindows outside the borders of the + * parent window. + */ + x = W_STDWIDTH+9000; + for (i = 1; i < NTstack; i++) { + w = bt[i].wid; + XCALL; + } + XSync(client2, False); + + if (exposecheck(client2, base)) + CHECK; + else { + report("Neither Expose events or backing store processing"); + report(" could correctly restore the window contents."); + FAIL; + } + CHECKPASS(1); +>>ASSERTION Good A +When the window +is a root window, then a call to xname has no effect. +>>STRATEGY +Call xname on root window. +Touch test only. +>>CODE + + w = DefaultRootWindow(display); + + XCALL; + + if (fail == 0) + PASS; +>>ASSERTION Good A +When the override-redirect flag of the window is +.S False +and some +other client has selected +.S SubstructureRedirectMask +on the parent window, then a +.S ConfigureRequest +event is generated, and the window position is not changed. +>>STRATEGY +Create windows. +Set override-redirect to False. +Create second client. +Select SubstructureRedirectMask for second client on parent of window. +Set some parameters. +Call xname. +Verify that a ConfigureRequest event is generated. +Verify that window configuration has not changed on the screen. +>>CODE +Window base; +XConfigureRequestEvent good; +XSetWindowAttributes setatts; +Display *client2; +XEvent ev; +XImage *imp; +int n; + + base = onewin(); + + setatts.override_redirect = False; + XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts); + + client2 = opendisplay(); + XSelectInput(client2, base, SubstructureRedirectMask); + XSync(client2, False); + + x = NEW_X; + y = NEW_Y; + + good.type = ConfigureRequest; + good.serial = 0L; + good.send_event = False; + good.display = client2; + good.parent = base; + good.window = w; + good.x = NEW_X; + good.y = NEW_Y; + good.width = OW_WIDTH; + good.height = OW_HEIGHT; + good.border_width = 0; + good.above = None; + good.detail = Above; + good.value_mask = CWX | CWY; + + imp = savimage(display, base); + + XCALL; + XSync(client2, False); + + n = getevent(client2, &ev); + if (n != 1) { + report("Expecting 1 event"); + FAIL; + } else + CHECK; + + if (n > 0 && checkevent((XEvent*)&good, &ev) == 0) + CHECK; + else + FAIL; + + if (compsavimage(display, base, imp)) + CHECK; + else { + report("Screen contents changed"); + FAIL; + } + + CHECKPASS(3); + +>>ASSERTION Good A +When the position actually changes, then a +.S ConfigureNotify +event is generated. +>>STRATEGY +Create windows. +Enable SubstructureNotify events. +Call xname such that the window configuration changes. +Verify that a ConfigureNotify event is generated. +Call xname again with the same parameters. +Verify that no ConfigureNotify event is generated. +>>CODE +XConfigureEvent good; +XEvent ev; +int n; + + (void) onewin(); + + XSelectInput(display, w, StructureNotifyMask); + + x = NEW_X; + y = NEW_Y; + + XCALL; + + good.type = ConfigureNotify; + good.serial = 0L; + good.send_event = False; + good.display = display; + good.event = w; + good.window = w; + good.x = NEW_X; + good.y = NEW_Y; + good.width = OW_WIDTH; + good.height = OW_HEIGHT; + good.border_width = 0; + good.above = None; + good.override_redirect = False; + + n = getevent(display, &ev); + if (n != 1) { + report("Expecting 1 event, got %d", n); + FAIL; + } else + CHECK; + if (n > 0 && checkevent((XEvent*)&good, &ev) == 0) + CHECK; + else + FAIL; + + /* Call again */ + XCALL; + if ((n = XPending(display)) == 0) + CHECK; + else { + report("Received event when configuration was not changed"); + FAIL; + } + + CHECKPASS(3); + +>>ASSERTION Bad A +.ER BadWindow |