From d7649245ecfe6fac3a5530cd80ffe461fc2ad488 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 31 Oct 2011 10:16:15 +0100 Subject: Fixes to the ibus input context 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 --- .../ibus/qibusplatforminputcontext.cpp | 36 ++++++++++++++++++++-- .../ibus/qibusplatforminputcontext.h | 3 +- 2 files changed, 35 insertions(+), 4 deletions(-) (limited to 'src/plugins/platforminputcontexts/ibus') diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp index 67ee9da252..2c2188b85e 100644 --- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp +++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp @@ -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 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; } diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h index 303b6f7cc0..3dd2aefe06 100644 --- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h +++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h @@ -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); -- cgit v1.2.3