From 4a451851ec51ea7c3b79534fa5faebadceedf4df Mon Sep 17 00:00:00 2001 From: Diederick Niehorster Date: Mon, 4 Mar 2013 10:18:35 +0000 Subject: [PATCH] if user opens menu in parent window and then clicked child window, the menu wasn't closed. Fixed (and some cleanup) git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1551 7f0cb862-5218-0410-a997-914c9d46530a --- src/mswin/fg_main_mswin.c | 15 ++++++--------- src/mswin/fg_menu_mswin.c | 3 +++ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/mswin/fg_main_mswin.c b/src/mswin/fg_main_mswin.c index 4ee9008..70984b2 100644 --- a/src/mswin/fg_main_mswin.c +++ b/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/src/mswin/fg_menu_mswin.c b/src/mswin/fg_menu_mswin.c index a5afd46..48e3940 100644 --- a/src/mswin/fg_menu_mswin.c +++ b/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); -- 1.7.10.4