diff --git a/freeglut/freeglut/src/mswin/fg_main_mswin.c b/freeglut/freeglut/src/mswin/fg_main_mswin.c index 4ee9008..70984b2 100644 --- a/freeglut/freeglut/src/mswin/fg_main_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_main_mswin.c @@ -339,7 +339,7 @@ static LRESULT fghWindowProcKeyPress(SFG_Window *window, UINT uMsg, GLboolean ke return 1; } -static SFG_Window* fghWindowUnderCursor(SFG_Window *window) +SFG_Window* fghWindowUnderCursor(SFG_Window *window) { /* Check if the current window that the mouse is over is a child window * of the window the message was sent to. Some events only sent to main window, @@ -551,8 +551,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR break; case WM_SETFOCUS: -/* printf("WM_SETFOCUS: %p\n", window ); */ - + /*printf("WM_SETFOCUS: %p\n", window );*/ lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); SetActiveWindow( window->Window.Handle ); @@ -561,13 +560,11 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR break; case WM_KILLFOCUS: - { -/* printf("WM_KILLFOCUS: %p\n", window ); */ - lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); + /*printf("WM_KILLFOCUS: %p\n", window ); */ + lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); - /* Check if there are any open menus that need to be closed */ - fgPlatformCheckMenuDeactivate(); - } + /* Check if there are any open menus that need to be closed */ + fgPlatformCheckMenuDeactivate(); break; #if 0 diff --git a/freeglut/freeglut/src/mswin/fg_menu_mswin.c b/freeglut/freeglut/src/mswin/fg_menu_mswin.c index a5afd46..48e3940 100644 --- a/freeglut/freeglut/src/mswin/fg_menu_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_menu_mswin.c @@ -30,6 +30,7 @@ #include "../fg_internal.h" extern void fghGetClientArea( RECT *clientRect, const SFG_Window *window ); +extern SFG_Window* fghWindowUnderCursor(SFG_Window *window); GLvoid fgPlatformGetGameModeVMaxExtent( SFG_Window* window, int* x, int* y ) @@ -63,6 +64,8 @@ void fgPlatformCheckMenuDeactivate() fgDeactivateMenu(menu->ParentWindow); else if (!wnd->IsMenu) /* Make sure we don't kill the menu when trying to enter a submenu */ { + /* we need to know if user clicked a child window, any displayable area clicked that is not the menu's parent window should close the menu */ + wnd = fghWindowUnderCursor(wnd); if (wnd!=menu->ParentWindow) /* User switched to another FreeGLUT window */ fgDeactivateMenu(menu->ParentWindow);