X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmswin%2Ffg_menu_mswin.c;h=2db1ea731f5aa0381d4582ae9330b5ea93e0bcb3;hb=99d53f15a4216240088132f6af9cb194b519b1cc;hp=0d6a599d1c21b235fb3ecc89069e910fa58e1037;hpb=14a9bd8b0a7e13dfaffbe5e6c43f24d340fccf86;p=freeglut diff --git a/src/mswin/fg_menu_mswin.c b/src/mswin/fg_menu_mswin.c index 0d6a599..2db1ea7 100644 --- a/src/mswin/fg_menu_mswin.c +++ b/src/mswin/fg_menu_mswin.c @@ -29,7 +29,8 @@ #include #include "../fg_internal.h" -extern RECT fghGetClientArea( const SFG_Window *window, BOOL wantPosOutside ); +extern void fghGetClientArea( RECT *clientRect, const SFG_Window *window, BOOL posIsOutside ); +extern SFG_Window* fghWindowUnderCursor(SFG_Window *window); GLvoid fgPlatformGetGameModeVMaxExtent( SFG_Window* window, int* x, int* y ) @@ -63,17 +64,20 @@ 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); else { /* Check if focus lost because non-client area of - * window was pressed (pressing on client area is - * handled in fgCheckActiveMenu) - */ + * window was pressed (pressing on client area is + * handled in fgCheckActiveMenu) + */ POINT mouse_pos; - RECT clientArea = fghGetClientArea(menu->ParentWindow, GL_FALSE); + RECT clientArea; + fghGetClientArea(&clientArea,menu->ParentWindow, FALSE); GetCursorPos(&mouse_pos); if ( !PtInRect( &clientArea, mouse_pos ) ) fgDeactivateMenu(menu->ParentWindow);