diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2016-08-30 10:24:09 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2016-08-30 10:24:09 (GMT) |
commit | d257de6d2ca3b8c1b8494276d2bdfd5ef137e7ba (patch) | |
tree | 47d25c98edc0c1c42f9831657c9fc60fa698055c /win/tkWinX.c | |
parent | 8e0cfedf783c540c0e00370d38795596836c17a4 (diff) | |
download | tk-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.c | 10 |
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; |