Fixes to the ibus input context
authorLars Knoll <lars.knoll@nokia.com>
Mon, 31 Oct 2011 09:16:15 +0000 (10:16 +0100)
committerQt by Nokia <qt-info@nokia.com>
Tue, 1 Nov 2011 00:51:32 +0000 (01:51 +0100)
Adjust to changes in the QPlatformInputContext
and implement commit(). Fix a bug that caused the
cursor to be hidden after the first commit.

Change-Id: I85e59a72766d1180a54df412cf33beb653af4e7b
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp
src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h

index 67ee9da..2c2188b 100644 (file)
@@ -77,6 +77,7 @@ public:
     QIBusInputContextProxy *context;
 
     bool valid;
+    QString predit;
 };
 
 
@@ -104,10 +105,11 @@ bool QIBusPlatformInputContext::isValid() const
 
 void QIBusPlatformInputContext::invokeAction(QInputPanel::Action a, int x)
 {
-    QPlatformInputContext::invokeAction(a, x);
-
     if (!d->valid)
         return;
+
+    if (a == QInputPanel::Click)
+        commit();
 }
 
 void QIBusPlatformInputContext::reset()
@@ -118,8 +120,31 @@ void QIBusPlatformInputContext::reset()
         return;
 
     d->context->Reset();
+    d->predit = QString();
+}
+
+void QIBusPlatformInputContext::commit()
+{
+    QPlatformInputContext::commit();
+
+    if (!d->valid)
+        return;
+
+    QObject *input = qApp->inputPanel()->inputItem();
+    if (!input) {
+        d->predit = QString();
+        return;
+    }
+
+    QInputMethodEvent event;
+    event.setCommitString(d->predit);
+    QCoreApplication::sendEvent(input, &event);
+
+    d->context->Reset();
+    d->predit = QString();
 }
 
+
 void QIBusPlatformInputContext::update(Qt::InputMethodQueries q)
 {
     QPlatformInputContext::update(q);
@@ -179,6 +204,8 @@ void QIBusPlatformInputContext::commitText(const QDBusVariant &text)
     QInputMethodEvent event;
     event.setCommitString(t.text);
     QCoreApplication::sendEvent(input, &event);
+
+    d->predit = QString();
 }
 
 void QIBusPlatformInputContext::updatePreeditText(const QDBusVariant &text, uint cursorPos, bool visible)
@@ -195,10 +222,13 @@ void QIBusPlatformInputContext::updatePreeditText(const QDBusVariant &text, uint
         qDebug() << "preedit text:" << t.text;
 
     QList<QInputMethodEvent::Attribute> attributes = t.attributes.imAttributes();
-    attributes += QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, visible ? 1 : 0, QVariant());
+    if (!t.text.isEmpty())
+        attributes += QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, visible ? 1 : 0, QVariant());
 
     QInputMethodEvent event(t.text, attributes);
     QCoreApplication::sendEvent(input, &event);
+
+    d->predit = t.text;
 }
 
 
index 303b6f7..3dd2aef 100644 (file)
@@ -58,7 +58,8 @@ public:
     bool isValid() const;
 
     void invokeAction(QInputPanel::Action a, int x);
-    void reset(void);
+    void reset();
+    void commit();
     void update(Qt::InputMethodQueries);
 
     Q_INVOKABLE bool x11FilterEvent(uint keyval, uint keycode, uint state, bool press);