From: Diederick Niehorster Date: Tue, 26 Feb 2013 15:20:18 +0000 (+0000) Subject: win API docs say that defWndProc must be called for system keydown/keyup X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=commitdiff_plain;h=73fd361ca9d48122af91ae9d5d59ee1d64d539f6;hp=3b8c74a07a7e9de271191dca77ff475d50499c04;p=freeglut win API docs say that defWndProc must be called for system keydown/keyup git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1506 7f0cb862-5218-0410-a997-914c9d46530a --- diff --git a/src/mswin/fg_main_mswin.c b/src/mswin/fg_main_mswin.c index 7f33ac1..6de07a2 100644 --- a/src/mswin/fg_main_mswin.c +++ b/src/mswin/fg_main_mswin.c @@ -170,7 +170,7 @@ static int fgPlatformGetModifiers (void) ( GetKeyState( VK_RMENU ) < 0 )) ? GLUT_ACTIVE_ALT : 0 ); } -static void fghKeyPress(SFG_Window *window, GLboolean keydown, WPARAM wParam, LPARAM lParam) +static LRESULT fghKeyPress(SFG_Window *window, UINT uMsg, GLboolean keydown, WPARAM wParam, LPARAM lParam) { static unsigned char lControl = 0, lShift = 0, lAlt = 0, rControl = 0, rShift = 0, rAlt = 0; @@ -180,7 +180,7 @@ static void fghKeyPress(SFG_Window *window, GLboolean keydown, WPARAM wParam, LP /* if keydown, check for repeat */ if( keydown && ( fgState.KeyRepeat==GLUT_KEY_REPEAT_OFF || window->State.IgnoreKeyRepeat==GL_TRUE ) && (HIWORD(lParam) & KF_REPEAT) ) - return; + return 1; /* Remember the current modifiers state so user can query it from their callback */ fgState.Modifiers = fgPlatformGetModifiers( ); @@ -315,6 +315,12 @@ static void fghKeyPress(SFG_Window *window, GLboolean keydown, WPARAM wParam, LP ); fgState.Modifiers = INVALID_MODIFIERS; + + /* SYSKEY events should be sent to default window proc for system to handle them */ + if (uMsg==WM_SYSKEYDOWN || uMsg==WM_SYSKEYUP) + return DefWindowProc( window->Window.Handle, uMsg, wParam, lParam ); + else + return 1; } /* @@ -787,14 +793,14 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR case WM_KEYDOWN: if (child_window) window = child_window; - fghKeyPress(window,GL_TRUE,wParam,lParam); + lRet = fghKeyPress(window,uMsg,GL_TRUE,wParam,lParam); break; case WM_SYSKEYUP: case WM_KEYUP: if (child_window) window = child_window; - fghKeyPress(window,GL_FALSE,wParam,lParam); + lRet = fghKeyPress(window,uMsg,GL_FALSE,wParam,lParam); break; case WM_SYSCHAR: