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 - 1.1.1.1
+++ xtest.c 13 Mar 2003 21:05:20 -
@@ -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;
+BoxRecbox;
+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