summaryrefslogtreecommitdiffstats
path: root/win/tkWinX.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2016-08-30 10:24:09 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2016-08-30 10:24:09 (GMT)
commitd257de6d2ca3b8c1b8494276d2bdfd5ef137e7ba (patch)
tree47d25c98edc0c1c42f9831657c9fc60fa698055c /win/tkWinX.c
parent8e0cfedf783c540c0e00370d38795596836c17a4 (diff)
downloadtk-d257de6d2ca3b8c1b8494276d2bdfd5ef137e7ba.zip
tk-d257de6d2ca3b8c1b8494276d2bdfd5ef137e7ba.tar.gz
tk-d257de6d2ca3b8c1b8494276d2bdfd5ef137e7ba.tar.bz2
Enhance TkpGetString() to handle Unicode characters, even when TCL_UTF_MAX==3.
Diffstat (limited to 'win/tkWinX.c')
-rw-r--r--win/tkWinX.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/win/tkWinX.c b/win/tkWinX.c
index 2180f52..6b8bdff 100644
--- a/win/tkWinX.c
+++ b/win/tkWinX.c
@@ -1252,8 +1252,14 @@ GenerateXEvent(
event.xany.send_event = -3;
event.xkey.keycode = wParam;
event.xkey.nbytes = Tcl_UniCharToUtf((int)wParam, buffer);
- for (i=0; i<event.xkey.nbytes && i<XMaxTransChars; ++i) {
- event.xkey.trans_chars[i] = buffer[i];
+ if(((int)wParam > 0xffff) && (event.xkey.nbytes < 4)) {
+ /* trans_chars buffer is not big enough to hold 2 surrogate
+ characters, so don't store anything */
+ event.xkey.nbytes = 0;
+ } else {
+ for (i=0; i<event.xkey.nbytes && i<XMaxTransChars; ++i) {
+ event.xkey.trans_chars[i] = buffer[i];
+ }
}
Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
event.type = KeyRelease;