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