summaryrefslogtreecommitdiffstats
path: root/win/tkWinKey.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2016-09-08 08:04:40 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2016-09-08 08:04:40 (GMT)
commit5e58ab247f8afbe1ad8c604cad7cd2ce300b4b0d (patch)
tree8983532bc380915f1b33407f0d0e4d9c1af07d29 /win/tkWinKey.c
parentbc21ab428d0c3384814b486290a3a89917519c42 (diff)
parent54d082b5c348c688eae446436c0077684686e610 (diff)
downloadtk-5e58ab247f8afbe1ad8c604cad7cd2ce300b4b0d.zip
tk-5e58ab247f8afbe1ad8c604cad7cd2ce300b4b0d.tar.gz
tk-5e58ab247f8afbe1ad8c604cad7cd2ce300b4b0d.tar.bz2
merge core-8-6-branch
Diffstat (limited to 'win/tkWinKey.c')
-rw-r--r--win/tkWinKey.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/win/tkWinKey.c b/win/tkWinKey.c
index 3d2a16a..2698c4d 100644
--- a/win/tkWinKey.c
+++ b/win/tkWinKey.c
@@ -113,12 +113,23 @@ TkpGetString(
Tcl_DStringAppend(dsPtr, buf, len);
} else if (keyEv->send_event == -3) {
+
+ char buf[XMaxTransChars];
+ int len;
+
/*
- * Special case for WM_UNICHAR. xkey.trans_chars[] already contains a
- * UTF-8 char.
+ * Special case for WM_UNICHAR.
*/
- Tcl_DStringAppend(dsPtr, keyEv->trans_chars, keyEv->nbytes);
+ len = Tcl_UniCharToUtf(keyEv->keycode, buf);
+ if ((keyEv->keycode <= 0xffff) || (len == XMaxTransChars)) {
+ Tcl_DStringAppend(dsPtr, buf, len);
+ } else {
+ Tcl_UniCharToUtf(((keyEv->keycode - 0x10000) >> 10) | 0xd800, buf);
+ Tcl_DStringAppend(dsPtr, buf, 3);
+ Tcl_UniCharToUtf(((keyEv->keycode - 0x10000) & 0x3ff) | 0xdc00, buf);
+ Tcl_DStringAppend(dsPtr, buf, 3);
+ }
} else {
/*
* This is an event generated from generic code. It has no nchars or