summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Bosveld <Joel.Bosveld@gmail.com>2009-06-24 20:56:20 +0800
committerJoel Bosveld <Joel.Bosveld@gmail.com>2009-06-24 20:56:20 +0800
commit24691513bcceb730686cc765e5022e22b1822a58 (patch)
tree58f94b0da62287cb80b6c14d0fb706ce7d630132
parent31d393708f8c69eea0c92348fa06b0036006a7b9 (diff)
Allow triangles to have coords in window but act as if they don't (for XYToWin)
The reason for this is to allow for proper handling of transformations such as splitting a window and cutting a hole out. In those circumstances, we would like the hole the have coordinates in the window (for proper behaviour during grabs), but we would also like for it to appear as not part of the window in XYToWindow.
-rw-r--r--include/X11/extensions/Xcomposite.h3
-rw-r--r--src/Xcomposite.c14
2 files changed, 13 insertions, 4 deletions
diff --git a/include/X11/extensions/Xcomposite.h b/include/X11/extensions/Xcomposite.h
index a6a70c5..bc249ea 100644
--- a/include/X11/extensions/Xcomposite.h
+++ b/include/X11/extensions/Xcomposite.h
@@ -97,7 +97,8 @@ void
XCompositeSetTriangularCoordinateMesh (Display *dpy,
Window window,
_Xconst XTriangle *triangle,
- int nTriangle);
+ int nNormTriangle,
+ int nGrabTriangle);
_XFUNCPROTOEND
diff --git a/src/Xcomposite.c b/src/Xcomposite.c
index 930a821..04c3af3 100644
--- a/src/Xcomposite.c
+++ b/src/Xcomposite.c
@@ -399,14 +399,18 @@ void
XCompositeSetTriangularCoordinateMesh (Display *dpy,
Window window,
_Xconst XTriangle *triangle,
- int nTriangle)
+ int nNormTriangle,
+ int nGrabTriangle)
{
XCompositeExtDisplayInfo *info = XCompositeFindDisplay (dpy);
xCompositeSetTriangularCoordinateMeshReq *req;
int n;
long len;
+ int nTriangle;
Bool first = True;
+ nTriangle = nNormTriangle + nGrabTriangle;
+
XCompositeSimpleCheckExtension (dpy, info);
LockDisplay (dpy);
while (nTriangle)
@@ -420,11 +424,15 @@ XCompositeSetTriangularCoordinateMesh (Display *dpy,
if (first)
{
req->flags |= CompositeSetMeshBegin;
- req->total = nTriangle;
+ req->nNorm = nNormTriangle;
+ req->nGrab = nGrabTriangle;
first = False;
}
else
- req->total = 0;
+ {
+ req->nNorm = 0;
+ req->nGrab = 0;
+ }
n = nTriangle;
len = ((long) n) * (SIZEOF (xTriangle) >> 2);