MCPcopy Create free account
hub / github.com/cinder/Cinder / IsRootOfOpenMenuSet

Function IsRootOfOpenMenuSet

src/imgui/imgui_widgets.cpp:9103–9125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9101}
9102
9103static bool IsRootOfOpenMenuSet()
9104{
9105 ImGuiContext& g = *GImGui;
9106 ImGuiWindow* window = g.CurrentWindow;
9107 if ((g.OpenPopupStack.Size <= g.BeginPopupStack.Size) || (window->Flags & ImGuiWindowFlags_ChildMenu))
9108 return false;
9109
9110 // Initially we used 'upper_popup->OpenParentId == window->IDStack.back()' to differentiate multiple menu sets from each others
9111 // (e.g. inside menu bar vs loose menu items) based on parent ID.
9112 // This would however prevent the use of e.g. PushID() user code submitting menus.
9113 // Previously this worked between popup and a first child menu because the first child menu always had the _ChildWindow flag,
9114 // making hovering on parent popup possible while first child menu was focused - but this was generally a bug with other side effects.
9115 // Instead we don't treat Popup specifically (in order to consistently support menu features in them), maybe the first child menu of a Popup
9116 // doesn't have the _ChildWindow flag, and we rely on this IsRootOfOpenMenuSet() check to allow hovering between root window/popup and first child menu.
9117 // In the end, lack of ID check made it so we could no longer differentiate between separate menu sets. To compensate for that, we at least check parent window nav layer.
9118 // This fixes the most common case of menu opening on hover when moving between window content and menu bar. Multiple different menu sets in same nav layer would still
9119 // open on hover, but that should be a lesser problem, because if such menus are close in proximity in window content then it won't feel weird and if they are far apart
9120 // it likely won't be a problem anyone runs into.
9121 const ImGuiPopupData* upper_popup = &g.OpenPopupStack[g.BeginPopupStack.Size];
9122 if (window->DC.NavLayerCurrent != upper_popup->ParentNavLayer)
9123 return false;
9124 return upper_popup->Window && (upper_popup->Window->Flags & ImGuiWindowFlags_ChildMenu) && ImGui::IsWindowChildOf(upper_popup->Window, window, true);
9125}
9126
9127bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled)
9128{

Callers 2

BeginMenuExMethod · 0.85
MenuItemExMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected