dinput: Signal event after we queued an event. Not before.
Vitaliy Margolen
wine-patch at kievinfo.com
Sun Aug 6 21:27:40 CDT 2006
ChangeLog:
dinput: Signal event after we queued an event. Not before.
Use the same event sequence number for related events.
dlls/dinput/mouse.c | 37 ++++++++++++++++++++-----------------
1 files changed, 20 insertions(+), 17 deletions(-)
-------------- next part --------------
c8438885666e59b1e7cca6db4741119938b16fe7
diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c
index b4c0e34..689eca8 100644
--- a/dlls/dinput/mouse.c
+++ b/dlls/dinput/mouse.c
@@ -426,16 +426,14 @@ static LRESULT CALLBACK dinput_mouse_hoo
EnterCriticalSection(&(This->crit));
dwCoop = This->dwCoopLevel;
- /* Mouse moved -> send event if asked */
- if (This->hEvent)
- SetEvent(This->hEvent);
-
if (wparam == WM_MOUSEMOVE) {
if (This->absolute) {
if (hook->pt.x != This->prevX)
- GEN_EVENT(This->offset_array[WINE_MOUSE_X_POSITION], hook->pt.x, hook->time, 0);
+ GEN_EVENT(This->offset_array[WINE_MOUSE_X_POSITION], hook->pt.x,
+ hook->time, This->dinput->evsequence);
if (hook->pt.y != This->prevY)
- GEN_EVENT(This->offset_array[WINE_MOUSE_Y_POSITION], hook->pt.y, hook->time, 0);
+ GEN_EVENT(This->offset_array[WINE_MOUSE_Y_POSITION], hook->pt.y,
+ hook->time, This->dinput->evsequence);
} else {
/* Now, warp handling */
if ((hook->pt.x == This->mapped_center.x) && (hook->pt.y == This->mapped_center.y)) {
@@ -449,22 +447,22 @@ static LRESULT CALLBACK dinput_mouse_hoo
(This->need_warp == WARP_STARTED)) {
if (hook->pt.x != This->prevX)
GEN_EVENT(This->offset_array[WINE_MOUSE_X_POSITION], hook->pt.x - This->prevX,
- hook->time, (This->dinput->evsequence)++);
+ hook->time, This->dinput->evsequence);
if (hook->pt.y != This->prevY)
GEN_EVENT(This->offset_array[WINE_MOUSE_Y_POSITION], hook->pt.y - This->prevY,
- hook->time, (This->dinput->evsequence)++);
+ hook->time, This->dinput->evsequence);
} else {
/* This is the first time the event handler has been called after a
GetDeviceData or GetDeviceState. */
if (hook->pt.x != This->mapped_center.x) {
GEN_EVENT(This->offset_array[WINE_MOUSE_X_POSITION], hook->pt.x - This->mapped_center.x,
- hook->time, (This->dinput->evsequence)++);
+ hook->time, This->dinput->evsequence);
This->need_warp = WARP_NEEDED;
}
if (hook->pt.y != This->mapped_center.y) {
GEN_EVENT(This->offset_array[WINE_MOUSE_Y_POSITION], hook->pt.y - This->mapped_center.y,
- hook->time, (This->dinput->evsequence)++);
+ hook->time, This->dinput->evsequence);
This->need_warp = WARP_NEEDED;
}
}
@@ -488,38 +486,38 @@ static LRESULT CALLBACK dinput_mouse_hoo
switch(wparam) {
case WM_LBUTTONDOWN:
GEN_EVENT(This->offset_array[WINE_MOUSE_L_POSITION], 0x80,
- hook->time, This->dinput->evsequence++);
+ hook->time, This->dinput->evsequence);
This->m_state.rgbButtons[0] = 0x80;
break;
case WM_LBUTTONUP:
GEN_EVENT(This->offset_array[WINE_MOUSE_L_POSITION], 0x00,
- hook->time, This->dinput->evsequence++);
+ hook->time, This->dinput->evsequence);
This->m_state.rgbButtons[0] = 0x00;
break;
case WM_RBUTTONDOWN:
GEN_EVENT(This->offset_array[WINE_MOUSE_R_POSITION], 0x80,
- hook->time, This->dinput->evsequence++);
+ hook->time, This->dinput->evsequence);
This->m_state.rgbButtons[1] = 0x80;
break;
case WM_RBUTTONUP:
GEN_EVENT(This->offset_array[WINE_MOUSE_R_POSITION], 0x00,
- hook->time, This->dinput->evsequence++);
+ hook->time, This->dinput->evsequence);
This->m_state.rgbButtons[1] = 0x00;
break;
case WM_MBUTTONDOWN:
GEN_EVENT(This->offset_array[WINE_MOUSE_M_POSITION], 0x80,
- hook->time, This->dinput->evsequence++);
+ hook->time, This->dinput->evsequence);
This->m_state.rgbButtons[2] = 0x80;
break;
case WM_MBUTTONUP:
GEN_EVENT(This->offset_array[WINE_MOUSE_M_POSITION], 0x00,
- hook->time, This->dinput->evsequence++);
+ hook->time, This->dinput->evsequence);
This->m_state.rgbButtons[2] = 0x00;
break;
case WM_MOUSEWHEEL:
wdata = (short)HIWORD(hook->mouseData);
GEN_EVENT(This->offset_array[WINE_MOUSE_Z_POSITION], wdata,
- hook->time, This->dinput->evsequence++);
+ hook->time, This->dinput->evsequence);
This->m_state.lZ += wdata;
break;
}
@@ -528,7 +526,12 @@ static LRESULT CALLBACK dinput_mouse_hoo
This->m_state.lX, This->m_state.lY,
This->m_state.rgbButtons[0], This->m_state.rgbButtons[2], This->m_state.rgbButtons[1]);
+ This->dinput->evsequence++;
+
end:
+ /* Mouse moved -> send event if asked */
+ if (This->hEvent) SetEvent(This->hEvent);
+
LeaveCriticalSection(&(This->crit));
if (dwCoop & DISCL_NONEXCLUSIVE) {
More information about the wine-patches
mailing list