Vitaliy Margolen : dinput: Signal event after we queued an event. Not before.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Aug 7 13:15:04 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: fd6e974d92c79a16a173645ee1326d73db92774e
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=fd6e974d92c79a16a173645ee1326d73db92774e

Author: Vitaliy Margolen <wine-patch at kievinfo.com>
Date:   Sun Aug  6 20:27:40 2006 -0600

dinput: Signal event after we queued an event. Not before.

---

 dlls/dinput/mouse.c |   37 ++++++++++++++++++++-----------------
 1 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/dlls/dinput/mouse.c b/dlls/dinput/mouse.c
index e626bf6..363d1b8 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 ((This->need_warp == WARP_STARTED) &&
@@ -450,22 +448,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;
 		}
 	    }
@@ -489,38 +487,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;
     }
@@ -529,7 +527,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-cvs mailing list