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.
|