Hi all,
I have 2 Elo touch screen monitors(1024 x 768) and they are configured with Xinerama extension.
The bug that we have is that the button click event doesnt properly switch between the screens but the cursor movement is correct.
When we touch on a button1 on screen 1 and then touch button2 on screen 2 we found that the touch on button2 is recognized only for button 1(with the focus still being there on button1) but we found that cursor has moved to button 2. Subsequent touches on button2 are recognized correctly.The problem was there only for the first touch on button2
I narrowed the problem to xf86XInputSetScreen.
I was able to get an workaround
I modified the function NewCurrentScreen in events.c.
when calling SetCursorPosition I hardcode 1023 and 0 for the X cordinate for screen1 and screen0 respectively. That solved the bug.But I am not sure why it solves the bug !!
NewCurrentScreen(newScreen, x, y)
{
...
...
if
(newScreen != sprite.screen) {sprite.screen = newScreen;
/* Make sure we tell the DDX to update its copy of the screen */
if
(sprite.confineWin)XineramaConfineCursorToWindow(sprite.confineWin, TRUE);
else
XineramaConfineCursorToWindow(WindowTable[0], TRUE);
/* if the pointer wasn't confined, the DDX won't get
told of the pointer warp so we reposition it here */
if
(!syncEvents.playingEvents){
if
(sprite.screen->myNum == 0){
(*sprite.screen->SetCursorPosition)(sprite.screen,
0,
sprite.hotPhys.y + panoramiXdataPtr[0].y -
panoramiXdataPtr[sprite.screen->myNum].y, FALSE);
}
else
{
(*sprite.screen->SetCursorPosition)(sprite.screen,
1023,
sprite.hotPhys.y + panoramiXdataPtr[0].y -
panoramiXdataPtr[sprite.screen->myNum].y, FALSE);
}
}
}
}
........
...
}
I am not sure why this fix it.
Anybody have an explanation for this?
Thanks,
Mugunthan