Refactored duplicated code into an inline function & made more readable
diff --git a/imgui.cpp b/imgui.cpp
index 3308fc3..a86fd72 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -4238,6 +4238,17 @@
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 @@
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 @@
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