|
发表于 2006-8-8 09:14:57
|
显示全部楼层
那就是打过了。fcitx-3.x 在未打 immodules 补丁的 qt 上会出现按一个键出多个字母的现象,不过给 qt 打个小补丁,禁止在窗口标题栏调出输入法后可以解决这个问题,用 3.2 以上版本偶而会出现假死现象,不严重。用 3.1.1 便没有任何问题了。
补丁如下:
- --- qt-x11-free-3.3.6-snapshot-20060104/src/kernel/qwidget_x11.cpp.orig 2006-01-04 00:54:31.000000000 +0000
- +++ qt-x11-free-3.3.6-snapshot-20060104/src/kernel/qwidget_x11.cpp 2006-01-10 18:37:55.000000000 +0000
- @@ -1440,7 +1440,7 @@
- void QWidget::setActiveWindow()
- {
- QWidget *tlw = topLevelWidget();
- - if ( tlw->isVisible() && !tlw->topData()->embedded && !qt_deferred_map_contains(tlw) ) {
- + if ( tlw->isVisible() && !tlw->topData()->embedded && !qt_deferred_map_contains(tlw) && !tlw->isDesktop() && !tlw->isPopup()) {
- XSetInputFocus( x11Display(), tlw->winId(), RevertToNone, qt_x_time);
-
- #ifndef QT_NO_XIM
- @@ -2674,7 +2674,7 @@
- QTLWExtra *topdata = tlw->topData();
-
- #ifndef QT_NO_XIM
- - if (qt_xim) {
- + if (qt_xim && !tlw->isDesktop() && !tlw->isPopup()) {
- if (! topdata->xic) {
- QInputContext *qic = new QInputContext(tlw);
- topdata->xic = (void *) qic;
- @@ -2709,6 +2709,9 @@
- QWidget *tlw = topLevelWidget();
- QTLWExtra *topdata = tlw->topData();
-
- + //check tlw is desktop or popup or not
- + if (tlw->isDesktop() || tlw->isPopup())
- + return
- // trigger input context creation if it hasn't happened already
- createInputContext();
-
- @@ -2727,6 +2730,9 @@
- QWidget *tlw = topLevelWidget();
- QTLWExtra *topdata = tlw->topData();
-
- + //check tlw is desktop or popup or not
- + if (tlw->isDesktop() || tlw->isPopup())
- + return
- // trigger input context creation if it hasn't happened already
- createInputContext();
-
- --- qt-x11-free-3.3.6-snapshot-20060110/src/kernel/qapplication_x11.cpp.orig 2006-01-10 19:19:46.000000000 +0000
- +++ qt-x11-free-3.3.6-snapshot-20060110/src/kernel/qapplication_x11.cpp 2006-01-13 00:32:04.000000000 +0000
- @@ -5046,7 +5046,7 @@
-
- if ( type == QEvent::KeyPress ) {
- bool mb=FALSE;
- - if ( qt_xim ) {
- + if ( qt_xim && !tlw->isDesktop() && !tlw->isPopup() ) {
- QTLWExtra* xd = tlw->topData();
- QInputContext *qic = (QInputContext *) xd->xic;
- if ( qic ) {
- --- qt-x11-free-3.3.6-snapshot-20060110/src/kernel/qinputcontext_x11.cpp.xim_fix 2006-01-10 00:50:32.000000000 +0000
- +++ qt-x11-free-3.3.6-snapshot-20060110/src/kernel/qinputcontext_x11.cpp 2006-01-17 01:01:08.000000000 +0000
- @@ -145,7 +145,7 @@
- }
-
- bool send_imstart = FALSE;
- - if (qApp->focusWidget() != qic->focusWidget && qic->text.isEmpty()) {
- + if (qApp->focusWidget() != qic->focusWidget) {
- if (qic->focusWidget) {
- #ifdef QT_XIM_DEBUG
- qDebug( "sending IMEnd (empty) to %p", qic->focusWidget );
- @@ -324,7 +324,7 @@
- return;
- }
-
- - if (! widget->isTopLevel()) {
- + if (! widget->isTopLevel() || widget->isDesktop() || widget->isPopup()) {
- qWarning("QInputContext: cannot create input context for non-toplevel widgets");
- return;
- }
复制代码 |
|