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

Ichiroh Takiguchi takiguc at linux.vnet.ibm.com
Fri Apr 26 14:04:38 UTC 2019


Hello Sergey.

See "Preedit State Callbacks" section on Xlib manual [1]
Return code for PreeditStartCallback should be int instead of void:
int PreeditStartCallback(XIC ic, XPointer client_data, XPointer 
call_data);

I'm very sorry, I could not create build environment for GCC 8.2 on 
today.

So I just tested GCC 8.2's compilation error with my small testcase.

Could you review the fix ?

Bug:    https://bugs.openjdk.java.net/browse/JDK-8213232
Change: https://cr.openjdk.java.net/~itakiguchi/8213232/webrev.02/

I modified the code, like this:
-    (XIMProc)PreeditStartCallback,
+    (XIMProc)(void *)&PreeditStartCallback,

[1] 
https://www.x.org/releases/X11R7.6/doc/libX11/specs/libX11/libX11.html

Thanks,
Ichiroh Takiguchi

On 2019-04-26 08:14, Sergey Bylokhov wrote:
> 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.
>>>> 
>> 



More information about the i18n-dev mailing list