summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2011-10-31 10:16:15 +0100
committerQt by Nokia <qt-info@nokia.com>2011-11-01 01:51:32 +0100
commitd7649245ecfe6fac3a5530cd80ffe461fc2ad488 (patch)
tree4625a8ecf4c046d6bfa2211191b6b10219bf9a7f
parentc9ef22b18585b228b47a9f1a20e000bd1b1b0f54 (diff)
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 <joona.t.petrell@nokia.com>
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp36
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h3
2 files changed, 35 insertions, 4 deletions
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<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;
}
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);