diff --git a/imgui.cpp b/imgui.cpp index 3308fc3f..a86fd722 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -4238,6 +4238,17 @@ void ImGui::LabelText(const char* label, const char* fmt, ...) va_end(args); } +static inline bool IsWindowContentHoverable(ImGuiWindow* window) +{ + ImGuiState& g = *GImGui; + + ImGuiWindow* focused_window = g.FocusedWindow; + if (focused_window && (focused_window->Flags & ImGuiWindowFlags_Popup) != 0 && focused_window->WasVisible && focused_window != window) + return false; + + return true; +} + static bool IsHovered(const ImRect& bb, ImGuiID id) { ImGuiState& g = *GImGui; @@ -4247,12 +4258,8 @@ static bool IsHovered(const ImRect& bb, ImGuiID id) if (g.HoveredRootWindow == window->RootWindow) { if ((g.ActiveId == 0 || g.ActiveId == id || g.ActiveIdIsFocusedOnly) && IsMouseHoveringRect(bb)) - { - if (g.FocusedWindow == g.HoveredRootWindow || !((g.FocusedWindow->Flags & ImGuiWindowFlags_Popup) != 0 && g.FocusedWindow->WasVisible)) - { + if (IsWindowContentHoverable(g.HoveredRootWindow)) return true; - } - } } } return false; @@ -7008,7 +7015,7 @@ static bool ItemAdd(const ImRect& bb, const ImGuiID* id) window->DC.LastItemHoveredRect = true; window->DC.LastItemHoveredAndUsable = false; if (g.ActiveId == 0 || (id && g.ActiveId == *id) || g.ActiveIdIsFocusedOnly || (g.ActiveId == window->MoveID)) - if (g.FocusedWindow == window || !((g.FocusedWindow->Flags & ImGuiWindowFlags_Popup) != 0 && g.FocusedWindow->WasVisible)) + if (IsWindowContentHoverable(window)) window->DC.LastItemHoveredAndUsable = true; } else