diff -r 1f81291f492b glass-mat-lib-x11/src/com/sun/glass/ui/GlassView.c --- a/glass-mat-lib-x11/src/com/sun/glass/ui/GlassView.c Wed Jun 01 12:44:33 2011 -0700 +++ b/glass-mat-lib-x11/src/com/sun/glass/ui/GlassView.c Thu Jun 02 23:32:40 2011 -0700 @@ -338,15 +338,18 @@ char buffer[20]; KeySym xkeysym; buffer[0] = 0; + /* FIXME This only handles Latin-1 characters - if that. */ int len = XLookupString((XKeyEvent*)event,buffer,sizeof(buffer), &xkeysym, NULL); +#if 0 printf("keyEvent sym=%d/%x %s %d keycode %d/%x mod %x\n", (int)xkeysym, (int)xkeysym, buffer, len, event->xkey.keycode, event->xkey.keycode, event->xkey.state); +#endif int keycode = mat_GetJavaKeyCode(xkeysym); jcharArray jChars = NULL; @@ -363,7 +366,11 @@ // always return a char array, even if zero length jChars = (*gw->env)->NewCharArray(gw->env, len); if (len > 0) { - (*gw->env)->SetCharArrayRegion(gw->env, jChars, 0, len, (jchar *)&buffer); + jchar jbuffer[20]; + int i = len > 20 ? 20 : len; + while (--i >= 0) + jbuffer[i] = (jchar) (buffer[i] & 0xff); + (*gw->env)->SetCharArrayRegion(gw->env, jChars, 0, len, &jbuffer); } if (pressed) {