<i18n dev> <AWT Dev> RFR: 8213232 Unix/X11 setCompositionEnableNative issue

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Thu Apr 25 23:14:54 UTC 2019


Hi, Ichiroh.

I got this build error when I tried to test this patch:

open/src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c:83:5: error: cast between incompatible function types from 'int (*)(struct >..._XIC *, char *, char *)' to 'void (*)(struct _XIM *, char *, char *)' [-Werror=cast-function-type]
>      (XIMProc)PreeditStartCallback,
>      ^
> cc1: all warnings being treated as errors

Please take a look(linux_x64/gcc8.2)


On 18/04/2019 04:09, Ichiroh Takiguchi wrote:
> Hello Sergey.
> Sorry for bad response.
> 
> About "defined(MACOSX)"
> I followed Line# 87 usage, because the codes handle IME status windows.
> 
> <src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c>
>    82 static XIMProc callback_funcs[NCALLBACKS] = {
>    83     (XIMProc)PreeditStartCallback,
>    84     (XIMProc)PreeditDoneCallback,
>    85     (XIMProc)PreeditDrawCallback,
>    86     (XIMProc)PreeditCaretCallback,
>    87 #if defined(__linux__) || defined(MACOSX)
>    88     (XIMProc)StatusStartCallback,
>    89     (XIMProc)StatusDoneCallback,
>    90     (XIMProc)StatusDrawCallback,
>    91 #endif
>    92 };
> 
> Should I remove "defined(MACOSX)" from awt_InputMethod.c or just modified code ?
> Please give me your suggestion.
> 
> About AIX's awt_InputMethod.c
> It already has fixed code Line# 2187 - 2189.
> 
> <src/java.desktop/aix/native/libawt_xawt/awt/awt_InputMethod.c>
>    2172 JNIEXPORT jboolean JNICALL Java_sun_awt_X11InputMethodBase_setCompositionEnabledNative
>    2173   (JNIEnv *env, jobject this, jboolean enable)
>    2174 {
>    2175     X11InputMethodData *pX11IMData;
>    2176     char * ret = NULL;
>    2177     XVaNestedList pr_atrb;
> ...
>    2186
>>> 2187     pr_atrb = XVaCreateNestedList(0, XNPreeditState,
>>> 2188                   (enable ? XIMPreeditEnable : XIMPreeditDisable), NULL);
>>> 2189     ret = XSetICValues(pX11IMData->current_ic, XNPreeditAttributes, pr_atrb, NULL);
>    2190     XFree((void *)pr_atrb);
>    2191     AWT_UNLOCK();
> 
> Thanks,
> Ichiroh Takiguchi
> 
> On 2019-04-11 11:19, Sergey Bylokhov wrote:
>> Hi, Ichiroh.
>>
>> Why the fix uses the "defined(MACOSX)" in a few places? I assume this
>> code is never executed on macOS.
>> Should we update the aix version as well?
>> .../java.desktop/aix/native/libawt_xawt/awt/awt_InputMethod.c
>>
>> On 25/03/2019 09:28, Ichiroh Takiguchi wrote:
>>> Hello.
>>>
>>> Could you review the fix and give me your suggestion, please ?
>>> I really appreciate your feedback.
>>>
>>> Currently, UnsupportedOperationException happens because of invalid usage
>>> by input method operation.
>>>
>>> And I'd like to obtain a sponsor for this issue.
>>>
>>> Thanks,
>>> Ichiroh Takiguchi
>>>
>>> On 2019-03-11 22:00, Ichiroh Takiguchi wrote:
>>>> Hello.
>>>>
>>>> Could you review the fix and give me your suggestion, please ?
>>>>
>>>> Thanks,
>>>> Ichiroh Takiguchi
>>>>
>>>> On 2019-02-26 22:08, Ichiroh Takiguchi wrote:
>>>>> Hello.
>>>>>
>>>>> Could you review the fix ?
>>>>>
>>>>> Bug:    https://bugs.openjdk.java.net/browse/JDK-8213232
>>>>> Change: https://cr.openjdk.java.net/~itakiguchi/8213232/webrev.01/
>>>>>
>>>>> JDK-8213232 [1] has movies.
>>>>> Please check it.
>>>>>
>>>>> I applied following changes on webrev.01:
>>>>> 1. According to "Xlib - C Language X Interface" [2]
>>>>>    See "Preedit State Callbacks" section:
>>>>>    PreeditStartCallback() should return int.
>>>>> 2. Add 64bit Big Endian CPU support, like s390x
>>>>> 3. Change copyright year
>>>>>
>>>>> [1] https://bugs.openjdk.java.net/browse/JDK-8213232
>>>>> [2] https://www.x.org/releases/X11R7.6/doc/libX11/specs/libX11/libX11.html
>>>>>
>>>>> Thanks,
>>>>> Ichiroh Takiguchi
>>>>> IBM Japan, Ltd.
>>>>>
>>>>> On 2018-12-04 11:22, Ichiroh Takiguchi wrote:
>>>>>> Hello.
>>>>>>
>>>>>> Could you review the fix ?
>>>>>>
>>>>>> Bug:    https://bugs.openjdk.java.net/browse/JDK-8213232
>>>>>> Change: https://cr.openjdk.java.net/~itakiguchi/8213232/webrev.00/
>>>>>>
>>>>>> This issue is related by wrong usage of XNPreeditState on XSetICValues().
>>>>>> Because of wrong usage, UnsupportedOperationException exception
>>>>>> happened with Xlib bundled input method.
>>>>>> Test instructions is in JDK-8213232.
>>>>>>
>>>>>> I'd like to obtain a sponsor for this issue.
>>>>>>
>>>>>> Thanks,
>>>>>> Ichiroh Takiguchi
>>>>>> IBM Japan, Ltd.
>>>>>>
>>>>>> On 2018-06-19 02:15, Ichiroh Takiguchi wrote:
>>>>>>> Hello,
>>>>>>> IBM would like to contribute Unix/X11 setCompositionEnableNative issue
>>>>>>> patch to OpenJDK project.
>>>>>>>
>>>>>>> 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 following test program and
>>>>>>> kinput2 XIM server and
>>>>>>> Wnn8 for Linux/BSD (htt).
>>>>>>> ==================
>>>>>>> import java.awt.*;
>>>>>>> import java.awt.event.*;
>>>>>>> import javax.swing.*;
>>>>>>>
>>>>>>> public class CompositionEnabledTest extends JFrame {
>>>>>>>   CompositionEnabledTest() {
>>>>>>>     Container c = getContentPane();
>>>>>>>     c.setLayout(new GridLayout(0,2));
>>>>>>>     JButton btn;
>>>>>>>     JTextField tf;
>>>>>>>     btn = new JButton("Undefined");
>>>>>>>     c.add(btn);
>>>>>>>     tf = new JTextField("Undefined");
>>>>>>>     c.add(tf);
>>>>>>>     btn = new JButton("Disabled");
>>>>>>>     btn.addFocusListener(new MyFocusListener(false));
>>>>>>>     c.add(btn);
>>>>>>>     tf = new JTextField("Disabled");
>>>>>>>     tf.addFocusListener(new MyFocusListener(false));
>>>>>>>     c.add(tf);
>>>>>>>     btn = new JButton("Enabled");
>>>>>>>     btn.addFocusListener(new MyFocusListener(true));
>>>>>>>     c.add(btn);
>>>>>>>     tf = new JTextField("Enabled");
>>>>>>>     tf.addFocusListener(new MyFocusListener(true));
>>>>>>>     c.add(tf);
>>>>>>>     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>>>>>>>     pack();
>>>>>>>     setVisible(true);
>>>>>>>   }
>>>>>>>   class MyFocusListener implements FocusListener {
>>>>>>>     boolean state;
>>>>>>>     MyFocusListener(boolean state) {
>>>>>>>       this.state = state;
>>>>>>>     }
>>>>>>>     public void focusGained(FocusEvent fe) {
>>>>>>> fe.getComponent().getInputContext().setCompositionEnabled(state);
>>>>>>>     }
>>>>>>>     public void focusLost(FocusEvent fe) { }
>>>>>>>   }
>>>>>>>   public static void main(String[] args) {
>>>>>>>     new CompositionEnabledTest();
>>>>>>>   }
>>>>>>> }
>>>>>>> ==================
>>>>>>>
>>>>>>> Click JTextField and JButton, then XIM server status may be changed.
>>>>>>> If XIM server does not support XNPreeditState, it does not work.
>>>>>>>
>>>>>>> I'd like contribute following 3 files:
>>>>>>> M src/java.desktop/share/classes/sun/awt/im/InputContext.java
>>>>>>> M src/java.desktop/unix/classes/sun/awt/X11InputMethod.java
>>>>>>> M src/java.desktop/unix/native/libawt_xawt/awt/awt_InputMethod.c
>>>>>>>
>>>>>>> http://cr.openjdk.java.net/~aleonard/set_composition_enabled/webrev.00/
>>>>>>>
>>>>>>> I appreciate any feedback please, and how I would go about obtaining a
>>>>>>> sponsor and contributor?
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Ichiroh Takiguchi
>>>>>>> IBM Japan, Ltd.
>>>
> 


-- 
Best regards, Sergey.


More information about the i18n-dev mailing list