diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2021-03-23 16:33:25 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2021-03-23 16:33:25 (GMT) |
commit | 811f1574bb3980d57f05b8334bd6d1aecdf4e32e (patch) | |
tree | 5c50bc92e0098cc8488749e26c997f058689794a /win | |
parent | cb689d388a07704cc34424caf91ff48bf6a3953b (diff) | |
download | tk-811f1574bb3980d57f05b8334bd6d1aecdf4e32e.zip tk-811f1574bb3980d57f05b8334bd6d1aecdf4e32e.tar.gz tk-811f1574bb3980d57f05b8334bd6d1aecdf4e32e.tar.bz2 |
Fix 3 places where Tcl_UtfToUniChar must be used and not TkUtfToUniChar: numChars/charIndex is counting character indexes here; surrogate-pairs count as 2.
This can cause a miscount when Emoji are pasted in a Text widget.
Diffstat (limited to 'win')
-rw-r--r-- | win/tkWinMenu.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/win/tkWinMenu.c b/win/tkWinMenu.c index 67894c7..22e84cb 100644 --- a/win/tkWinMenu.c +++ b/win/tkWinMenu.c @@ -511,7 +511,7 @@ GetEntryText( : Tcl_GetString(mePtr->accelPtr); const char *p, *next; Tcl_DString itemString; - int ch; + Tcl_UniChar ch = 0; /* * We have to construct the string with an ampersand preceeding the @@ -528,16 +528,17 @@ GetEntryText( if (*p == '&') { Tcl_DStringAppend(&itemString, "&", 1); } - next = p + TkUtfToUniChar(p, &ch); + next = p + Tcl_UtfToUniChar(p, &ch); Tcl_DStringAppend(&itemString, p, (int) (next - p)); } + ch = 0; if (mePtr->accelLength > 0) { Tcl_DStringAppend(&itemString, "\t", 1); for (p = accel, i = 0; *p != '\0'; i++, p = next) { if (*p == '&') { Tcl_DStringAppend(&itemString, "&", 1); } - next = p + TkUtfToUniChar(p, &ch); + next = p + Tcl_UtfToUniChar(p, &ch); Tcl_DStringAppend(&itemString, p, (int) (next - p)); } } |