--- old/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m 2015-10-26 19:40:28.000000000 +0300 +++ new/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m 2015-10-26 19:40:28.000000000 +0300 @@ -889,8 +889,19 @@ // (i.e., when the user uses the Character palette or Inkwell), or when the string to insert is a complex // Unicode value. NSUInteger utf16Length = [aString lengthOfBytesUsingEncoding:NSUTF16StringEncoding]; + NSUInteger utf8Length = [aString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; + BOOL aStringIsComplex = NO; + if (utf16Length > 2) { + aStringIsComplex = YES; + } else if (utf8Length > 1) { + unichar codePoint = [aString characterAtIndex:0]; + if ((codePoint >= 0x3000) && (codePoint <= 0x303F)) { + // Code point is in 'CJK Symbols and Punctuation' code points range. + aStringIsComplex = YES; + } + } - if ([self hasMarkedText] || !fProcessingKeystroke || (utf16Length > 2)) { + if ([self hasMarkedText] || !fProcessingKeystroke || aStringIsComplex) { JNIEnv *env = [ThreadUtilities getJNIEnv]; static JNF_MEMBER_CACHE(jm_selectPreviousGlyph, jc_CInputMethod, "selectPreviousGlyph", "()V");