Cygwin/X: enqueue a pointer motion event on mouse movement

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
This commit is contained in:
Jon TURNEY 2008-11-02 18:27:13 +00:00
parent 816e0d243d
commit 35d7602830
5 changed files with 38 additions and 11 deletions

View File

@ -1005,6 +1005,9 @@ winMouseButtonsHandle (ScreenPtr pScreen,
int iEventType, int iButton,
WPARAM wParam);
void
winEnqueueMotion(int x, int y);
#ifdef XWIN_NATIVEGDI
/*
* winnativegdi.c

View File

@ -344,3 +344,29 @@ winMouseButtonsHandle (ScreenPtr pScreen,
return 0;
}
/**
* Enqueue a motion event.
*
* XXX: miPointerMove does exactly this, but is static :-( (and uses a static buffer)
*
*/
void winEnqueueMotion(int x, int y)
{
miPointerSetPosition(g_pwinPointer, &x, &y);
g_c32LastInputEventTime = GetTickCount();
int i, nevents;
int valuators[2];
EventListPtr events;
GetEventList(&events);
valuators[0] = x;
valuators[1] = y;
nevents = GetPointerEvents(events, g_pwinPointer, MotionNotify, 0,
POINTER_ABSOLUTE, 0, 2, valuators);
for (i = 0; i < nevents; i++)
mieqEnqueue(g_pwinPointer, events[i].event);
}

View File

@ -535,9 +535,9 @@ winTopLevelWindowProc (HWND hwnd, UINT message,
}
/* Deliver absolute cursor position to X Server */
miPointerAbsoluteCursor (ptMouse.x - s_pScreenInfo->dwXOffset,
ptMouse.y - s_pScreenInfo->dwYOffset,
g_c32LastInputEventTime = GetTickCount ());
winEnqueueMotion(ptMouse.x - s_pScreenInfo->dwXOffset,
ptMouse.y - s_pScreenInfo->dwYOffset);
return 0;
case WM_NCMOUSEMOVE:

View File

@ -571,9 +571,9 @@ winMWExtWMWindowProc (HWND hwnd, UINT message,
}
/* Deliver absolute cursor position to X Server */
miPointerAbsoluteCursor (ptMouse.x - pScreenInfo->dwXOffset,
ptMouse.y - pScreenInfo->dwYOffset,
g_c32LastInputEventTime = GetTickCount ());
winEnqueueMotion(ptMouse.x - pScreenInfo->dwXOffset,
ptMouse.y - pScreenInfo->dwYOffset);
return 0;
case WM_NCMOUSEMOVE:

View File

@ -764,9 +764,8 @@ winWindowProc (HWND hwnd, UINT message,
}
/* Deliver absolute cursor position to X Server */
miPointerAbsoluteCursor (GET_X_LPARAM(lParam)-s_pScreenInfo->dwXOffset,
GET_Y_LPARAM(lParam)-s_pScreenInfo->dwYOffset,
g_c32LastInputEventTime = GetTickCount ());
winEnqueueMotion(GET_X_LPARAM(lParam)-s_pScreenInfo->dwXOffset,
GET_Y_LPARAM(lParam)-s_pScreenInfo->dwYOffset);
return 0;
case WM_NCMOUSEMOVE:
@ -929,8 +928,7 @@ winWindowProc (HWND hwnd, UINT message,
point.y -= GetSystemMetrics (SM_YVIRTUALSCREEN);
/* Deliver absolute cursor position to X Server */
miPointerAbsoluteCursor (point.x, point.y,
g_c32LastInputEventTime = GetTickCount());
winEnqueueMotion(point.x , point.y);
/* Check if a button was released but we didn't see it */
GetCursorPos (&point);