commit 5a20879a13440df2bb5848b95b29c1c2e1ac7d00 Author: Fuminobu TAKEYAMA Date: Wed Sep 23 06:05:35 2015 +0900 IBus: Implement hide_preedit_text and show_preedit_text diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp index 2027e01..3d7918e 100644 --- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp +++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp @@ -81,6 +81,7 @@ public: bool valid; QString predit; + QList attributes; bool needsSurroundingText; }; @@ -93,6 +94,8 @@ QIBusPlatformInputContext::QIBusPlatformInputContext () connect(d->context, SIGNAL(UpdatePreeditText(QDBusVariant,uint,bool)), this, SLOT(updatePreeditText(QDBusVariant,uint,bool))); connect(d->context, SIGNAL(DeleteSurroundingText(int,uint)), this, SLOT(deleteSurroundingText(int,uint))); connect(d->context, SIGNAL(RequireSurroundingText()), this, SLOT(surroundingTextRequired())); + connect(d->context, SIGNAL(HidePreeditText()), this, SLOT(hidePreeditText())); + connect(d->context, SIGNAL(ShowPreeditText()), this, SLOT(showPreeditText())); } QInputMethod *p = qApp->inputMethod(); connect(p, SIGNAL(cursorRectangleChanged()), this, SLOT(cursorRectChanged())); @@ -133,6 +136,7 @@ void QIBusPlatformInputContext::reset() d->context->Reset(); d->predit = QString(); + d->attributes.clear(); } void QIBusPlatformInputContext::commit() @@ -145,6 +149,7 @@ void QIBusPlatformInputContext::commit() QObject *input = qApp->focusObject(); if (!input) { d->predit = QString(); + d->attributes.clear(); return; } @@ -156,6 +161,7 @@ void QIBusPlatformInputContext::commit() d->context->Reset(); d->predit = QString(); + d->attributes.clear(); } @@ -242,6 +248,7 @@ void QIBusPlatformInputContext::commitText(const QDBusVariant &text) QCoreApplication::sendEvent(input, &event); d->predit = QString(); + d->attributes.clear(); } void QIBusPlatformInputContext::updatePreeditText(const QDBusVariant &text, uint cursorPos, bool visible) @@ -257,11 +264,11 @@ void QIBusPlatformInputContext::updatePreeditText(const QDBusVariant &text, uint if (debug) qDebug() << "preedit text:" << t.text; - QList attributes = t.attributes.imAttributes(); + d->attributes = t.attributes.imAttributes(); if (!t.text.isEmpty()) - attributes += QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, visible ? 1 : 0, QVariant()); + d->attributes += QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, visible ? 1 : 0, QVariant()); - QInputMethodEvent event(t.text, attributes); + QInputMethodEvent event(t.text, d->attributes); QCoreApplication::sendEvent(input, &event); d->predit = t.text; @@ -384,6 +391,28 @@ void QIBusPlatformInputContext::filterEventFinished(QDBusPendingCallWatcher *cal call->deleteLater(); } +void QIBusPlatformInputContext::hidePreeditText() +{ + QObject *input = qApp->focusObject(); + if (!input) + return; + + QList attributes; + + QInputMethodEvent event("", attributes); + QCoreApplication::sendEvent(input, &event); +} + +void QIBusPlatformInputContext::showPreeditText() +{ + QObject *input = qApp->focusObject(); + if (!input) + return; + + QInputMethodEvent event(d->predit, d->attributes); + QCoreApplication::sendEvent(input, &event); +} + QIBusPlatformInputContextPrivate::QIBusPlatformInputContextPrivate() : connection(createConnection()), bus(0), diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h index 91f15ea..9b19b22 100644 --- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h +++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h @@ -95,6 +95,8 @@ public Q_SLOTS: void deleteSurroundingText(int offset, uint n_chars); void surroundingTextRequired(); void filterEventFinished(QDBusPendingCallWatcher *call); + void hidePreeditText(); + void showPreeditText(); private: QIBusPlatformInputContextPrivate *d;