xserver/dix dispatch.c, 3.36, 3.37 events.c, 3.54, 3.55 window.c, 3.42, 3.43
Keith Packard <xserver-commit-u7BhqnqprCWvj1b/[email protected]> Tue, 8 Feb 2005 13:51:44 -0800 (PST)
| Newsgroups | gmane.comp.freedesktop.xserver.cvs |
|---|---|
| Message-ID | <[email protected]> |
Committed by: keithp Update of /cvs/xserver/xserver/dix In directory gabe:/tmp/cvs-serv14618/dix Modified Files: dispatch.c events.c window.c Log Message: 2005-02-08 Keith Packard <[email protected]> * Xext/shape.c: (SendShapeNotify): * dix/dispatch.c: * dix/events.c: (XYToWindow), (XineramaPointInWindowIsVisible): * dix/window.c: (FreeWindowResources): * xfixes/region.c: (ProcXFixesSetWindowShapeRegion): Add ShapeInput support Index: dispatch.c =================================================================== RCS file: /cvs/xserver/xserver/dix/dispatch.c,v retrieving revision 3.36 retrieving revision 3.37 diff -u -d -r3.36 -r3.37 --- dispatch.c 19 Apr 2004 18:21:28 -0000 3.36 +++ dispatch.c 8 Feb 2005 21:51:41 -0000 3.37 @@ -1269,6 +1269,11 @@ && (!wBoundingShape(pWin) || POINT_IN_REGION(pWin->drawable.pScreen, &pWin->borderSize, x, y, &box)) + && (!wInputShape(pWin) || + POINT_IN_REGION(pWin->drawable.pScreen, + wInputShape(pWin), + x - pWin->drawable.x, + y - pWin->drawable.y, &box)) ) { rep.child = pWin->drawable.id; Index: events.c =================================================================== RCS file: /cvs/xserver/xserver/dix/events.c,v retrieving revision 3.54 retrieving revision 3.55 diff -u -d -r3.54 -r3.55 --- events.c 19 Apr 2004 18:21:28 -0000 3.54 +++ events.c 8 Feb 2005 21:51:41 -0000 3.55 @@ -1910,6 +1910,7 @@ XYToWindow(int x, int y) { register WindowPtr pWin; + BoxRec box; spriteTraceGood = 1; /* root window still there */ pWin = ROOT->firstChild; @@ -1927,6 +1928,11 @@ * borderSize */ && (!wBoundingShape(pWin) || PointInBorderSize(pWin, x, y)) + && (!wInputShape(pWin) || + POINT_IN_REGION(pWin->drawable.pScreen, + wInputShape(pWin), + x - pWin->drawable.x, + y - pWin->drawable.y, &box)) ) { if (spriteTraceGood >= spriteTraceSize) @@ -2134,7 +2140,12 @@ x = xoff - panoramiXdataPtr[i].x; y = yoff - panoramiXdataPtr[i].y; - if(POINT_IN_REGION(pScreen, &pWin->borderClip, x, y, &box)) + if(POINT_IN_REGION(pScreen, &pWin->borderClip, x, y, &box) + && (!wInputShape(pWin) || + POINT_IN_REGION(pWin->drawable.pScreen, + wInputShape(pWin), + x - pWin->drawable.x, + y - pWin->drawable.y, &box)) return TRUE; } Index: window.c =================================================================== RCS file: /cvs/xserver/xserver/dix/window.c,v retrieving revision 3.42 retrieving revision 3.43 diff -u -d -r3.42 -r3.43 --- window.c 16 Feb 2004 03:30:07 -0000 3.42 +++ window.c 8 Feb 2005 21:51:41 -0000 3.43 @@ -428,6 +428,7 @@ pWin->optional->backingPixel = 0; pWin->optional->boundingShape = NULL; pWin->optional->clipShape = NULL; + pWin->optional->inputShape = NULL; #ifdef XINPUT pWin->optional->inputMasks = NULL; #endif @@ -827,6 +828,8 @@ REGION_DESTROY(pScreen, wBoundingShape (pWin)); if (wClipShape (pWin)) REGION_DESTROY(pScreen, wClipShape (pWin)); + if (wInputShape (pWin)) + REGION_DESTROY(pScreen, wInputShape (pWin)); if (pWin->borderIsPixel == FALSE) (*pScreen->DestroyPixmap)(pWin->border.pixmap); if (pWin->backgroundState == BackgroundPixmap) @@ -3212,7 +3215,12 @@ if (!pWin->realized) return (FALSE); if (POINT_IN_REGION(pWin->drawable.pScreen, &pWin->borderClip, - x, y, &box)) + x, y, &box) + && (!wInputShape(pWin) || + POINT_IN_REGION(pWin->drawable.pScreen, + wInputShape(pWin), + x - pWin->drawable.x, + y - pWin->drawable.y, &box)) return(TRUE); return(FALSE); } @@ -3617,6 +3625,8 @@ return; if (optional->clipShape != NULL) return; + if (optional->inputShape != NULL) + return; #ifdef XINPUT if (optional->inputMasks != NULL) return; @@ -3661,6 +3671,7 @@ optional->backingPixel = 0; optional->boundingShape = NULL; optional->clipShape = NULL; + optional->inputShape = NULL; #ifdef XINPUT optional->inputMasks = NULL; #endif