--- a/XWorkstation.st Sun May 14 21:48:34 2017 +0200
+++ b/XWorkstation.st Thu May 25 09:42:28 2017 +0100
@@ -63,7 +63,6 @@
!XWorkstation primitiveDefinitions!
%{
-
#define SUPPORT_MOTIF_WM_HINTS
#ifdef LINUX
@@ -116,6 +115,12 @@
#include <X11/Xutil.h>
#include <X11/Xatom.h>
+/*
+ * To get XKeysymToUnicode(), not provided by Xlib...
+ */
+#include "xkeysymtounicode.h"
+
+
#define XK_MISCELLANY
#include <X11/keysymdef.h>
@@ -6143,9 +6148,9 @@
int evMask, returnValue;
XEvent ev;
OBJ eB;
- KeySym keySym;
+ KeySym keySym = NoSymbol;
unsigned char buffer[64];
- int i, nchars;
+ int i, nchars, codepoint;
char *keySymString;
OBJ arg, sym, t, windowID;
@@ -6238,18 +6243,16 @@
keyPressAndRelease:
arg = nil;
- nchars = XLookupString(ke, (char *)buffer, sizeof(buffer), &keySym, NULL);
- if (nchars == 1 && (((buffer[0] >= ' ') && (buffer[0] <= '~'))
- || (buffer[0] >= 0x80))) {
- arg = __MKCHARACTER(buffer[0]);
-// } else if (nchars > 2) {
-// arg = __MKSTRING_L(buffer, nchars);
+ XLookupString(ke, (char *)buffer, sizeof(buffer), &keySym, NULL);
+ codepoint = XKeysymToUnicode(keySym);
+ if ( codepoint ) {
+ arg = __MKUCHARACTER( codepoint );
} else {
keySymString = XKeysymToString(keySym);
- if (keySymString) {
+ if (keySymString) {
arg = __MKSYMBOL(keySymString, 0);
}
- }
+ }
#ifdef IGNORE_UNKNOWN_KEYCODES
if (arg == nil) {