diff options
Diffstat (limited to 'src/plugins/platforminputcontexts')
-rw-r--r-- | src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.cpp | 29 | ||||
-rw-r--r-- | src/plugins/platforminputcontexts/maliit/qmaliitplatforminputcontext.h | 2 |
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); |