Internals: Wired a ImGuiItemStatusFlags_ValueChanged into ItemStatusFlags, for an hypothetical IsItemValueChanged() function. (#2034)
diff --git a/imgui.cpp b/imgui.cpp
index faf643d..1e36dc8 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -2344,7 +2344,9 @@
(void)id; // Avoid unused variable warnings when asserts are compiled out.
ImGuiContext& g = *GImGui;
IM_ASSERT(g.ActiveId == id || g.ActiveId == 0 || g.DragDropActive);
+ //IM_ASSERT(g.CurrentWindow->DC.LastItemId == id);
g.ActiveIdValueChanged = true;
+ g.CurrentWindow->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ValueChanged;
}
static inline bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFlags flags)
diff --git a/imgui_internal.h b/imgui_internal.h
index a847105..07b6890 100644
--- a/imgui_internal.h
+++ b/imgui_internal.h
@@ -268,7 +268,8 @@
{
ImGuiItemStatusFlags_None = 0,
ImGuiItemStatusFlags_HoveredRect = 1 << 0,
- ImGuiItemStatusFlags_HasDisplayRect = 1 << 1
+ ImGuiItemStatusFlags_HasDisplayRect = 1 << 1,
+ ImGuiItemStatusFlags_ValueChanged = 1 << 2 // Value exposed by item was edited in the current frame (should match the bool return value of most widgets)
};
// FIXME: this is in development, not exposed/functional as a generic feature yet.
@@ -648,7 +649,7 @@
float ActiveIdTimer;
bool ActiveIdIsJustActivated; // Set at the time of activation for one frame
bool ActiveIdAllowOverlap; // Active widget allows another widget to steal active id (generally for overlapping widgets, but not always)
- bool ActiveIdValueChanged;
+ bool ActiveIdValueChanged; // Was the value associated to the widget changed over the course of the Active state.
bool ActiveIdPreviousFrameIsAlive;
bool ActiveIdPreviousFrameValueChanged;
int ActiveIdAllowNavDirFlags; // Active widget allows using directional navigation (e.g. can activate a button and move away from it)