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.

This commit is contained in:
ocornut 2023-07-06 19:32:28 +02:00
parent 3349296370
commit b32ef809c3
2 changed files with 5 additions and 2 deletions

View File

@ -42,6 +42,9 @@ Breaking changes:
Other 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) - IO: Added io.ClearEventsQueue() to clear incoming inputs events. (#4921)
May be useful in conjunction with io.ClearInputsKeys() if you need to clear 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 both current inputs state and queued events (e.g. when using blocking native

View File

@ -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) // Handle reapplying final data on deactivation (see InputTextDeactivateHook() for details)
if (g.InputTextDeactivatedState.ID == id) 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 = g.InputTextDeactivatedState.TextA.Data;
apply_new_text_length = g.InputTextDeactivatedState.TextA.Size - 1; 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); //IMGUI_DEBUG_LOG("InputText(): apply Deactivated data for 0x%08X: \"%.*s\".\n", id, apply_new_text_length, apply_new_text);
} }
g.InputTextDeactivatedState.ID = 0; g.InputTextDeactivatedState.ID = 0;