user32: Make sure that SendInput always initializes the time field.

Dmitry Timoshkov dmitry at codeweavers.com
Tue Sep 21 00:02:29 CDT 2010


This patch should fix the problem reported in the bug 24435.
---
 dlls/user32/input.c |   59 ++++++++++++++++++++++++++-------------------------
 1 files changed, 30 insertions(+), 29 deletions(-)

diff --git a/dlls/user32/input.c b/dlls/user32/input.c
index 0dccf21..f2f7b85 100644
--- a/dlls/user32/input.c
+++ b/dlls/user32/input.c
@@ -119,35 +119,36 @@ BOOL set_capture_window( HWND hwnd, UINT gui_flags, HWND *prev_ret )
  */
 UINT WINAPI SendInput( UINT count, LPINPUT inputs, int size )
 {
-    if (TRACE_ON(win))
-    {
-        UINT i;
+    UINT i;
 
-        for (i = 0; i < count; i++)
+    for (i = 0; i < count; i++)
+    {
+        switch(inputs[i].type)
         {
-            switch(inputs[i].type)
-            {
-            case INPUT_MOUSE:
-                TRACE("mouse: dx %d, dy %d, data %x, flags %x, time %u, info %lx\n",
-                      inputs[i].u.mi.dx, inputs[i].u.mi.dy, inputs[i].u.mi.mouseData,
-                      inputs[i].u.mi.dwFlags, inputs[i].u.mi.time, inputs[i].u.mi.dwExtraInfo);
-                break;
-
-            case INPUT_KEYBOARD:
-                TRACE("keyboard: vk %X, scan %x, flags %x, time %u, info %lx\n",
-                      inputs[i].u.ki.wVk, inputs[i].u.ki.wScan, inputs[i].u.ki.dwFlags,
-                      inputs[i].u.ki.time, inputs[i].u.ki.dwExtraInfo);
-                break;
-
-            case INPUT_HARDWARE:
-                TRACE("hardware: msg %d, wParamL %x, wParamH %x\n",
-                      inputs[i].u.hi.uMsg, inputs[i].u.hi.wParamL, inputs[i].u.hi.wParamH);
-                break;
-
-            default:
-                FIXME("unknown input type %u\n", inputs[i].type);
-                break;
-            }
+        case INPUT_MOUSE:
+            TRACE("mouse: dx %d, dy %d, data %x, flags %x, time %u, info %lx\n",
+                  inputs[i].u.mi.dx, inputs[i].u.mi.dy, inputs[i].u.mi.mouseData,
+                  inputs[i].u.mi.dwFlags, inputs[i].u.mi.time, inputs[i].u.mi.dwExtraInfo);
+            if (!inputs[i].u.mi.time)
+                inputs[i].u.mi.time = GetTickCount();
+            break;
+
+        case INPUT_KEYBOARD:
+            TRACE("keyboard: vk %X, scan %x, flags %x, time %u, info %lx\n",
+                  inputs[i].u.ki.wVk, inputs[i].u.ki.wScan, inputs[i].u.ki.dwFlags,
+                  inputs[i].u.ki.time, inputs[i].u.ki.dwExtraInfo);
+            if (!inputs[i].u.ki.time)
+                inputs[i].u.ki.time = GetTickCount();
+            break;
+
+        case INPUT_HARDWARE:
+            TRACE("hardware: msg %d, wParamL %x, wParamH %x\n",
+                  inputs[i].u.hi.uMsg, inputs[i].u.hi.wParamL, inputs[i].u.hi.wParamH);
+            break;
+
+        default:
+            FIXME("unknown input type %u\n", inputs[i].type);
+            break;
         }
     }
 
@@ -167,7 +168,7 @@ void WINAPI keybd_event( BYTE bVk, BYTE bScan,
     input.u.ki.wVk = bVk;
     input.u.ki.wScan = bScan;
     input.u.ki.dwFlags = dwFlags;
-    input.u.ki.time = GetTickCount();
+    input.u.ki.time = 0;
     input.u.ki.dwExtraInfo = dwExtraInfo;
     SendInput( 1, &input, sizeof(input) );
 }
@@ -186,7 +187,7 @@ void WINAPI mouse_event( DWORD dwFlags, DWORD dx, DWORD dy,
     input.u.mi.dy = dy;
     input.u.mi.mouseData = dwData;
     input.u.mi.dwFlags = dwFlags;
-    input.u.mi.time = GetCurrentTime();
+    input.u.mi.time = 0;
     input.u.mi.dwExtraInfo = dwExtraInfo;
     SendInput( 1, &input, sizeof(input) );
 }
-- 
1.7.0.6




More information about the wine-patches mailing list