Please find below an email and patch by Rik Faith to make XTEST work with Xinerama. I have backported this to a 4.2.1 version on my debian box and it worked. Could someone add this to cvs? it shouldn't be a lot of work.

Thanks
Erik

---

# From: Rik Faith
# Subject: Xinerama, extensions, and x2x
# Date: Tue, 18 Mar 2003 09:19:10 -0800

[This was posted to [EMAIL PROTECTED] last week,
but I didn't get a reply.  Sorry if you've seen it twice...]

I recently noticed that several extensions are not "xinerama-aware".
For example, Extended-Visual-Information will report visuals for two
"screens" even when xdpyinfo reports only one screen present (i.e.,
because of Xinerama).  I suspect an issue with MIT-SCREEN-SAVER but have
not investigated -- does anyone use an MIT-SCREEN-SAVER client with
Xinerama (beforelight seems to be the only one).

The XTEST extension performs computations relative to the internal
screens, even though a client (e.g., x2x) obtains information about a
single large Xinerama screen.  Below is a patch to Xserver/Xext/test.c
that will fix this problem (against the xtest.c that should be in the
XFree86 4.3.0 tree).  I have verified this patch does not alter the
results of the X Test Suite when it is configured to run with the
XT_EXTENSIONS=Yes flag.  I have also verified that x2x works as expected
with this patch, and not without it.

I used: http://www.netsw.org/x11/extensions/x2x/x2x-1.27.tar.gz

(Note that because of the way the other XTEST code (e.g., IIRC, the
client-side library) is written, I was unable to write a xinerama-aware
client that could do anything to trick XTEST into doing the expected
thing.  For simplicity, I suggest fixing it here.)

Thanks for your help, Rik Faith


--- xtest.c 14 Dec 2002 03:09:57 -0000 1.1.1.1 +++ xtest.c 13 Mar 2003 21:05:20 -0000 @@ -59,6 +59,11 @@ static unsigned char XTestReqCode; extern int DeviceValuator; #endif /* XINPUT */

+#ifdef PANORAMIX
+#include "panoramiX.h"
+#include "panoramiXsrv.h"
+#endif
+
 static void XTestResetProc(
 #if NeedFunctionPrototypes
     ExtensionEntry * /* extEntry */
@@ -378,6 +383,33 @@ ProcXTestFakeInput(client)
            client->errorValue = ev->u.u.detail;
            return BadValue;
        }
+
+#ifdef PANORAMIX
+        if (!noPanoramiXExtension) {
+            ScreenPtr pScreen = root->drawable.pScreen;
+            BoxRec    box;
+            int       i;
+            int       x = ev->u.keyButtonPointer.rootX + panoramiXdataPtr[0].x;
+            int       y = ev->u.keyButtonPointer.rootY + panoramiXdataPtr[0].y;
+            if (!POINT_IN_REGION(root, &XineramaScreenRegions[pScreen->myNum],
+                                 x, y, &box)) {
+                FOR_NSCREENS(i) {
+                    if (i == pScreen->myNum) continue;
+                    if (POINT_IN_REGION(pScreen,
+                                        &XineramaScreenRegions[i],
+                                        x, y, &box)) {
+                        root = WindowTable[i];
+                        x   -= panoramiXdataPtr[i].x;
+                        y   -= panoramiXdataPtr[i].y;
+                        ev->u.keyButtonPointer.rootX = x;
+                        ev->u.keyButtonPointer.rootY = y;
+                        break;
+                    }
+                }
+            }
+        }
+#endif
+
        if (ev->u.keyButtonPointer.rootX < 0)
            ev->u.keyButtonPointer.rootX = 0;
        else if (ev->u.keyButtonPointer.rootX >= root->drawable.width)
@@ -386,7 +418,15 @@ ProcXTestFakeInput(client)
            ev->u.keyButtonPointer.rootY = 0;
        else if (ev->u.keyButtonPointer.rootY >= root->drawable.height)
            ev->u.keyButtonPointer.rootY = root->drawable.height - 1;
+
+#ifdef PANORAMIX
+        if ((!noPanoramiXExtension
+             && root->drawable.pScreen->myNum != XineramaGetCursorScreen())
+            || (noPanoramiXExtension && root != GetCurrentRootWindow()))
+
+#else
        if (root != GetCurrentRootWindow())
+#endif
        {
            NewCurrentScreen(root->drawable.pScreen,
                             ev->u.keyButtonPointer.rootX,




_______________________________________________ Devel mailing list [EMAIL PROTECTED] http://XFree86.Org/mailman/listinfo/devel

Reply via email to