|
@@ -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;
|
|
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_make_active = (focus_requested || user_clicked || user_scroll_finish || user_nav_input_start);
|
|
const bool init_state = (init_make_active || user_scroll_active);
|
|
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.
|
|
// Access state even if we don't own it yet.
|
|
state = &g.InputTextState;
|
|
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
|
|
// 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.
|
|
// 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)
|
|
if (recycle_state)
|
|
{
|
|
{
|
|
// Recycle existing cursor/selection/undo stack but clamp position
|
|
// Recycle existing cursor/selection/undo stack but clamp position
|