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