/** * @todo Find better name */ static void UI_CloseWindowByRef (uiNode_t *window) { int i; /** @todo If the focus is not on the window we close, we don't need to remove it */ UI_ReleaseInput(); assert(ui_global.windowStackPos); i = UI_GetWindowPositionFromStackByName(window->name); if (i == -1) { Com_Printf("Window '%s' is not on the active stack\n", window->name); return; } /* close child */ while (i + 1 < ui_global.windowStackPos) { uiNode_t *m = ui_global.windowStack[i + 1]; if (WINDOWEXTRADATA(m).parent != window) { break; } UI_Node_WindowClosed(window); WINDOWEXTRADATA(m).parent = NULL; UI_RemoveWindowAtPositionFromStack(i + 1); } /* close the window */ UI_Node_WindowClosed(window); WINDOWEXTRADATA(window).parent = NULL; UI_RemoveWindowAtPositionFromStack(i); UI_InvalidateMouse(); }
void uiNode::onWindowClosed (uiNode_t* node) { uiNode_t* child; for (child = node->firstChild; child; child = child->next) { UI_Node_WindowClosed(child); } }
static void UI_CloseAllWindow (void) { int i; for (i = ui_global.windowStackPos - 1; i >= 0; i--) { uiNode_t *window = ui_global.windowStack[i]; UI_Node_WindowClosed(window); /* safe: unlink window */ WINDOWEXTRADATA(window).parent = NULL; ui_global.windowStackPos--; ui_global.windowStack[ui_global.windowStackPos] = NULL; } }