#include <stdio.h>
#define NEED_EVENTS 1
#include <X11/X.h>
#include <X11/Xproto.h>
#include <X11/keysym.h>
#include "inputstr.h"
#include "scrnintstr.h"
#include "windowstr.h"
#include "XKBsrv.h"
#include "XI.h"
#ifdef PANORAMIX
#include "panoramiX.h"
#include "panoramiXsrv.h"
#endif
#include "mipointer.h"
#include "mipointrst.h"
void
XkbDDXFakePointerMotion(unsigned flags,int x,int y)
{
int oldX,oldY;
ScreenPtr pScreen, oldScreen;
GetSpritePosition(&oldX, &oldY);
pScreen = oldScreen = GetSpriteWindow()->drawable.pScreen;
#ifdef PANORAMIX
if (!noPanoramiXExtension) {
BoxRec box;
int i;
if(!POINT_IN_REGION(pScreen, &XineramaScreenRegions[pScreen->myNum],
oldX, oldY, &box)) {
FOR_NSCREENS(i) {
if(i == pScreen->myNum)
continue;
if(POINT_IN_REGION(pScreen, &XineramaScreenRegions[i],
oldX, oldY, &box)) {
pScreen = screenInfo.screens[i];
break;
}
}
}
oldScreen = pScreen;
if (flags&XkbSA_MoveAbsoluteX)
oldX= x;
else oldX+= x;
if (flags&XkbSA_MoveAbsoluteY)
oldY= y;
else oldY+= y;
if(!POINT_IN_REGION(pScreen, &XineramaScreenRegions[pScreen->myNum],
oldX, oldY, &box)) {
FOR_NSCREENS(i) {
if(i == pScreen->myNum)
continue;
if(POINT_IN_REGION(pScreen, &XineramaScreenRegions[i],
oldX, oldY, &box)) {
pScreen = screenInfo.screens[i];
break;
}
}
}
oldX -= panoramiXdataPtr[pScreen->myNum].x;
oldY -= panoramiXdataPtr[pScreen->myNum].y;
}
else
#endif
{
if (flags&XkbSA_MoveAbsoluteX)
oldX= x;
else oldX+= x;
if (flags&XkbSA_MoveAbsoluteY)
oldY= y;
else oldY+= y;
#define GetScreenPrivate(s) ((miPointerScreenPtr) ((s)->devPrivates[miPointerScreenIndex].ptr))
(*(GetScreenPrivate(oldScreen))->screenFuncs->CursorOffScreen)
(&pScreen, &oldX, &oldY);
}
if (pScreen != oldScreen)
NewCurrentScreen(pScreen, oldX, oldY);
if (pScreen->SetCursorPosition)
(*pScreen->SetCursorPosition)(pScreen, oldX, oldY, TRUE);
}