Function MSG_JournalPlayBackMsg updates asynchronous data incorrectly

Jukka Heinonen jhei at iki.fi
Tue May 15 02:00:16 CDT 2001


This is a more speculative patch, since I have not been able to test
it myself. However, it would seem that function MSG_JournalPlayBackMsg
updates AsyncKeyStateTable and AsyncMouseButtonsStates incorrectly:
if it detects that mouse button / keyboard key is released, it clears
asynchronous state which would seem to be an incorrect behaviour.

Also, since AsyncKeyStateTable does not use indexes VK_LBUTTON, VK_MBUTTON
and VK_RBUTTON, updating these with incorrect values does not seem
necessary.

Log:
Jukka Heinonen <jhei at iki.fi>
Function MSG_JournalPlayBackMsg updated incorrectly
tables AsyncKeyStateTable and AsyncMouseButtonsStates when 
keys/buttons are released. Since AsyncKeyStateTable does not 
use indexes VK_LBUTTON, VK_MBUTTON and VK_RBUTTON, these
should not be updated either.

Index: message.c
===================================================================
RCS file: /home/wine/wine/windows/message.c,v
retrieving revision 1.103
diff -u -r1.103 message.c
--- message.c   2001/05/09 17:33:00     1.103
+++ message.c   2001/05/15 07:49:50
@@ -510,12 +510,13 @@
                         keyDown++;
                 if (!keyDown)
                     lParam |= 0x40000000;
-                AsyncKeyStateTable[wParam]=InputKeyStateTable[wParam] |= 0x80;
+                InputKeyStateTable[wParam] |= 0x80;
+               AsyncKeyStateTable[wParam] |= 0x80;
             }
             else                                       /* WM_KEYUP, WM_SYSKEYUP */
             {
                 lParam |= 0xC0000000;
-                AsyncKeyStateTable[wParam]=InputKeyStateTable[wParam] &= ~0x80;
+                InputKeyStateTable[wParam] &= ~0x80;
             }
             if (InputKeyStateTable[VK_MENU] & 0x80)
                 lParam |= 0x20000000;
@@ -530,19 +531,21 @@
             case WM_LBUTTONDOWN:
                 MouseButtonsStates[0]=AsyncMouseButtonsStates[0]=TRUE;break;
             case WM_LBUTTONUP:
-                MouseButtonsStates[0]=AsyncMouseButtonsStates[0]=FALSE;break;
+                MouseButtonsStates[0]=FALSE;break;
             case WM_MBUTTONDOWN:
                 MouseButtonsStates[1]=AsyncMouseButtonsStates[1]=TRUE;break;
             case WM_MBUTTONUP:
-                MouseButtonsStates[1]=AsyncMouseButtonsStates[1]=FALSE;break;
+                MouseButtonsStates[1]=FALSE;break;
             case WM_RBUTTONDOWN:
                 MouseButtonsStates[2]=AsyncMouseButtonsStates[2]=TRUE;break;      
             case WM_RBUTTONUP:
-                MouseButtonsStates[2]=AsyncMouseButtonsStates[2]=FALSE;break;
+                MouseButtonsStates[2]=FALSE;break;
             }
-            AsyncKeyStateTable[VK_LBUTTON]= InputKeyStateTable[VK_LBUTTON] = MouseButtonsStates[0] ? 0x80 : 0;
-            AsyncKeyStateTable[VK_MBUTTON]= InputKeyStateTable[VK_MBUTTON] = MouseButtonsStates[1] ? 0x80 : 0;
-            AsyncKeyStateTable[VK_RBUTTON]= InputKeyStateTable[VK_RBUTTON] = MouseButtonsStates[2] ? 0x80 : 0;
+
+           InputKeyStateTable[VK_LBUTTON] = MouseButtonsStates[0] ? 0x80 : 0;
+           InputKeyStateTable[VK_MBUTTON] = MouseButtonsStates[1] ? 0x80 : 0;
+           InputKeyStateTable[VK_RBUTTON] = MouseButtonsStates[2] ? 0x80 : 0;
+
             SetCursorPos(tmpMsg.paramL,tmpMsg.paramH);
             lParam=MAKELONG(tmpMsg.paramL,tmpMsg.paramH);
             wParam=0;                                                


-- 
Jukka Heinonen <http://www.iki.fi/jhei/>




More information about the wine-patches mailing list