void fgPlatformVisibilityWork( SFG_Window* window ) { /* Visibility status of window gets updated in the window message handlers above */ SFG_Window *win = window; switch (window->State.DesiredVisibility) { case DesireHiddenState: fgPlatformHideWindow( window ); break; case DesireIconicState: /* Call on top-level window */ while (win->Parent) win = win->Parent; fgPlatformIconifyWindow( win ); break; case DesireNormalState: fgPlatformShowWindow( window ); break; } }
/* * Deactivates a menu pointed by the function argument. */ static void fghDeactivateSubMenu( SFG_MenuEntry *menuEntry ) { SFG_MenuEntry *subMenuIter; /* Hide the present menu's window */ fgPlatformHideWindow( menuEntry->SubMenu->Window ); /* Forget about having that menu active anymore, now: */ menuEntry->SubMenu->Window->ActiveMenu = NULL; menuEntry->SubMenu->IsActive = GL_FALSE; menuEntry->SubMenu->ActiveEntry = NULL; /* Hide all submenu windows, and the root menu's window. */ for ( subMenuIter = (SFG_MenuEntry *)menuEntry->SubMenu->Entries.First; subMenuIter; subMenuIter = (SFG_MenuEntry *)subMenuIter->Node.Next ) { subMenuIter->IsActive = GL_FALSE; /* Is that an active submenu by any case? */ if( subMenuIter->SubMenu ) fghDeactivateSubMenu( subMenuIter ); } }
void fgPlatformVisibilityWork(SFG_Window* window) { /* Visibility status of window should get updated in the window message handlers * For now, none of these functions called below do anything, so don't worry * about it */ SFG_Window *win = window; switch (window->State.DesiredVisibility) { case DesireHiddenState: fgPlatformHideWindow( window ); break; case DesireIconicState: /* Call on top-level window */ while (win->Parent) win = win->Parent; fgPlatformIconifyWindow( win ); break; case DesireNormalState: fgPlatformShowWindow( window ); break; } }
void fgDeactivateMenu( SFG_Window *window ) { SFG_Window *parent_window = NULL; SFG_Menu* menu; SFG_MenuEntry *menuEntry; /* 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; freeglut_return_if_fail( menu ); /* Check if we are already deactivating this menu, abort in that case (glutHideWindow below can cause this function to be called again on the same menu..) */ if (menu==menuDeactivating) return; menuDeactivating = menu; parent_window = menu->ParentWindow; /* Hide the present menu's window */ fgPlatformHideWindow( menu->Window ); /* Forget about having that menu active anymore, now: */ menu->Window->ActiveMenu = NULL; menu->ParentWindow->ActiveMenu = NULL; fghSetMenuParentWindow ( NULL, menu ); menu->IsActive = GL_FALSE; menu->ActiveEntry = NULL; fgState.ActiveMenus--; /* Hide all submenu windows, and the root menu's window. */ for ( menuEntry = ( SFG_MenuEntry * )menu->Entries.First; menuEntry; menuEntry = ( SFG_MenuEntry * )menuEntry->Node.Next ) { menuEntry->IsActive = GL_FALSE; /* Is that an active submenu by any chance? */ if( menuEntry->SubMenu ) fghDeactivateSubMenu( menuEntry ); } /* Done deactivating menu */ menuDeactivating = NULL; /* Menu status callback */ if (fgState.MenuStateCallback || fgState.MenuStatusCallback) { fgStructure.CurrentMenu = menu; fgStructure.CurrentWindow = parent_window; if (fgState.MenuStateCallback) fgState.MenuStateCallback(GLUT_MENU_NOT_IN_USE); if (fgState.MenuStatusCallback) { /* Get cursor position relative to parent_window's client area */ SFG_XYUse mouse_pos; fghPlatformGetCursorPos(parent_window, GL_TRUE, &mouse_pos); fgState.MenuStatusCallback(GLUT_MENU_NOT_IN_USE, mouse_pos.X, mouse_pos.Y); } } }