InputText: do not set WantTextInputNextFrame during the frame InputText is deactivated. (#6341)
diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt
index 85f05c8..911be77 100644
--- a/docs/CHANGELOG.txt
+++ b/docs/CHANGELOG.txt
@@ -44,6 +44,8 @@
 
 - Tables: Fixed a small miscalculation in TableHeader() leading to an empty tooltip
   showing when a sorting column has no visible name. (#6342) [@lukaasm]
+- InputText: Avoid setting io.WantTextInputNextFrame during the deactivation frame.
+  (#6341) [@lukaasm]
 - Backends: Clear bits sets io.BackendFlags on backend Shutdown(). (#6334, #6335] [@GereonV]
   Potentially this would facilitate switching runtime backend mid-session.
 
diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp
index 3f07ff7..ed38787 100644
--- a/imgui_widgets.cpp
+++ b/imgui_widgets.cpp
@@ -4296,7 +4296,6 @@
         // Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget.
         // Down the line we should have a cleaner library-wide concept of Selected vs Active.
         g.ActiveIdAllowOverlap = !io.MouseDown[0];
-        g.WantTextInputNextFrame = 1;
 
         // Edit in progress
         const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + state->ScrollX;
@@ -4735,8 +4734,11 @@
     }
 
     // Release active ID at the end of the function (so e.g. pressing Return still does a final application of the value)
-    if (clear_active_id && g.ActiveId == id)
+    // Otherwise request text input ahead for next frame.
+    if (g.ActiveId == id && clear_active_id)
         ClearActiveID();
+    else if (g.ActiveId == id)
+        g.WantTextInputNextFrame = 1;
 
     // Render frame
     if (!is_multiline)