diff options
| author | Po Lu <luangruo@yahoo.com> | 2022-01-10 08:40:26 +0800 |
|---|---|---|
| committer | Po Lu <luangruo@yahoo.com> | 2022-01-10 08:40:26 +0800 |
| commit | 0f5f2af51ecc4a67c1b4875d2af4dc19fdb8e392 (patch) | |
| tree | c9d5a22cb1d80cbb48000844166fa0a7499105de /src | |
| parent | 32f1ec449d760a2a551fb411808d0b4c7d64418c (diff) | |
Fix off-by-one errors in caret position application
* src/gtkutil.c (xg_im_context_preedit_changed):
* src/xfns.c (xic_preedit_caret_callback):
(xic_preedit_draw_callback): Constrain caret position to
SCHARS (arg) - 1.
Diffstat (limited to 'src')
| -rw-r--r-- | src/gtkutil.c | 11 | ||||
| -rw-r--r-- | src/xfns.c | 22 |
2 files changed, 18 insertions, 15 deletions
diff --git a/src/gtkutil.c b/src/gtkutil.c index c47386dae00..8eab6ee723d 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -6090,11 +6090,12 @@ xg_im_context_preedit_changed (GtkIMContext *imc, gpointer user_data) inev.kind = PREEDIT_TEXT_EVENT; inev.arg = build_string_from_utf8 (str); - Fput_text_property (make_fixnum (min (SCHARS (inev.arg), - max (0, cursor))), - make_fixnum (min (SCHARS (inev.arg), - max (0, cursor) + 1)), - Qcursor, Qt, inev.arg); + if (SCHARS (inev.arg)) + Fput_text_property (make_fixnum (min (SCHARS (inev.arg) - 1, + max (0, cursor))), + make_fixnum (min (SCHARS (inev.arg), + max (0, cursor) + 1)), + Qcursor, Qt, inev.arg); kbd_buffer_store_event (&inev); diff --git a/src/xfns.c b/src/xfns.c index 7540816416d..9cf6f528198 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -2973,11 +2973,12 @@ xic_preedit_caret_callback (XIC xic, XPointer client_data, ie.arg = make_string_from_utf8 (output->preedit_chars, output->preedit_size); - Fput_text_property (make_fixnum (min (SCHARS (ie.arg), - max (0, output->preedit_caret))), - make_fixnum (max (SCHARS (ie.arg), - max (0, output->preedit_caret) + 1)), - Qcursor, Qt, ie.arg); + if (SCHARS (ie.arg)) + Fput_text_property (make_fixnum (min (SCHARS (ie.arg) - 1, + max (0, output->preedit_caret))), + make_fixnum (max (SCHARS (ie.arg), + max (0, output->preedit_caret) + 1)), + Qcursor, Qt, ie.arg); XSETINT (ie.x, 0); XSETINT (ie.y, 0); @@ -3196,11 +3197,12 @@ xic_preedit_draw_callback (XIC xic, XPointer client_data, ie.arg = make_string_from_utf8 (output->preedit_chars, output->preedit_size); - Fput_text_property (make_fixnum (min (SCHARS (ie.arg), - max (0, output->preedit_caret))), - make_fixnum (min (SCHARS (ie.arg), - max (0, output->preedit_caret) + 1)), - Qcursor, Qt, ie.arg); + if (SCHARS (ie.arg)) + Fput_text_property (make_fixnum (min (SCHARS (ie.arg) - 1, + max (0, output->preedit_caret))), + make_fixnum (min (SCHARS (ie.arg), + max (0, output->preedit_caret) + 1)), + Qcursor, Qt, ie.arg); XSETINT (ie.x, 0); XSETINT (ie.y, 0); |
