From 9f969944d5c995cefa2c7069f7967f3a30d93e44 Mon Sep 17 00:00:00 2001 From: ocornut Date: Mon, 18 Aug 2025 17:37:40 +0200 Subject: [PATCH] stb_textedit: fixed misleading cursor-1 in STB_TEXTEDIT_K_LINESTART handlers. (#7925) `state->cursor - 1` in STB_TEXTEDIT_K_LINESTART handlers was technically misleadingly not UTF-8 compliant but things would naturally work anyhow. --- imstb_textedit.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/imstb_textedit.h b/imstb_textedit.h index 33eef7095..1a9975f3b 100644 --- a/imstb_textedit.h +++ b/imstb_textedit.h @@ -1100,8 +1100,12 @@ retry: stb_textedit_move_to_first(state); if (state->single_line) state->cursor = 0; - else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE) - state->cursor = IMSTB_TEXTEDIT_GETPREVCHARINDEX(str, state->cursor); + else while (state->cursor > 0) { + int prev = IMSTB_TEXTEDIT_GETPREVCHARINDEX(str, state->cursor); + if (STB_TEXTEDIT_GETCHAR(str, prev) == STB_TEXTEDIT_NEWLINE) + break; + state->cursor = prev; + } state->has_preferred_x = 0; break; @@ -1128,8 +1132,12 @@ retry: stb_textedit_prep_selection_at_cursor(state); if (state->single_line) state->cursor = 0; - else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE) - state->cursor = IMSTB_TEXTEDIT_GETPREVCHARINDEX(str, state->cursor); + else while (state->cursor > 0) { + int prev = IMSTB_TEXTEDIT_GETPREVCHARINDEX(str, state->cursor); + if (STB_TEXTEDIT_GETCHAR(str, prev) == STB_TEXTEDIT_NEWLINE) + break; + state->cursor = prev; + } state->select_end = state->cursor; state->has_preferred_x = 0; break;