From: Diederick Niehorster Date: Sat, 21 Jul 2012 14:18:13 +0000 (+0000) Subject: some clean up in WM_KILLFOCUS handler X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=commitdiff_plain;h=b6a12cbf5c40f2b0a4bdeb476d946d5eaa58476d;p=freeglut some clean up in WM_KILLFOCUS handler git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1356 7f0cb862-5218-0410-a997-914c9d46530a --- diff --git a/src/mswin/fg_main_mswin.c b/src/mswin/fg_main_mswin.c index a992b2b..3e1a86f 100644 --- a/src/mswin/fg_main_mswin.c +++ b/src/mswin/fg_main_mswin.c @@ -495,7 +495,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, case WM_KILLFOCUS: { SFG_Menu* menu = NULL; -/* printf("WM_KILLFOCUS (ismenu: %i): %p\n", window->IsMenu, window ); */ + printf("WM_KILLFOCUS: %p\n", window ); lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); INVOKE_WCB( *window, Entry, ( GLUT_LEFT ) ); @@ -504,26 +504,41 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, application or FreeGLUT window (if one is running multiple windows). If so, close menu the active menu. */ - if ( fgStructure.CurrentMenu ) + if ( fgStructure.Menus.First ) menu = fgGetActiveMenu(); if ( menu ) { SFG_Window* wnd = NULL; - HWND hwnd = GetForegroundWindow(); /* Get window with current focus */ + HWND hwnd = GetFocus(); /* Get window with current focus - NULL for non freeglut windows */ + printf(" hwnd: %p\n",hwnd); if (hwnd) - /* See if its one of our windows */ + /* See which of our windows it is */ wnd = fgWindowByHandle(hwnd); + //printf(" got menu: %p\n",menu); + + printf(" wnd: %p, wnd->AM->PW: %p, menu->PW: %p\n",wnd,wnd&&wnd->ActiveMenu?wnd->ActiveMenu->ParentWindow:0,menu->ParentWindow); + if (wnd) + printf(" wnd menu: %i, wnd->ActiveMenu: %p, wnd->Parent: %p\n",wnd->IsMenu,wnd->ActiveMenu,wnd->Parent); + if (!hwnd || !wnd) + { /* User switched to another application*/ fgDeactivateMenu(menu->ParentWindow); - else if ( - ( wnd->IsMenu && wnd->ActiveMenu && wnd->ActiveMenu->ParentWindow!=menu->ParentWindow) || /* Make sure we don't kill the menu when trying to enter a submenu */ - (!wnd->IsMenu && wnd!=menu->ParentWindow) - ) + printf(" -> kill1\n"); + } + else if (!wnd->IsMenu && wnd!=menu->ParentWindow) + { /* User switched to another FreeGLUT window */ fgDeactivateMenu(menu->ParentWindow); + printf(" -> kill2\n"); + + } + else + { + printf(" -> survive\n"); + } } } break;