aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2020-11-09 17:22:25 +0200
committerEli Zaretskii2020-11-09 17:22:25 +0200
commit13ab70c80e2e31fdf0a289c8e730a33a1cf5d6ae (patch)
tree8ae74f9cc323380c330a2bb8c1235990bd662d9c /src
parente693d97e5005f82c7dbb4f6922d9dc8deac3d14f (diff)
downloademacs-13ab70c80e2e31fdf0a289c8e730a33a1cf5d6ae.tar.gz
emacs-13ab70c80e2e31fdf0a289c8e730a33a1cf5d6ae.zip
Avoid breaking Arabic shaping in 'window-text-pixel-size'
* src/xdisp.c (CHAR_COMPOSED_P): If the bidi_p flag is not set, pass -1 to composition_reseat_it, so that the shaping engine will figure out the directionality of the text. This is important, e.g., when using move_it_* functions in some context that is not redisplay, such as 'window-text-pixel-size'. (Bug#44521)
Diffstat (limited to 'src')
-rw-r--r--src/xdisp.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index 60864c2671c..ac706d08414 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -7221,14 +7221,21 @@ static next_element_function const get_next_element[NUM_IT_METHODS] =
7221 7221
7222 7222
7223/* Return true iff a character at CHARPOS (and BYTEPOS) is composed 7223/* Return true iff a character at CHARPOS (and BYTEPOS) is composed
7224 (possibly with the following characters). */ 7224 (possibly with the following characters).
7225
7226 Note: we pass -1 as the "resolved bidi level" when the iterator
7227 doesn't have the bidi_p flag set, because in that case we really
7228 don't know what is the directionality of the text, so we leave it to
7229 the shaping engine to figure that out. */
7225 7230
7226#define CHAR_COMPOSED_P(IT,CHARPOS,BYTEPOS,END_CHARPOS) \ 7231#define CHAR_COMPOSED_P(IT,CHARPOS,BYTEPOS,END_CHARPOS) \
7227 ((IT)->cmp_it.id >= 0 \ 7232 ((IT)->cmp_it.id >= 0 \
7228 || ((IT)->cmp_it.stop_pos == (CHARPOS) \ 7233 || ((IT)->cmp_it.stop_pos == (CHARPOS) \
7229 && composition_reseat_it (&(IT)->cmp_it, CHARPOS, BYTEPOS, \ 7234 && composition_reseat_it (&(IT)->cmp_it, CHARPOS, BYTEPOS, \
7230 END_CHARPOS, (IT)->w, \ 7235 END_CHARPOS, (IT)->w, \
7231 (IT)->bidi_it.resolved_level, \ 7236 (IT)->bidi_p \
7237 ? (IT)->bidi_it.resolved_level \
7238 : -1, \
7232 FACE_FROM_ID_OR_NULL ((IT)->f, \ 7239 FACE_FROM_ID_OR_NULL ((IT)->f, \
7233 (IT)->face_id), \ 7240 (IT)->face_id), \
7234 (IT)->string))) 7241 (IT)->string)))