some clean up in WM_KILLFOCUS handler
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1356 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
4a14f60a4e
commit
2be86de619
@ -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;
|
||||
|
Reference in New Issue
Block a user