MCPcopy Create free account
hub / github.com/Wemino/MarkerPatch / IsRootOfOpenMenuSet

Function IsRootOfOpenMenuSet

include/imgui/imgui_widgets.cpp:9320–9342  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9318}
9319
9320static bool IsRootOfOpenMenuSet()
9321{
9322 ImGuiContext& g = *GImGui;
9323 ImGuiWindow* window = g.CurrentWindow;
9324 if ((g.OpenPopupStack.Size <= g.BeginPopupStack.Size) || (window->Flags & ImGuiWindowFlags_ChildMenu))
9325 return false;
9326
9327 // Initially we used 'upper_popup->OpenParentId == window->IDStack.back()' to differentiate multiple menu sets from each others
9328 // (e.g. inside menu bar vs loose menu items) based on parent ID.
9329 // This would however prevent the use of e.g. PushID() user code submitting menus.
9330 // Previously this worked between popup and a first child menu because the first child menu always had the _ChildWindow flag,
9331 // making hovering on parent popup possible while first child menu was focused - but this was generally a bug with other side effects.
9332 // Instead we don't treat Popup specifically (in order to consistently support menu features in them), maybe the first child menu of a Popup
9333 // doesn't have the _ChildWindow flag, and we rely on this IsRootOfOpenMenuSet() check to allow hovering between root window/popup and first child menu.
9334 // 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.
9335 // 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
9336 // 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
9337 // it likely won't be a problem anyone runs into.
9338 const ImGuiPopupData* upper_popup = &g.OpenPopupStack[g.BeginPopupStack.Size];
9339 if (window->DC.NavLayerCurrent != upper_popup->ParentNavLayer)
9340 return false;
9341 return upper_popup->Window && (upper_popup->Window->Flags & ImGuiWindowFlags_ChildMenu) && ImGui::IsWindowChildOf(upper_popup->Window, window, true);
9342}
9343
9344bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled)
9345{

Callers 2

BeginMenuExMethod · 0.85
MenuItemExMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected