It's me again, I've found the bug.
Please see the included Patch file (kbstat was never set).
Bye,
Stefan Giesen
diff -Naur src.orginal/mouse/w32inp.c src/mouse/w32inp.c
--- src.orginal/mouse/w32inp.c Tue Jun 12 18:04:24 2001
+++ src/mouse/w32inp.c Sun May 12 16:22:04 2002
@@ -196,6 +196,7 @@
switch ( pWinEv -> flags ) {
case GR_M_MOTION :
+ kbd_lastmod = pWinEv -> kbstat;
if ( mou_enabled && ( MOUINFO -> msstatus == 2 ) ) {
MOUINFO -> xpos = pWinEv -> x;
MOUINFO -> ypos = pWinEv -> y;
@@ -209,6 +210,7 @@
case GR_M_LEFT_UP :
case GR_M_MIDDLE_UP :
case GR_M_RIGHT_UP :
+ kbd_lastmod = pWinEv -> kbstat;
if ( mou_enabled && ( MOUINFO -> msstatus == 2 ) ) {
MOUINFO -> xpos = pWinEv -> x;
MOUINFO -> ypos = pWinEv -> y;
@@ -226,6 +228,7 @@
break;
case GR_M_KEYPRESS :
+ kbd_lastmod = pWinEv -> kbstat;
if ( kbd_enabled ) {
fill_keybd_ev ( ev, pWinEv -> key, kbd_lastmod );
real_dtime ( ev.dtime, evt_lasttime );
diff -Naur src.orginal/vdrivers/vd_win32.c src/vdrivers/vd_win32.c
--- src.orginal/vdrivers/vd_win32.c Mon Jan 7 02:06:42 2002
+++ src/vdrivers/vd_win32.c Sun May 12 16:24:48 2002
@@ -437,6 +437,7 @@
if ( GetKeyState ( VK_INSERT ) < 0 ) {
fkbState |= GR_KB_INSERT;
}
+
return fkbState;
}
@@ -629,13 +630,16 @@
case WM_LBUTTONDOWN :
{
SEventQueue *pEvQ, *pEv;
+ ULONG fkbState;
EnterCriticalSection ( &csEventQueue );
+ fkbState = convertwin32keystate ();
pEv = malloc ( sizeof ( SEventQueue ) );
pEv -> pEvent = malloc ( sizeof ( GrMouseEvent ) );
pEv -> pEvent -> flags = GR_M_LEFT_DOWN;
pEv -> pEvent -> x = LOWORD ( lParam );
pEv -> pEvent -> y = HIWORD ( lParam );
+ pEv -> pEvent -> kbstat = fkbState;
pEv -> pNext = NULL;
pEvQ = pEventQueue;
while ( pEvQ -> pNext != NULL ) {
@@ -649,13 +653,16 @@
case WM_MBUTTONDOWN :
{
SEventQueue *pEvQ, *pEv;
+ ULONG fkbState;
EnterCriticalSection ( &csEventQueue );
+ fkbState = convertwin32keystate ();
pEv = malloc ( sizeof ( SEventQueue ) );
pEv -> pEvent = malloc ( sizeof ( GrMouseEvent ) );
pEv -> pEvent -> flags = GR_M_MIDDLE_DOWN;
pEv -> pEvent -> x = LOWORD ( lParam );
pEv -> pEvent -> y = HIWORD ( lParam );
+ pEv -> pEvent -> kbstat = fkbState;
pEv -> pNext = NULL;
pEvQ = pEventQueue;
while ( pEvQ -> pNext != NULL ) {
@@ -669,13 +676,16 @@
case WM_RBUTTONDOWN :
{
SEventQueue *pEvQ, *pEv;
+ ULONG fkbState;
EnterCriticalSection ( &csEventQueue );
+ fkbState = convertwin32keystate ();
pEv = malloc ( sizeof ( SEventQueue ) );
pEv -> pEvent = malloc ( sizeof ( GrMouseEvent ) );
pEv -> pEvent -> flags = GR_M_RIGHT_DOWN;
pEv -> pEvent -> x = LOWORD ( lParam );
pEv -> pEvent -> y = HIWORD ( lParam );
+ pEv -> pEvent -> kbstat = fkbState;
pEv -> pNext = NULL;
pEvQ = pEventQueue;
while ( pEvQ -> pNext != NULL ) {
@@ -689,13 +699,16 @@
case WM_LBUTTONUP :
{
SEventQueue *pEvQ, *pEv;
+ ULONG fkbState;
EnterCriticalSection ( &csEventQueue );
+ fkbState = convertwin32keystate ();
pEv = malloc ( sizeof ( SEventQueue ) );
pEv -> pEvent = malloc ( sizeof ( GrMouseEvent ) );
pEv -> pEvent -> flags = GR_M_LEFT_UP;
pEv -> pEvent -> x = LOWORD ( lParam );
pEv -> pEvent -> y = HIWORD ( lParam );
+ pEv -> pEvent -> kbstat = fkbState;
pEv -> pNext = NULL;
pEvQ = pEventQueue;
while ( pEvQ -> pNext != NULL ) {
@@ -709,13 +722,16 @@
case WM_MBUTTONUP :
{
SEventQueue *pEvQ, *pEv;
+ ULONG fkbState;
EnterCriticalSection ( &csEventQueue );
+ fkbState = convertwin32keystate ();
pEv = malloc ( sizeof ( SEventQueue ) );
pEv -> pEvent = malloc ( sizeof ( GrMouseEvent ) );
pEv -> pEvent -> flags = GR_M_MIDDLE_UP;
pEv -> pEvent -> x = LOWORD ( lParam );
pEv -> pEvent -> y = HIWORD ( lParam );
+ pEv -> pEvent -> kbstat = fkbState;
pEv -> pNext = NULL;
pEvQ = pEventQueue;
while ( pEvQ -> pNext != NULL ) {
@@ -729,13 +745,16 @@
case WM_RBUTTONUP :
{
SEventQueue *pEvQ, *pEv;
+ ULONG fkbState;
EnterCriticalSection ( &csEventQueue );
+ fkbState = convertwin32keystate ();
pEv = malloc ( sizeof ( SEventQueue ) );
pEv -> pEvent = malloc ( sizeof ( GrMouseEvent ) );
pEv -> pEvent -> flags = GR_M_RIGHT_UP;
pEv -> pEvent -> x = LOWORD ( lParam );
pEv -> pEvent -> y = HIWORD ( lParam );
+ pEv -> pEvent -> kbstat = fkbState;
pEv -> pNext = NULL;
pEvQ = pEventQueue;
while ( pEvQ -> pNext != NULL ) {
@@ -749,13 +768,16 @@
case WM_MOUSEMOVE :
{
SEventQueue *pEvQ, *pEv;
+ ULONG fkbState;
EnterCriticalSection ( &csEventQueue );
+ fkbState = convertwin32keystate ();
pEv = malloc ( sizeof ( SEventQueue ) );
pEv -> pEvent = malloc ( sizeof ( GrMouseEvent ) );
pEv -> pEvent -> flags = GR_M_MOTION;
pEv -> pEvent -> x = LOWORD ( lParam );
pEv -> pEvent -> y = HIWORD ( lParam );
+ pEv -> pEvent -> kbstat = fkbState;
pEv -> pNext = NULL;
pEvQ = pEventQueue;
while ( pEvQ -> pNext != NULL ) {