diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2015-09-25 14:02:04 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2015-09-25 14:02:04 +0200 |
commit | a1ad9a74ebb3c556c5f70f7e03be68b09598ac53 (patch) | |
tree | 615a96db418219a57a745a5899e39a9ac90744ec /src/plugins/platforminputcontexts | |
parent | 6d78b7a0c46ea04f4bb771d960e2f7dff1362341 (diff) | |
parent | 462f355e4fb16cc7a1838fa2dda0f763eee58c84 (diff) |
Merge remote-tracking branch 'origin/5.6' into dev
Conflicts:
src/corelib/io/io.pri
src/corelib/io/qdatastream.cpp
src/corelib/io/qdatastream.h
src/network/socket/qabstractsocket.cpp
src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp
src/plugins/platforms/cocoa/qcocoaaccessibilityelement.h
src/widgets/styles/qgtkstyle.cpp
tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/qmimedatabase-cache.pro
tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/qmimedatabase-xml.pro
tests/auto/dbus/qdbusconnection/qdbusconnection.pro
tests/auto/dbus/qdbuspendingcall/tst_qdbuspendingcall.cpp
tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
Change-Id: I347549a024eb5bfa986699e0a11f96cc55c797a7
Diffstat (limited to 'src/plugins/platforminputcontexts')
4 files changed, 38 insertions, 20 deletions
diff --git a/src/plugins/platforminputcontexts/compose/compose.json b/src/plugins/platforminputcontexts/compose/compose.json index 2daf89ed30..fb95f1bfb0 100644 --- a/src/plugins/platforminputcontexts/compose/compose.json +++ b/src/plugins/platforminputcontexts/compose/compose.json @@ -1,3 +1,3 @@ { - "Keys": [ "compose" ] + "Keys": [ "compose", "xim" ] } diff --git a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp index 96f6424ba2..15c98ed006 100644 --- a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp +++ b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp @@ -52,7 +52,8 @@ QComposeInputContext *QComposePlatformInputContextPlugin::create(const QString & { Q_UNUSED(paramList); - if (system.compare(system, QLatin1String("compose"), Qt::CaseInsensitive) == 0) + if (system.compare(system, QLatin1String("compose"), Qt::CaseInsensitive) == 0 + || system.compare(system, QLatin1String("xim"), Qt::CaseInsensitive) == 0) return new QComposeInputContext; return 0; } diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp index 2027e010d0..9a41244c63 100644 --- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp +++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp @@ -301,12 +301,12 @@ bool QIBusPlatformInputContext::filterEvent(const QEvent *event) quint32 sym = keyEvent->nativeVirtualKey(); quint32 code = keyEvent->nativeScanCode(); quint32 state = keyEvent->nativeModifiers(); + quint32 ibusState = state; if (keyEvent->type() != QEvent::KeyPress) - state |= IBUS_RELEASE_MASK; + ibusState |= IBUS_RELEASE_MASK; - code -= 8; // ### - QDBusPendingReply<bool> reply = d->context->ProcessKeyEvent(sym, code, state); + QDBusPendingReply<bool> reply = d->context->ProcessKeyEvent(sym, code - 8, ibusState); if (m_eventFilterUseSynchronousMode || reply.isFinished()) { bool retval = reply.value(); @@ -315,17 +315,36 @@ bool QIBusPlatformInputContext::filterEvent(const QEvent *event) } Qt::KeyboardModifiers modifiers = keyEvent->modifiers(); + const int qtcode = keyEvent->key(); + + // From QKeyEvent::modifiers() + switch (qtcode) { + case Qt::Key_Shift: + modifiers ^= Qt::ShiftModifier; + break; + case Qt::Key_Control: + modifiers ^= Qt::ControlModifier; + break; + case Qt::Key_Alt: + modifiers ^= Qt::AltModifier; + break; + case Qt::Key_Meta: + modifiers ^= Qt::MetaModifier; + break; + case Qt::Key_AltGr: + modifiers ^= Qt::GroupSwitchModifier; + break; + } QVariantList args; args << QVariant::fromValue(keyEvent->timestamp()); args << QVariant::fromValue(static_cast<uint>(keyEvent->type())); - args << QVariant::fromValue(keyEvent->key()); + args << QVariant::fromValue(qtcode); args << QVariant::fromValue(code) << QVariant::fromValue(sym) << QVariant::fromValue(state); args << QVariant::fromValue(keyEvent->text()); args << QVariant::fromValue(keyEvent->isAutoRepeat()); - args << QVariant::fromValue(keyEvent->count()); - QIBusFilterEventWatcher *watcher = new QIBusFilterEventWatcher(reply, this, qApp->focusObject(), modifiers, args); + QIBusFilterEventWatcher *watcher = new QIBusFilterEventWatcher(reply, this, QGuiApplication::focusWindow(), modifiers, args); QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, &QIBusPlatformInputContext::filterEventFinished); return true; @@ -343,9 +362,9 @@ void QIBusPlatformInputContext::filterEventFinished(QDBusPendingCallWatcher *cal // Use watcher's window instead of the current focused window // since there is a time lag until filterEventFinished() returns. - QObject *input = watcher->input(); + QWindow *window = watcher->window(); - if (!input) { + if (!window) { call->deleteLater(); return; } @@ -360,14 +379,12 @@ void QIBusPlatformInputContext::filterEventFinished(QDBusPendingCallWatcher *cal const quint32 state = args.at(5).toUInt(); const QString string = args.at(6).toString(); const bool isAutoRepeat = args.at(7).toBool(); - const int count = args.at(8).toInt(); // copied from QXcbKeyboard::handleKeyEvent() bool retval = reply.value(); qCDebug(qtQpaInputMethods) << "filterEventFinished return" << code << sym << state << retval; if (!retval) { #ifndef QT_NO_CONTEXTMENU - QWindow *window = dynamic_cast<QWindow *>(input); if (type == QEvent::KeyPress && qtcode == Qt::Key_Menu && window != NULL) { const QPoint globalPos = window->screen()->handle()->cursor()->pos(); @@ -376,10 +393,9 @@ void QIBusPlatformInputContext::filterEventFinished(QDBusPendingCallWatcher *cal globalPos, modifiers); } #endif // QT_NO_CONTEXTMENU - QKeyEvent event(type, qtcode, modifiers, code, sym, - state, string, isAutoRepeat, count); - event.setTimestamp(time); - QCoreApplication::sendEvent(input, &event); + QWindowSystemInterface::handleExtendedKeyEvent(window, time, type, qtcode, modifiers, + code, sym, state, string, isAutoRepeat); + } call->deleteLater(); } diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h index 91f15ea159..127db7df8b 100644 --- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h +++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h @@ -38,6 +38,7 @@ #include <QtCore/qpointer.h> #include <QtDBus/qdbuspendingreply.h> #include <QLoggingCategory> +#include <QWindow> QT_BEGIN_NAMESPACE @@ -51,23 +52,23 @@ class QIBusFilterEventWatcher: public QDBusPendingCallWatcher public: explicit QIBusFilterEventWatcher(const QDBusPendingCall &call, QObject *parent = 0, - QObject *input = 0, + QWindow *window = 0, const Qt::KeyboardModifiers modifiers = 0, const QVariantList arguments = QVariantList()) : QDBusPendingCallWatcher(call, parent) - , m_input(input) + , m_window(window) , m_modifiers(modifiers) , m_arguments(arguments) {} ~QIBusFilterEventWatcher() {} - inline QObject *input() const { return m_input; } + inline QWindow *window() const { return m_window; } inline const Qt::KeyboardModifiers modifiers() const { return m_modifiers; } inline const QVariantList arguments() const { return m_arguments; } private: - QPointer<QObject> m_input; + QPointer<QWindow> m_window; const Qt::KeyboardModifiers m_modifiers; const QVariantList m_arguments; }; |