X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fmswin%2Ffg_menu_mswin.c;h=93c538ef6501e36bb4310f4967474b431f529978;hb=a00c7ee3552b527ac6b375d6a6ca42f90770ddc3;hp=2db1ea731f5aa0381d4582ae9330b5ea93e0bcb3;hpb=99d53f15a4216240088132f6af9cb194b519b1cc;p=freeglut diff --git a/src/mswin/fg_menu_mswin.c b/src/mswin/fg_menu_mswin.c index 2db1ea7..93c538e 100644 --- a/src/mswin/fg_menu_mswin.c +++ b/src/mswin/fg_menu_mswin.c @@ -29,8 +29,6 @@ #include #include "../fg_internal.h" -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 ) @@ -39,50 +37,24 @@ GLvoid fgPlatformGetGameModeVMaxExtent( SFG_Window* window, int* x, int* y ) *y = glutGet ( GLUT_SCREEN_HEIGHT ); } -void fgPlatformCheckMenuDeactivate() +void fgPlatformCheckMenuDeactivate(HWND newFocusWnd) { - /* If we have an open menu, see if the open menu should be closed - * when focus was lost because user either switched - * application or FreeGLUT window (if one is running multiple - * windows). If so, close menu the active menu. + /* User/system switched application focus. + * If we have an open menu, close it. */ SFG_Menu* menu = NULL; - if ( fgStructure.Menus.First ) + if ( fgState.ActiveMenus ) menu = fgGetActiveMenu(); if ( menu ) { - SFG_Window* wnd = NULL; - HWND hwnd = GetFocus(); /* Get window with current focus - NULL for non freeglut windows */ - if (hwnd) - /* See which of our windows it is */ - wnd = fgWindowByHandle(hwnd); - - if (!hwnd || !wnd) - /* User switched to another application*/ + if (newFocusWnd != menu->Window->Window.Handle) + /* When in GameMode, the menu's parent window will lose focus when the menu is opened. + * This is sadly necessary as we need to do an activating ShowWindow() for the menu + * to pop up over the gamemode window + */ 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) - */ - POINT mouse_pos; - RECT clientArea; - fghGetClientArea(&clientArea,menu->ParentWindow, FALSE); - GetCursorPos(&mouse_pos); - if ( !PtInRect( &clientArea, mouse_pos ) ) - fgDeactivateMenu(menu->ParentWindow); - } - } } };