Browse Source

InputText: Fixed a case where deactivation frame would write to underlying buffer or call CallbackResize although unnecessary, in a frame where the return value was false.

ocornut 2 years ago
parent
commit
b32ef809c3
2 changed files with 5 additions and 2 deletions
  1. 3 0
      docs/CHANGELOG.txt
  2. 2 2
      imgui_widgets.cpp

+ 3 - 0
docs/CHANGELOG.txt

@@ -42,6 +42,9 @@ Breaking changes:
 
 Other changes:
 
+- InputText: Fixed a case where deactivation frame would write to underlying
+  buffer or call CallbackResize although unnecessary, in a frame where the
+  return value was false.
 - IO: Added io.ClearEventsQueue() to clear incoming inputs events. (#4921)
   May be useful in conjunction with io.ClearInputsKeys() if you need to clear
   both current inputs state and queued events (e.g. when using blocking native

+ 2 - 2
imgui_widgets.cpp

@@ -4719,11 +4719,11 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
     // Handle reapplying final data on deactivation (see InputTextDeactivateHook() for details)
     if (g.InputTextDeactivatedState.ID == id)
     {
-        if (g.ActiveId != id && IsItemDeactivatedAfterEdit() && !is_readonly)
+        if (g.ActiveId != id && IsItemDeactivatedAfterEdit() && !is_readonly && strcmp(g.InputTextDeactivatedState.TextA.Data, buf) != 0)
         {
             apply_new_text = g.InputTextDeactivatedState.TextA.Data;
             apply_new_text_length = g.InputTextDeactivatedState.TextA.Size - 1;
-            value_changed |= (strcmp(g.InputTextDeactivatedState.TextA.Data, buf) != 0);
+            value_changed = true;
             //IMGUI_DEBUG_LOG("InputText(): apply Deactivated data for 0x%08X: \"%.*s\".\n", id, apply_new_text_length, apply_new_text);
         }
         g.InputTextDeactivatedState.ID = 0;