- /* Window has an active menu, it absorbs any mouse click */
- if( window->ActiveMenu )
- {
- if( window == window->ActiveMenu->ParentWindow )
- {
- window->ActiveMenu->Window->State.MouseX =
- event.xbutton.x_root - window->ActiveMenu->X;
- window->ActiveMenu->Window->State.MouseY =
- event.xbutton.y_root - window->ActiveMenu->Y;
- }
-
- /* In the menu, invoke the callback and deactivate the menu*/
- if( fgCheckActiveMenu( window->ActiveMenu->Window,
- window->ActiveMenu ) )
- {
- /*
- * Save the current window and menu and set the current
- * window to the window whose menu this is
- */
- SFG_Window *save_window = fgStructure.Window;
- SFG_Menu *save_menu = fgStructure.Menu;
- SFG_Window *parent_window =
- window->ActiveMenu->ParentWindow;
- fgSetWindow( parent_window );
- fgStructure.Menu = window->ActiveMenu;
-
- /* Execute the menu callback */
- fgExecuteMenuCallback( window->ActiveMenu );
- fgDeactivateMenu( parent_window );
-
- /* Restore the current window and menu */
- fgSetWindow( save_window );
- fgStructure.Menu = save_menu;
- }
- else if( pressed )
- /*
- * Outside the menu, deactivate if it's a downclick
- *
- * XXX This isn't enough. A downclick outside of
- * XXX the interior of our freeglut windows should also
- * XXX deactivate the menu. This is more complicated.
- */
- fgDeactivateMenu( window->ActiveMenu->ParentWindow );
-
- /*
- * XXX Why does an active menu require a redisplay at
- * XXX this point? If this can come out cleanly, then
- * XXX it probably should do so; if not, a comment should
- * XXX explain it.
- */
- window->State.Redisplay = GL_TRUE;