JDK-8212678 : Windows IME related patch
  • Type: Bug
  • Component: client-libs
  • Sub-Component: java.awt
  • Affected Version: 11,12
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • OS: windows
  • Submitted: 2018-10-19
  • Updated: 2021-04-22
  • Resolved: 2019-02-17
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 11 JDK 13 JDK 7 JDK 8
11.0.11-oracleFixed 13 b09Fixed 7u311Fixed 8u291Fixed
Description
Issue:
This patch can fix following issues.
A: Cannot display surrogate pair character on Windows floating IME window for passive component
B: Control Windows IME status by using InputSubset and UnicodeBlock for CJK countries
C: Check preedit string availability for Windows Chinese IME

To recreate each issue.

Issue A:
1. Run SwingSet2 Java demo program with Japanese IME.
2. Click InternalFrameDemo's "Frame 0".
3. Turn on Japanese IME, then type "2000B"
(See attached SwingSet2-1.png)
4. Press F5 key.
The character is not displayed properly.
(See attached SwingSet2-2.png)
Withfix screen shot is available on SwingSet2-3.png

I used Japanese Windows 7 for this testing.
(I could  not recreate this issue on English Windows Server 2012 R2.
But I could recreate this issue Japanese Windows 10)

Issue B:
Test program (ImSubsetsTest.java):

1. Compile and run ImSubsetsTest with CJK IMEs
2. Select language (ja:Japanese, ko:Korean, zh: Chinese).
Windows IME (same langugae's one) should be turned on.
3. Click  JTextField (active component) or JButton (passive component)
(Please check IM status is changed or not)
4. Click different color's JTextField (active component) or JButton 
(passive component)
(Please check IM status is changed or not)
5. Following operations did not work
Korean IME : HANJA->LATIN_DIGIT,BASIC_LATIN
Chinese IME : FULLWIDTH_DIGITS->LATIN_DIGIT,BASIC_LATIN

I think you can see this issue with English Windows.
I used English Windows Server 2012 R2 for this testing.
Movies are available, you may see how it works:
Without fix: B-ChineseIME-withoutfix.mov, B-KoreanIME-withoutfix.mov
With fix: B-ChineseIME-withfix.mov, B-KoreanIME-withfix.mov

Issue C:
Test program (IMFTestA):

On Chinese IME (Microsoft Pinyin ABC),
1. Compile and run IMFTestA
2. Click one of JTextArea window, turn ON Chinese IME
3. Click the other window, turn ON Chinese IME
4. Type "nihao", then preedit string is displayed
5. Click the other window, turn OFF Chinese IME
6. Click the other window, preedit string is still displayed but it's not convertable

I used English Windows Server 2012 R2 for this testing.
Movies are available, you may see how it works:
Without fix: C-ChineseIME-withoutfix.mov
With fix: C-ChineseIME-withfix.mov

Reason:
Issue A, proper font is not specified for passive component
Issue B, IME mode setting for CJK Windows IME is not correct
Issue C, Chinese Windows IME shares IME status between windows, Java needs to check preedit string is available or not
Comments
I'd like to contribute JDK-8212678 separately.
01-05-2019

Fix Request This issue is related Windows CJK IME issue, and we'd like to request the fix in 11u. The patch could apply cleanly by using following order. JDK-8211300 Convert C-style array declarations in JDK client code JDK-8212678 Windows IME related patch
08-04-2019