后来在 r182 做了个治标不治本的 fix。今天抽了点空总算解决了。
我不知道 ConnectIDGetPos 应不应该返回 NULL,这得问 yuking 了。
代码: 全选
diff -ur fcitx.orig/src/xim.c fcitx/src/xim.c
--- fcitx.orig/src/xim.c 2008-11-04 16:43:30.000000000 +0800
+++ fcitx/src/xim.c 2009-03-05 13:41:37.000000000 +0800
@@ -193,15 +193,16 @@
}
if ( !bTrackCursor || !ConnectIDGetTrackCursor (call_data->connect_id) ) {
+ position * pos = ConnectIDGetPos(connect_id);
if (bCenterInputWindow) {
iInputWindowX = (DisplayWidth (dpy, iScreen) - iInputWindowWidth) / 2;
if (iInputWindowX < 0)
iInputWindowX = 0;
}
else
- iInputWindowX = ConnectIDGetPos(connect_id)->x;
+ iInputWindowX = pos ? pos->x : iInputWindowX;
- XMoveWindow (dpy, inputWindow, iInputWindowX, ConnectIDGetPos(connect_id)->y);
+ XMoveWindow (dpy, inputWindow, iInputWindowX, pos ? pos->y : iInputWindowY);
}
return True;
@@ -261,15 +262,16 @@
iHZInputed = 0;
if ( !bTrackCursor || !ConnectIDGetTrackCursor (call_data->connect_id) ) {
+ position * pos = ConnectIDGetPos(connect_id);
if (bCenterInputWindow) {
iInputWindowX = (DisplayWidth (dpy, iScreen) - iInputWindowWidth) / 2;
if (iInputWindowX < 0)
iInputWindowX = 0;
}
else
- iInputWindowX = ConnectIDGetPos(connect_id)->x;
+ iInputWindowX = pos ? pos->x : iInputWindowX;
- XMoveWindow (dpy, inputWindow, iInputWindowX, ConnectIDGetPos(connect_id)->y);
+ XMoveWindow (dpy, inputWindow, iInputWindowX, pos ? pos->y : iInputWindowY);
}
return True;