diff options
| author | Huang Peng <shawn.p.huang@gmail.com> | 2008-08-18 10:01:36 +0800 |
|---|---|---|
| committer | Huang Peng <shawn.p.huang@gmail.com> | 2008-08-18 10:01:36 +0800 |
| commit | f1390a784766ccfc5903d54e9ae03553dac5273f (patch) | |
| tree | 375be018153fb0d32065551855eb84e88c3cdc20 /client | |
| parent | 8b5edb3da30ec604d1de12ea7e2bff47c4b2f6b1 (diff) | |
| download | ibus-f1390a784766ccfc5903d54e9ae03553dac5273f.tar.gz ibus-f1390a784766ccfc5903d54e9ae03553dac5273f.tar.xz ibus-f1390a784766ccfc5903d54e9ae03553dac5273f.zip | |
Fix some problems.
Diffstat (limited to 'client')
| -rw-r--r-- | client/qt4/ibus-client.cpp | 36 | ||||
| -rw-r--r-- | client/qt4/ibus-client.h | 2 | ||||
| -rw-r--r-- | client/qt4/ibus-input-context.cpp | 16 | ||||
| -rw-r--r-- | client/qt4/ibus-input-context.h | 1 |
4 files changed, 36 insertions, 19 deletions
diff --git a/client/qt4/ibus-client.cpp b/client/qt4/ibus-client.cpp index cb37b1b..53791b6 100644 --- a/client/qt4/ibus-client.cpp +++ b/client/qt4/ibus-client.cpp @@ -42,7 +42,7 @@ IBusClient::IBusClient () - : ibus (NULL), focused_context (NULL) + : ibus (NULL) { username = getlogin (); if (username.isNull ()) @@ -220,10 +220,6 @@ IBusClient::x11FilterEvent (IBusInputContext *ctx, QWidget * /* keywidget */, XE quint32 state; bool is_press; - if (focused_context != ctx) { - focusIn (ctx); - } - if (ibus == NULL || !ibus->isConnected () || ctx->getIC().isEmpty ()) return false; @@ -261,10 +257,6 @@ IBusClient::setCursorLocation (IBusInputContext *ctx, QRect &rect) { Q_ASSERT (ctx); - if (focused_context != ctx) { - focusIn (ctx); - } - if (ibus == NULL || !ibus->isConnected () || ctx->getIC().isEmpty ()) return; @@ -307,9 +299,6 @@ void IBusClient::focusIn (IBusInputContext *ctx) { Q_ASSERT (ctx); - if (focused_context != ctx && focused_context != NULL) - focusOut (focused_context); - focused_context = ctx; if (ibus == NULL || !ibus->isConnected () || ctx->getIC().isEmpty ()) return; @@ -331,10 +320,25 @@ IBusClient::focusOut (IBusInputContext *ctx) { Q_ASSERT (ctx); - if (focused_context != ctx) + if (ibus == NULL || !ibus->isConnected () || ctx->getIC().isEmpty ()) return; - focused_context = NULL; + QDBusMessage message = QDBusMessage::createMethodCall ( + IBUS_NAME, + IBUS_PATH, + IBUS_INTERFACE, + "FocusOut"); + message << ctx->getIC (); + message = ibus->call (message); + if (message.type() == QDBusMessage::ErrorMessage) { + qWarning() << message.errorMessage (); + } +} + +void +IBusClient::setCapabilities (IBusInputContext *ctx, int caps) +{ + Q_ASSERT (ctx); if (ibus == NULL || !ibus->isConnected () || ctx->getIC().isEmpty ()) return; @@ -343,13 +347,15 @@ IBusClient::focusOut (IBusInputContext *ctx) IBUS_NAME, IBUS_PATH, IBUS_INTERFACE, - "FocusOut"); + "SetCapabilities"); message << ctx->getIC (); + message << caps; message = ibus->call (message); if (message.type() == QDBusMessage::ErrorMessage) { qWarning() << message.errorMessage (); } } + void IBusClient::widgetDestroyed (IBusInputContext * /* ctx */, QWidget * /* widget */) { diff --git a/client/qt4/ibus-client.h b/client/qt4/ibus-client.h index 285d633..ff21c07 100644 --- a/client/qt4/ibus-client.h +++ b/client/qt4/ibus-client.h @@ -58,6 +58,7 @@ public: void focusIn (IBusInputContext *ctx); void focusOut (IBusInputContext *ctx); void reset (IBusInputContext *ctx); + void setCapabilities (IBusInputContext *ctx, int caps); private slots: void slotDirectoryChanged (const QString &path); @@ -78,7 +79,6 @@ private: QFileSystemWatcher watcher; QList <IBusInputContext *> context_list; QHash <QString, IBusInputContext *>context_dict; - IBusInputContext *focused_context; QString username; QString session; QString ibus_addr; diff --git a/client/qt4/ibus-input-context.cpp b/client/qt4/ibus-input-context.cpp index 44de61d..99d0cf0 100644 --- a/client/qt4/ibus-input-context.cpp +++ b/client/qt4/ibus-input-context.cpp @@ -28,7 +28,11 @@ typedef QInputMethodEvent::Attribute QAttribute; IBusInputContext::IBusInputContext (QObject *parent, IBusClient *client, QString &ic) - : QInputContext (parent), client (client), ic (ic), preedit_visible (false) + : QInputContext (parent), + client (client), + ic (ic), + preedit_visible (false), + has_focus (false) { } @@ -132,9 +136,15 @@ IBusInputContext::setFocusWidget (QWidget *widget) { QInputContext::setFocusWidget (widget); if (widget == NULL) { + has_focus = false; client->focusOut (this); } else { + if (widget->inherits("KateViewInternal")) + client->setCapabilities (this, 0); + else + client->setCapabilities (this, 1); + has_focus = true; client->focusIn (this); update (); } @@ -151,8 +161,8 @@ IBusInputContext::widgetDestroyed (QWidget *widget) bool IBusInputContext::x11FilterEvent (QWidget *keywidget, XEvent *xevent) { - if (client->x11FilterEvent (this, keywidget, xevent)) - return true; + if (has_focus && client->x11FilterEvent (this, keywidget, xevent)) + return true; return QInputContext::x11FilterEvent (keywidget, xevent); } #endif diff --git a/client/qt4/ibus-input-context.h b/client/qt4/ibus-input-context.h index 317c876..2e20bb8 100644 --- a/client/qt4/ibus-input-context.h +++ b/client/qt4/ibus-input-context.h @@ -62,6 +62,7 @@ private: QString preedit_string; bool preedit_visible; int preedit_cursor_pos; + bool has_focus; QList <QList <quint32> > preedit_attrs; QRect cursor_location; }; |
