some clean up in WM_KILLFOCUS handler
authorDiederick Niehorster <dcnieho@gmail.com>
Sat, 21 Jul 2012 14:18:13 +0000 (14:18 +0000)
committerDiederick Niehorster <dcnieho@gmail.com>
Sat, 21 Jul 2012 14:18:13 +0000 (14:18 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1356 7f0cb862-5218-0410-a997-914c9d46530a

src/mswin/fg_main_mswin.c

index a992b2b..3e1a86f 100644 (file)
@@ -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;