|
From: <c99...@us...> - 2006-05-27 14:09:05
|
Revision: 330 Author: c99koder Date: 2006-05-27 07:08:53 -0700 (Sat, 27 May 2006) ViewCVS: http://svn.sourceforge.net/cadcdev/?rev=330&view=rev Log Message: ----------- Tiki: Fix key repeating on Win32 Modified Paths: -------------- tiki/win32/src/plathid.cpp Modified: tiki/win32/src/plathid.cpp =================================================================== --- tiki/win32/src/plathid.cpp 2006-05-27 02:33:16 UTC (rev 329) +++ tiki/win32/src/plathid.cpp 2006-05-27 14:08:53 UTC (rev 330) @@ -90,9 +90,21 @@ return outkey; } +typedef struct { + /* Layout these fields according to how they are stored in the LPARAM */ + unsigned int nRepeatCount : 16; + unsigned int nScanCode : 8; + unsigned int nExtended : 1; + unsigned int nReserved : 4; + unsigned int nContextCode : 1; + unsigned int nPrevKeyState : 1; + unsigned int nTransitionState : 1; +} tKEYBOARD; + void Tiki::RecvEvent(UINT iMsg, WPARAM wParam, LPARAM lParam) { int mod = 0; + tKEYBOARD event = {0}; if(GetKeyState(VK_SHIFT) & 0x80) mod |= Event::KeyShift; if(GetKeyState(VK_CONTROL) & 0x80) mod |= Event::KeyControl; @@ -102,17 +114,20 @@ { case WM_KEYDOWN: { + memcpy(&event,&lParam,sizeof(LPARAM)); + Event evt(Event::EvtKeyDown); - if (!(lParam & (1 << 30))) + evt.dev = win32kb; + evt.key = translateFn(wParam, lParam); + evt.mod = mod; + + if (!event.nPrevKeyState) { - evt.dev = win32kb; - evt.key = translateFn(wParam, lParam); - evt.mod = mod; sendEvent(evt); } evt.type = Event::EvtKeypress; - for (int i=0; i<(lParam & 0x0f); i++) + for (int i=0; i<event.nRepeatCount; i++) sendEvent(evt); } break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |