- moving to a new way of handling window changes (position, size, visibility)
[freeglut] / src / mswin / fg_menu_mswin.c
index 3d83693..2db1ea7 100644 (file)
@@ -29,7 +29,8 @@
 #include <GL/freeglut.h>
 #include "../fg_internal.h"
 
-extern void fghGetClientArea( RECT *clientRect, const SFG_Window *window, BOOL wantPosOutside );
+extern void fghGetClientArea( RECT *clientRect, const SFG_Window *window, BOOL posIsOutside );
+extern SFG_Window* fghWindowUnderCursor(SFG_Window *window);
 
 
 GLvoid fgPlatformGetGameModeVMaxExtent( SFG_Window* window, int* x, int* y )
@@ -63,6 +64,8 @@ void fgPlatformCheckMenuDeactivate()
             fgDeactivateMenu(menu->ParentWindow);
         else if (!wnd->IsMenu)      /* Make sure we don't kill the menu when trying to enter a submenu */
         {
+            /* we need to know if user clicked a child window, any displayable area clicked that is not the menu's parent window should close the menu */
+            wnd = fghWindowUnderCursor(wnd);
             if (wnd!=menu->ParentWindow)
                 /* User switched to another FreeGLUT window */
                 fgDeactivateMenu(menu->ParentWindow);
@@ -74,7 +77,7 @@ void fgPlatformCheckMenuDeactivate()
                  */
                 POINT mouse_pos;
                 RECT clientArea;
-                fghGetClientArea(&clientArea,menu->ParentWindow, GL_FALSE);
+                fghGetClientArea(&clientArea,menu->ParentWindow, FALSE);
                 GetCursorPos(&mouse_pos);
                 if ( !PtInRect( &clientArea, mouse_pos ) )
                     fgDeactivateMenu(menu->ParentWindow);