这个问题已解决。参考:
热烈祝贺:JDK在Ubuntu上,输入法的候选框终于可以跟随光标移动了!_柳鲲鹏的博客-CSDN博客
说起JDK输入法候选框跟随光标移动,工作历程是这样的:
- 测试同事报怨在国产OS上(KYLIN/UOS)上有问题
- 吾当时安排王同事解决,似乎解决了
他声称解决了,也根据我的要求录像了。
我看过他的录像,用ECLIPSE跑的JAVA程序(可能是MIPS机器上),确实是跟随光标移动。
这事我后来就糊涂了:难道测试的那个系统,使用的不是X11?
- 测试同事又抱怨有问题
我就纳闷了,亲自一试,果然没有解决。
- 经过一番努力,成功解决。在KYLIN/UOS上也测试通过了
关键代码是:
JNIEXPORT void JNICALL Java_sun_awt_X11_XInputMethod_moveCandidateWindow
(JNIEnv *env, jobject this, jint x, jint y)
{
X11InputMethodData *pX11IMData;
XVaNestedList preedit_attr;
XPoint nspot;
AWT_LOCK();
pX11IMData = getX11InputMethodData(env, this);
if ((pX11IMData == NULL) || (pX11IMData->current_ic == NULL)) {
AWT_UNLOCK();
return;
}
nspot.x = x;
nspot.y = y;
preedit_attr = XVaCreateNestedList(0, XNSpotLocation, &nspot, NULL);
XSetICValues(pX11IMData->current_ic, XNPreeditAttributes, preedit_attr, NULL);
XFree(preedit_attr);
AWT_UNLOCK();
}
后来泰山OFFICE某个版本出问题,是因为代码改错了。
- 我在UBUNTU上测试,光标又无法跟随
我这个气啊。于是反复搜索、测试,乱改代码,都没找到解决办法。
初步判断,直接跟随文本窗口的坐标。
- 以下是我找到的一些相关网页
Linux Certif - Man XOpenIM.3x(3) - libX11 1.0.3 (CentOS - 06/07/09)
找到了和java一模一样的输入法样式 - 灰信网(软件开发博客聚合)
XIM协议的原理及其实现-snow888-ChinaUnix博客