if user opens menu in parent window and then clicked child window, the menu wasn't closed. Fixed (and some cleanup)

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1551 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
dcnieho 2013-03-04 10:18:35 +00:00
parent 5e97fed06a
commit 9fa8bcf4db
2 changed files with 9 additions and 9 deletions

View File

@ -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 ); */
/*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();
}
break;
#if 0

View File

@ -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);