<AWT Dev> Proposal: Unix/X11 setCompositionEnableNative issue
Ichiroh Takiguchi
takiguc at linux.vnet.ibm.com
Mon Jun 18 17:15:53 UTC 2018
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 awt-dev
mailing list