summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);