From e4f7c5c7223876c8796dfe5be5877cb5747fae0a Mon Sep 17 00:00:00 2001 From: ocornut Date: Mon, 20 Jul 2026 14:26:57 +0200 Subject: [PATCH] Disabling ImGuiItemFlags_LiveEditOnInputScalar by default! (#9476, #701) --- docs/CHANGELOG.txt | 39 +++++++++++++++++++++++---------------- imgui.cpp | 5 +++++ imgui.h | 14 ++++++-------- imgui_internal.h | 2 +- 4 files changed, 35 insertions(+), 25 deletions(-) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 5cecbdb37..2c88d5706 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -47,6 +47,12 @@ Breaking Changes: of directly poking to io.ConfigColorEditFlags. More consistent and easier to discover. - Drag and Drop: commented out legacy name `ImGuiDragDropFlags_SourceAutoExpirePayload` which obsoleted in 1.90.9 (July 2024). Use `ImGuiDragDropFlags_PayloadAutoExpire`. +- DragXXX, SliderXXX, InputScalar: with `ImGuiItemFlags_LiveEditOnInputScalar` now + defaulting to being disabled: inputting a value with the keyboard doesn't write + intermediate values to the backing variable. (#9476) + Before: DragFloat() with user typing "123" --> write back 1, then 12, then 123. + After: DragFloat() with user typing "123" --> write back 123 when validated/unfocused. + You can enable the flag back for a given scope if needed by specific widget/behavior. Other Changes: @@ -63,9 +69,13 @@ Other Changes: - Added `ImGuiItemFlags_LiveEditOnInputText` and `ImGuiItemFlags_LiveEditOnInputScalar` flags to configure the timing of applying edits of backing variables when typing values using a keyboard. - (#701, #9476, #3936, #3946, #5904, #6284, #8149, #8065, #8665, #9117, #9299, #700, #1351, + (#9476, #701, #3936, #3946, #5904, #6284, #8149, #8065, #8665, #9117, #9299, #700, #1351, #1875, #2060, #2215, #2380, #2550, #3083, #3338, #3556, #4373, #4714, #4885, #5184, #5777, #6707, #6766, #8004, #8303, #8915, #9308) + - ImGuiItemFlags_LiveEditOnInputText is enabled by default (same as before): + - The expectation is that for strings/text, enabling LiveEdit is a better default. + - ImGuiItemFlags_LiveEditOnInputScalar is disabled by default (new behavior): + - The expectation is that for numeric/scalars values, disabling LiveEdit is a better default. - Until now: - Edits where always applied immediately to backing variable, which is equivalent to the `ImGuiItemFlags_LiveEditXXX` flags being enabled. @@ -76,28 +86,25 @@ Other Changes: Workarounds often required a backing store for scalar values, and there were also a few niggles related to `IsItemDeactivatedAfterEdit()` when using +/- buttons of an `InputInt()` widgets. - Many of those situations can now be naturally simplified by disabling - `ImGuiItemFlags_LiveEditOnInputScalar`, which is expected to become the default. + - Many of those situations can now be naturally simplified when disabling + `ImGuiItemFlags_LiveEditOnInputScalar` is disabled. - The new flags allows disabling this behavior selectively for strings fields such as `InputText()` vs scalar fields: `SliderInt()`, `InputFloat()`, etc. - When LiveEdit is disabled, edits are applied when pressing enter, tabbing out, clearing a field or deactivating due to a focus loss. - - The flag may be altered programmatically: - PushItemFlag(ImGuiItemFlags_LiveEditOnInputScalar, false); // Disable for scalars + - The flag may be altered programmatically, e.g. for the entire frame scope: + NewFrame(); + PushItemFlag(ImGuiItemFlags_LiveEditOnInputScalar, true); // Enable for scalars for the whole frame + .... + PopItemFlag(); + EndFrame(); + Or for a specific widget: + PushItemFlag(ImGuiItemFlags_LiveEditOnInput, true); // Enable for one widget SliderInt(...); PopItemFlag(); - PushItemFlag(ImGuiItemFlags_LiveEditOnInput, true); // Enable for all - SliderInt(...); - PopItemFlag(); - But with upcoming new defaults it is expected you shouldn't touch them much. - - Both flags currently defaults to true, which matches previous behavior. - - The expectation is that for strings/text, enabling LiveEdit is a better default. - - The expectation is that for scalars, disable LiveEdit is a better default. - - The short-term intent is to change `ImGuiItemFlags_LiveEditOnInputScalar` to - default to being disabled, as soon as we get more feedback from users (SOON). - We intentionally are not adding `io.ConfigLiveEditXXX` fields to dictate the - default value of each `ImGuiItemFlags_LiveEditXXX`, because this is not - expected to be a user preference but a programmer/widget preferences. + default value of each `ImGuiItemFlags_LiveEditXXX`, because this is not expected + to be a user preference but a programmer/widget preferences. Also, we strive to make the toolkit consistent. - InputText: - Added `style.InputTextCursorSize` to configure cursor/caret thickness. (#7031, #9409) diff --git a/imgui.cpp b/imgui.cpp index 32594498a..ba8236e2b 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -395,6 +395,11 @@ IMPLEMENTING SUPPORT for ImGuiBackendFlags_RendererHasTextures: When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files. You can read releases logs https://github.com/ocornut/imgui/releases for more details. + - 2026/07/20 (1.92.9) - DragXXX, SliderXXX, InputScalar: with `ImGuiItemFlags_LiveEditOnInputScalar` now defaulting to being disabled: + inputting a value with the keyboard doesn't write intermediate values to backing variable. (#9476) + - Before: DragFloat() with user typing "123" --> write back 1, then 12, then 123. + - After: DragFloat() with user typing "123" --> write back 123 when validated/unfocused. + You can enable the flag back for a given scope if needed by specific widget/behavior. - 2026/07/08 (1.92.9) - Drag and Drop: commented out legacy name `ImGuiDragDropFlags_SourceAutoExpirePayload` which obsoleted in 1.90.9 (July 2024). Use `ImGuiDragDropFlags_PayloadAutoExpire`. - 2026/07/06 (1.92.9) - ColorEdit: obsoleted SetColorEditOptions() function added in 1.51 (June 2017) in favor of directly poking to io.ConfigColorEditFlags. More consistent and easier to discover. - 2026/06/02 (1.92.9) - TreeNode: commented out legacy name ImGuiTreeNodeFlags_SpanTextWidth which was obsoleted in 1.90.7 (May 2024). Use ImGuiTreeNodeFlags_SpanLabelWidth instead. diff --git a/imgui.h b/imgui.h index dcd19a0ef..642fcb906 100644 --- a/imgui.h +++ b/imgui.h @@ -30,7 +30,7 @@ // Library Version // (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345') #define IMGUI_VERSION "1.92.9 WIP" -#define IMGUI_VERSION_NUM 19286 +#define IMGUI_VERSION_NUM 19287 #define IMGUI_HAS_TABLE // Added BeginTable() - from IMGUI_VERSION_NUM >= 18000 #define IMGUI_HAS_TEXTURES // Added ImGuiBackendFlags_RendererHasTextures - from IMGUI_VERSION_NUM >= 19198 @@ -1248,18 +1248,16 @@ enum ImGuiItemFlags_ ImGuiItemFlags_Disabled = 1 << 6, // false // [Internal] Disable interactions. DOES NOT affect visuals. This is used by BeginDisabled()/EndDisabled() and only provided here so you can read back via GetItemFlags(). //--------------------------------------------------------------------------------- - // LiveEdit refers to applying edits to backing variables _while_ typing. + // LiveEdit refers to applying edits to backing variables _while_ typing a value using the keyboard. // Widget: | Input: | w/ LiveEdit: | Output: // InputText() | "123" | on(default) | "1" then "12" then "123" // InputText() | "123" | off | "123" after validating or tabbing out or losing focus. - // DragFloat(), SliderInt(), etc. | "123" | on(default)* | 1 then 12 then 123 - // DragFloat(), SliderInt(), etc. | "123" | off* | 123 after validation or tabbing out or losing focus. - //--------------------------------------------------------------------------------- - // (*) The feature is currently being evaluated, and the aim is to change ImGuiItemFlags_LiveEditOnInputScalar to OFF by default. - // The legacy behavior until July 2026 was that LiveEdit was always ON for everything. + // DragFloat(), SliderInt(), etc. | "123" | on* | 1 then 12 then 123 + // DragFloat(), SliderInt(), etc. | "123" | off(default)* | 123 after validation or tabbing out or losing focus. + // (*) Since 1.92.9 (July 2026), ImGuiItemFlags_LiveEditOnInputScalar is OFF by default. In prior version it was ON for everything. //--------------------------------------------------------------------------------- ImGuiItemFlags_LiveEditOnInputText = 1 << 7, // true // InputText: apply keyboard edits to backing value while typing. Otherwise, edits are applied when validating, tabbing out or losing focus. - ImGuiItemFlags_LiveEditOnInputScalar = 1 << 8, // true* // DragXXX, SliderXXX, InputScalar: apply keyboard edits to backing value while typing. Otherwise, edits are applied when validating, tabbing out or losing focus. + ImGuiItemFlags_LiveEditOnInputScalar = 1 << 8, // false // DragXXX, SliderXXX, InputScalar: apply keyboard edits to backing value while typing. Otherwise, edits are applied when validating, tabbing out or losing focus. ImGuiItemFlags_LiveEditOnInput = ImGuiItemFlags_LiveEditOnInputText | ImGuiItemFlags_LiveEditOnInputScalar, }; diff --git a/imgui_internal.h b/imgui_internal.h index 0966819e6..7eb5780f2 100644 --- a/imgui_internal.h +++ b/imgui_internal.h @@ -1006,7 +1006,7 @@ enum ImGuiItemFlagsPrivate_ ImGuiItemFlags_HasSelectionUserData = 1 << 21, // false // Set by SetNextItemSelectionUserData() ImGuiItemFlags_IsMultiSelect = 1 << 22, // false // Set by SetNextItemSelectionUserData() - ImGuiItemFlags_Default_ = ImGuiItemFlags_AutoClosePopups | ImGuiItemFlags_LiveEditOnInputText | ImGuiItemFlags_LiveEditOnInputScalar, // Please don't change, use PushItemFlag() instead. + ImGuiItemFlags_Default_ = ImGuiItemFlags_AutoClosePopups | ImGuiItemFlags_LiveEditOnInputText, // Please don't change, use PushItemFlag() instead. // Obsolete //ImGuiItemFlags_SelectableDontClosePopup = !ImGuiItemFlags_AutoClosePopups, // Can't have a redirect as we inverted the behavior