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 ) {