Browse Source

Fix #82

It seems that silly Adam was storing a UINT scan code because MapVirtualKey
wanted a UINT. However, WM_CHAR only has a BYTE scan code in its lParam.
Therefore, we got garbage on repeated key events, which bungled up the key
binding parser.
Adam Johnson 13 years ago
parent
commit
6582d0261e
  1. 7
      Sources/Plasma/PubUtilLib/plInputCore/plInputManager.cpp

7
Sources/Plasma/PubUtilLib/plInputCore/plInputManager.cpp

@ -281,15 +281,14 @@ void plInputManager::HandleWin32ControlEvent(UINT message, WPARAM Wparam, LPARAM
Wparam == KEY_TAB || Wparam == 0x0D)
break;
UINT scan = Lparam >> 16;
scan = MapVirtualKeyEx(scan, MAPVK_VSC_TO_VK, nil);
if (scan == 0) scan = -1;
BYTE scan = Lparam >> 16;
UINT vkey = MapVirtualKey(scan, MAPVK_VSC_TO_VK);
bExtended = Lparam >> 24 & 1;
hsBool bRepeat = ((Lparam >> 29) & 0xf) != 0;
bool down = !(Lparam >> 31);
for (int i=0; i<fInputDevices.Count(); i++)
fInputDevices[i]->HandleKeyEvent( CHAR_MSG, (plKeyDef)scan, down, bRepeat, (wchar_t)Wparam );
fInputDevices[i]->HandleKeyEvent( CHAR_MSG, (plKeyDef)vkey, down, bRepeat, (wchar_t)Wparam );
}
break;
case MOUSEWHEEL:

Loading…
Cancel
Save