commit 80175f83fd4c0a55b75d95e28e0d9a75b6dd0d1e Author: Pierre Willenbrock Date: Mon Nov 17 00:06:24 2008 +0100 fix pointer warping diff --git a/mi/mipointer.c b/mi/mipointer.c index acfcb1b..b073bae 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -551,28 +551,39 @@ miPointerMove (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y) { int i, nevents; int valuators[2]; + CARD32 ms = GetTimeInMillis(); miPointerMoved(pDev, pScreen, x, y); - /* generate motion notify */ - valuators[0] = x; - valuators[1] = y; - - if (!events) + if (pDev->isMaster) + { + PostSyntheticMotion(pDev, x, y, pScreen->myNum, ms); + pDev->last.valuators[0] = x; + pDev->last.valuators[1] = y; + pDev->u.lastSlave = NULL; + } + else { - events = InitEventList(GetMaximumEventsNum()); + valuators[0] = x; + valuators[1] = y; - if (!events) - { - FatalError("Could not allocate event store.\n"); - return; - } - } + if (!events) + { + events = InitEventList(GetMaximumEventsNum()); + + if (!events) + { + FatalError("Could not allocate event store.\n"); + return; + } + } - nevents = GetPointerEvents(events, pDev, MotionNotify, 0, POINTER_ABSOLUTE, 0, 2, valuators); + /* handle event for the _core_ device. should not use GetPointerEvents */ + nevents = GetPointerEvents(events, pDev, MotionNotify, 0, POINTER_ABSOLUTE, 0, 2, valuators); - OsBlockSignals(); - for (i = 0; i < nevents; i++) - mieqEnqueue(pDev, events[i].event); - OsReleaseSignals(); + OsBlockSignals(); + for (i = 0; i < nevents; i++) + mieqEnqueue(pDev, events[i].event); + OsReleaseSignals(); + } }