On Thu, 21 Jan 2021 19:25:16 GMT, Alexey Ivanov <aiva...@openjdk.org> wrote:
> I admit I am even more confused now. To me, the description in the comment > above is nearly the same as in [JBS > comment](https://bugs.openjdk.java.net/browse/JDK-8258805?focusedCommentId=14391025&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14391025). > Is the difference that the original test case disabled IME for the middle > JTextField whereas in the test case above all JTextField support IME? Well.. I think the main difference between tests is that the [test attached to the bug](https://bugs.openjdk.java.net/browse/JDK-8258805?focusedCommentId=14391025&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-14391025) uses `JTextField` (Swing) and the [test provided above](https://github.com/openjdk/jdk/pull/2142#issuecomment-763491615) uses `TextField` (AWT). The same input method events are processed differently for Swing and AWT text components. Good example is the following test: import java.awt.*; import java.awt.event.*; public class AWTTextTest1 extends Frame { AWTTextTest1() { setTitle("AWTTextTest1"); setLayout(new GridLayout(0, 1)); add(new TextField()); add(new TextField()); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); } }); setSize(400, 300); setVisible(true); } public static void main(String[] args) { new AWTTextTest1(); } } 1. Run test (originally it uses `TextField`) 2. Click upper `TextField`, turn on IME, type some character (In case of Japanese, type "aiu") 3. Click lower `TextField`, the string is canceled. 4. Replace `TextField` with `JTextField` in the test. Compile and run it again. 5. Click upper `JTextField`, turn on IME, type some character (In case of Japanese, type "aiu") 6. Click lower `JTextField`, the string is committed before focus transition. > > In the updated version of the fix, we always commit the text on any focus > change whether the newly focused component supports IME or not. That’s not quite right. Actually we commit the text if the current IM client is “active client”. For example, `JTextField` is an “active client” but `TextField` - NOT. The status “active client” depends on the implementation of getInputMethodRequests() method. ------------- PR: https://git.openjdk.java.net/jdk/pull/2142