mirror of
https://github.com/ocornut/imgui.git
synced 2025-02-02 12:37:20 +01:00
InputText: Fixed a bug where character replacements performed from a callback were not applied when pasting from clipbard. (#8229)
This commit is contained in:
parent
324d4bb140
commit
f5f11e94be
@ -43,6 +43,8 @@ Breaking changes:
|
||||
|
||||
Other changes:
|
||||
|
||||
- InputText: Fixed a bug where character replacements performed from a callback
|
||||
were not applied when pasting from clipbard. (#8229)
|
||||
- Drags: Added ImGuiSliderFlags_NoSpeedTweaks flag to disable keyboard
|
||||
modifiers altering the tweak speed. Useful if you want to alter tweak speed
|
||||
yourself based on your own logic. (#8223)
|
||||
|
@ -4895,25 +4895,27 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
|
||||
{
|
||||
// Filter pasted buffer
|
||||
const int clipboard_len = (int)strlen(clipboard);
|
||||
char* clipboard_filtered = (char*)IM_ALLOC(clipboard_len + 1);
|
||||
int clipboard_filtered_len = 0;
|
||||
ImVector<char> clipboard_filtered;
|
||||
clipboard_filtered.reserve(clipboard_len + 1);
|
||||
for (const char* s = clipboard; *s != 0; )
|
||||
{
|
||||
unsigned int c;
|
||||
int len = ImTextCharFromUtf8(&c, s, NULL);
|
||||
s += len;
|
||||
int in_len = ImTextCharFromUtf8(&c, s, NULL);
|
||||
s += in_len;
|
||||
if (!InputTextFilterCharacter(&g, &c, flags, callback, callback_user_data, true))
|
||||
continue;
|
||||
memcpy(clipboard_filtered + clipboard_filtered_len, s - len, len);
|
||||
clipboard_filtered_len += len;
|
||||
char c_utf8[5];
|
||||
ImTextCharToUtf8(c_utf8, c);
|
||||
int out_len = (int)strlen(c_utf8);
|
||||
clipboard_filtered.resize(clipboard_filtered.Size + out_len);
|
||||
memcpy(clipboard_filtered.Data + clipboard_filtered.Size - out_len, c_utf8, out_len);
|
||||
}
|
||||
clipboard_filtered[clipboard_filtered_len] = 0;
|
||||
if (clipboard_filtered_len > 0) // If everything was filtered, ignore the pasting operation
|
||||
if (clipboard_filtered.Size > 0) // If everything was filtered, ignore the pasting operation
|
||||
{
|
||||
stb_textedit_paste(state, state->Stb, clipboard_filtered, clipboard_filtered_len);
|
||||
clipboard_filtered.push_back(0);
|
||||
stb_textedit_paste(state, state->Stb, clipboard_filtered.Data, clipboard_filtered.Size - 1);
|
||||
state->CursorFollow = true;
|
||||
}
|
||||
MemFree(clipboard_filtered);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user