MCPcopy Create free account
hub / github.com/KebsCS/KBotExt / IsRootOfOpenMenuSet

Function IsRootOfOpenMenuSet

KBotExt/imgui/imgui_widgets.cpp:7113–7135  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7111}
7112
7113static bool IsRootOfOpenMenuSet()
7114{
7115 ImGuiContext& g = *GImGui;
7116 ImGuiWindow* window = g.CurrentWindow;
7117 if ((g.OpenPopupStack.Size <= g.BeginPopupStack.Size) || (window->Flags & ImGuiWindowFlags_ChildMenu))
7118 return false;
7119
7120 // Initially we used 'upper_popup->OpenParentId == window->IDStack.back()' to differentiate multiple menu sets from each others
7121 // (e.g. inside menu bar vs loose menu items) based on parent ID.
7122 // This would however prevent the use of e.g. PushID() user code submitting menus.
7123 // Previously this worked between popup and a first child menu because the first child menu always had the _ChildWindow flag,
7124 // making hovering on parent popup possible while first child menu was focused - but this was generally a bug with other side effects.
7125 // Instead we don't treat Popup specifically (in order to consistently support menu features in them), maybe the first child menu of a Popup
7126 // doesn't have the _ChildWindow flag, and we rely on this IsRootOfOpenMenuSet() check to allow hovering between root window/popup and first child menu.
7127 // 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.
7128 // 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
7129 // 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
7130 // it likely won't be a problem anyone runs into.
7131 const ImGuiPopupData* upper_popup = &g.OpenPopupStack[g.BeginPopupStack.Size];
7132 if (window->DC.NavLayerCurrent != upper_popup->ParentNavLayer)
7133 return false;
7134 return upper_popup->Window && (upper_popup->Window->Flags & ImGuiWindowFlags_ChildMenu) && ImGui::IsWindowChildOf(upper_popup->Window, window, true);
7135}
7136
7137bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled)
7138{

Callers 2

BeginMenuExMethod · 0.85
MenuItemExMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected