When receiving WM_SETFOCUS, check if its child window that should
[freeglut] / src / fg_menu.c
index 3ad2cb1..65ec674 100644 (file)
@@ -29,6 +29,7 @@
 #include <GL/freeglut.h>
 #include "fg_internal.h"
 
+
 /* -- DEFINITIONS ---------------------------------------------------------- */
 
 /*
@@ -403,7 +404,7 @@ static void fghDisplayMenuBox( SFG_Menu* menu )
 
 /*
  * Private static function to set the parent window of a submenu and all
- * of its submenus
+ * of its submenus.
  */
 static void fghSetMenuParentWindow( SFG_Window *window, SFG_Menu *menu )
 {
@@ -624,27 +625,7 @@ GLboolean fgCheckActiveMenu ( SFG_Window *window, int button, GLboolean pressed,
              * is dealt with in the WM_KILLFOCUS handler of fgPlatformWindowProc
              */
         {
-            if (window->ActiveMenu->ParentWindow)
-                fgDeactivateMenu( window->ActiveMenu->ParentWindow );
-            else
-            {
-                /* 
-                 * Its a rare occasion that a window has an ActiveMenu but
-                 * that menus does not have a parent window. It happens
-                 * however in the corner case bug when one opens a menu in
-                 * a main window, then opens a different menu in this main
-                 * window's child (you now have two menus open
-                 * simultaneously, thats the bug) and then click somewhere
-                 * else that causes both menus to close. One of them is
-                 * then not properly cleaned up. This finishes the cleaning
-                 * and minimizes the impact on the user, he only needs one
-                 * extra mouse click.
-                 */
-                fghSetMenuParentWindow ( NULL, window->ActiveMenu );
-                window->ActiveMenu->IsActive = GL_FALSE;
-                window->ActiveMenu->ActiveEntry = NULL;
-                window->ActiveMenu = NULL;
-            }
+            fgDeactivateMenu( window->ActiveMenu->ParentWindow );
         }
 
         /*
@@ -683,10 +664,10 @@ void fgDeactivateMenu( SFG_Window *window )
     SFG_Menu* menu;
     SFG_MenuEntry *menuEntry;
 
-    /* Check if there is an active menu attached to this window... */
+    /* Did we find an active window? */
     freeglut_return_if_fail( window );
+    /* Check if there is an active menu attached to this window... */
     menu = window->ActiveMenu;
-    /* Did we find an active window? */
     freeglut_return_if_fail( menu );
 
     parent_window = menu->ParentWindow;
@@ -711,7 +692,7 @@ void fgDeactivateMenu( SFG_Window *window )
     {
         menuEntry->IsActive = GL_FALSE;
 
-        /* Is that an active submenu by any case? */
+        /* Is that an active submenu by any chance? */
         if( menuEntry->SubMenu )
             fghDeactivateSubMenu( menuEntry );
     }