From: <dc...@us...> - 2012-07-21 14:18:19
|
Revision: 1356 http://freeglut.svn.sourceforge.net/freeglut/?rev=1356&view=rev Author: dcnieho Date: 2012-07-21 14:18:13 +0000 (Sat, 21 Jul 2012) Log Message: ----------- some clean up in WM_KILLFOCUS handler Modified Paths: -------------- trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c Modified: trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c =================================================================== --- trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c 2012-07-21 14:15:39 UTC (rev 1355) +++ trunk/freeglut/freeglut/src/mswin/fg_main_mswin.c 2012-07-21 14:18:13 UTC (rev 1356) @@ -495,7 +495,7 @@ 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 @@ 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; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |