summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforminputcontexts
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-01-31 12:28:52 +0100
committerQt by Nokia <qt-info@nokia.com>2012-01-31 19:57:33 +0100
commitfe7265a0bbe4da9577fecd8cb9be22262523f65b (patch)
tree8b0e57722b1eee8f1f5e5aaba07079cfd513b416 /src/plugins/platforminputcontexts
parentb27bf9bb94ff40b7e4f69d7f0cb606e12baa2fe2 (diff)
Maliit: Fix enter on VKB not resulting in text input field acceptance
Pressing enter on the VKB should result in the emission of the accepted() for text input fields in QML or the returnPressed() signal in QLineEdit. In that case the Maliit input server calls our keyEvent method over DBus, which this patch implements. Change-Id: I46170c30315adaf21db0e232f53780ccaa67e4bf Reviewed-by: Jan Arne Petersen <jpetersen@openismus.com> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
Diffstat (limited to 'src/plugins/platforminputcontexts')
-rw-r--r--src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.cpp29
-rw-r--r--src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.h2
2 files changed, 28 insertions, 3 deletions
diff --git a/src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.cpp b/src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.cpp
index 9db07af950..724f50db8f 100644
--- a/src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.cpp
+++ b/src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.cpp
@@ -127,6 +127,13 @@ static TextContentType contentTypeFromHints(Qt::InputMethodHints hints)
return type;
}
+/// From Maliit's namespace.h
+enum MaliitEventRequestType {
+ EventRequestBoth, //!< Both a Qt::KeyEvent and a signal
+ EventRequestSignalOnly, //!< Only a signal
+ EventRequestEventOnly //!< Only a Qt::KeyEvent
+};
+
static QString maliitServerAddress()
{
org::maliit::Server::Address serverAddress(QStringLiteral("org.maliit.server"), QStringLiteral("/org/maliit/server/address"), QDBusConnection::sessionBus());
@@ -383,9 +390,27 @@ void QMaliitPlatformInputContext::imInitiatedHide()
// ### clear focus
}
-void QMaliitPlatformInputContext::keyEvent(int, int, int, const QString &, bool, int, uchar)
+void QMaliitPlatformInputContext::keyEvent(int type, int key, int modifiers, const QString &text,
+ bool autoRepeat, int count, uchar requestType_)
{
- // Not supported at the moment.
+ MaliitEventRequestType requestType = MaliitEventRequestType(requestType_);
+ if (requestType == EventRequestSignalOnly) {
+ qWarning() << "Maliit: Signal emitted key events are not supported.";
+ return;
+ }
+
+ // HACK: This code relies on QEvent::Type for key events and modifiers to be binary compatible between
+ // Qt 4 and 5.
+ QEvent::Type eventType = static_cast<QEvent::Type>(type);
+ if (type != QEvent::KeyPress && type != QEvent::KeyRelease) {
+ qWarning() << "Maliit: Unknown key event type" << type;
+ return;
+ }
+
+ QKeyEvent event(eventType, key, static_cast<Qt::KeyboardModifiers>(modifiers),
+ text, autoRepeat, count);
+ if (d->window)
+ QCoreApplication::sendEvent(d->window.data(), &event);
}
void QMaliitPlatformInputContext::paste()
diff --git a/src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.h b/src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.h
index 61960e8e8f..3760885641 100644
--- a/src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.h
+++ b/src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.h
@@ -76,7 +76,7 @@ public Q_SLOTS:
void updatePreedit(const QDBusMessage &message);
void copy();
void imInitiatedHide();
- void keyEvent(int , int , int , const QString &, bool , int , uchar );
+ void keyEvent(int type, int key, int modifiers, const QString &text, bool autoRepeat, int count, uchar requestType_);
void paste();
bool preeditRectangle(int &x, int &y, int &width, int &height);
bool selection(QString &selection);