@ -3857,9 +3857,10 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
float scroll_y = is_multiline ? draw_window - > Scroll . y : FLT_MAX ;
const bool init_changed_specs = ( state ! = NULL & & state - > Stb . single_line ! = ! is_multiline ) ;
const bool init_make_active = ( focus_requested | | user_clicked | | user_scroll_finish | | user_nav_input_start ) ;
const bool init_state = ( init_make_active | | user_scroll_active ) ;
if ( init_state & & g . ActiveId ! = id )
if ( ( init_state & & g . ActiveId ! = id ) | | init_changed_specs )
{
// Access state even if we don't own it yet.
state = & g . InputTextState ;
@ -3881,7 +3882,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
// Preserve cursor position and undo/redo stack if we come back to same widget
// FIXME: For non-readonly widgets we might be able to require that TextAIsValid && TextA == buf ? (untested) and discard undo stack if user buffer has changed.
const bool recycle_state = ( state - > ID = = id ) ;
const bool recycle_state = ( state - > ID = = id & & ! init_changed_specs ) ;
if ( recycle_state )
{
// Recycle existing cursor/selection/undo stack but clamp position