+ /* The mouse cursor is somewhere over our box, check it out. */
+ menuEntry = fghFindMenuEntry( menu, menuID + 1 );
+ FREEGLUT_INTERNAL_ERROR_EXIT( menuEntry, "Cannot find menu entry",
+ "fghCheckMenuStatus" );
+
+ menuEntry->IsActive = GL_TRUE;
+ menuEntry->Ordinal = menuID;
+
+ /*
+ * If this is not the same as the last active menu entry, deactivate
+ * the previous entry. Specifically, if the previous active entry
+ * was a submenu then deactivate it.
+ */
+ if( menu->ActiveEntry && ( menuEntry != menu->ActiveEntry ) )
+ if( menu->ActiveEntry->SubMenu )
+ fghDeactivateSubMenu( menu->ActiveEntry );
+
+ menu->ActiveEntry = menuEntry;
+ menu->IsActive = GL_TRUE;
+
+ /*
+ * OKi, we have marked that entry as active, but it would be also
+ * nice to have its contents updated, in case it's a sub menu.
+ * Also, ignore the return value of the check function:
+ */
+ if( menuEntry->SubMenu )
+ {
+ if ( ! menuEntry->SubMenu->IsActive )
+ {
+ SFG_Window *current_window = fgStructure.Window;
+
+ /* Set up the initial menu position now... */
+ menuEntry->SubMenu->IsActive = GL_TRUE;
+
+ /* Set up the initial submenu position now: */
+ menuEntry->SubMenu->X = menu->X + menu->Width;
+ menuEntry->SubMenu->Y = menu->Y +
+ menuEntry->Ordinal * FREEGLUT_MENU_HEIGHT;
+
+ if( menuEntry->SubMenu->X + menuEntry->SubMenu->Width >
+ glutGet( GLUT_SCREEN_WIDTH ) )
+ menuEntry->SubMenu->X = menu->X -
+ menuEntry->SubMenu->Width;
+
+ if( menuEntry->SubMenu->Y + menuEntry->SubMenu->Height >
+ glutGet( GLUT_SCREEN_HEIGHT ) )
+ menuEntry->SubMenu->Y -= ( menuEntry->SubMenu->Height -
+ FREEGLUT_MENU_HEIGHT -
+ 2 * FREEGLUT_MENU_BORDER );
+
+ fgSetWindow( menuEntry->SubMenu->Window );
+ glutPositionWindow( menuEntry->SubMenu->X,
+ menuEntry->SubMenu->Y );
+ glutReshapeWindow( menuEntry->SubMenu->Width,
+ menuEntry->SubMenu->Height );
+ glutPopWindow( );
+ glutShowWindow( );
+ menuEntry->SubMenu->Window->ActiveMenu = menuEntry->SubMenu;
+ fgSetWindow( current_window );
+ }
+
+ fghCheckMenuStatus( window, menuEntry->SubMenu );
+
+ /* Activate it because its parent entry is active */
+ menuEntry->SubMenu->IsActive = GL_TRUE;
+ }
+
+ /* Report back that we have caught the menu cursor */
+ return GL_TRUE;
+ }