ColorEdit4: Made IsItemActive() return true when picker popup is active. (#1489)
diff --git a/imgui.cpp b/imgui.cpp
index 7bc95f5..5a0b246 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -10036,7 +10036,7 @@
PopItemWidth();
}
- bool picker_active = false;
+ ImGuiWindow* picker_active_window = NULL;
if (!(flags & ImGuiColorEditFlags_NoSmallPreview))
{
if (!(flags & ImGuiColorEditFlags_NoInputs))
@@ -10058,7 +10058,7 @@
if (BeginPopup("picker"))
{
- picker_active = true;
+ picker_active_window = g.CurrentWindow;
if (label != label_display_end)
{
TextUnformatted(label, label_display_end);
@@ -10080,7 +10080,7 @@
}
// Convert back
- if (!picker_active)
+ if (picker_active_window == NULL)
{
if (!value_changed_as_float)
for (int n = 0; n < 4; n++)
@@ -10100,6 +10100,10 @@
PopID();
EndGroup();
+ // When picker is being actively used, use its active id so IsItemActive() will function on ColorEdit4().
+ if (picker_active_window && g.ActiveId != 0 && g.ActiveIdWindow == picker_active_window)
+ window->DC.LastItemId = g.ActiveId;
+
return value_changed;
}