Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8213232

Unix/X11 setCompositionEnableNative issue

XMLWordPrintable

    • b21

        Issue:
        To turn on or turn off IME via Java, XNPreeditState should be used with
        XSetValues().
        But it should be nested via XVaCreateNestedList() since XNPreeditState
        is a part of XNPreeditAttributes.
        Current code is, like:
        - ret = XSetICValues(pX11IMData->current_ic, XNPreeditState,
        - (enable ? XIMPreeditEnable : XIMPreeditDisable),
        NULL);
        But it should be, like:
        + pr_atrb = XVaCreateNestedList(0,
        + XNPreeditState, (enable ? XIMPreeditEnable :
        XIMPreeditDisable),
        + NULL);
        + ret = XSetICValues(pX11IMData->current_ic, XNPreeditAttributes,
        pr_atrb, NULL);

        On Linux platform, the issue can check with attached CompositionEnabledTest test program and
        kinput2 XIM server and Wnn8 for Linux/BSD (htt).

        Test instruction 1:
        This testing requires PreeditState enabled XIM server, like kinput2 and htt.
        Current version of ibus and fcitx don't work as expected.
        1. Compile and run CompositionEnabledTest test program
        2. Click JTextField and JButton, then XIM server status may be changed.
        If XIM server does not support XNPreeditState, it does not work.

        Test instruction 2:
        1. Compile and run CompositionEnabledTest test program with following command
        $ XMODIFIERS=@im=local java CompositionEnabledTest
        (Note: @im=local means, use Xlib's embedded input method
        2. Click "Enabled" TextField, then following exception is happened
        Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException:
                at java.desktop/sun.awt.X11InputMethodBase.setCompositionEnabledNative(Native Method)
                at java.desktop/sun.awt.X11InputMethod.setCompositionEnabled(X11InputMethod.java:352)
                at java.desktop/sun.awt.im.InputContext.setCompositionEnabled(InputContext.java:731)
                at CompositionEnabledTest$MyFocusListener.focusGained(CompositionEnabledTest.java:37)
                at java.desktop/java.awt.AWTEventMulticaster.focusGained(AWTEventMulticaster.java:228)
                at java.desktop/java.awt.Component.processFocusEvent(Component.java:6521)
                at java.desktop/java.awt.Component.processEvent(Component.java:6388)
                at java.desktop/java.awt.Container.processEvent(Container.java:2263)
                at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
                at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
                at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
                at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1950)
                at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1051)
                at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:675)
                at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4889)
                at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
                at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
                at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
                at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
                at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
                at java.base/java.security.AccessController.doPrivileged(Native Method)
                at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
                at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
                at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
                at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
                at java.base/java.security.AccessController.doPrivileged(Native Method)
                at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
                at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
                at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
                at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
                at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
                at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
                at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
                at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

         

          1. CompositionEnabledTest.java
            1 kB
            Ichiroh Takiguchi
          2. linux-ime-bad.mov
            944 kB
            Ichiroh Takiguchi
          3. linux-ime-fixed.mov
            3.36 MB
            Ichiroh Takiguchi

              itakiguchi Ichiroh Takiguchi
              itakiguchi Ichiroh Takiguchi
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: