diff options
-rw-r--r-- | src/client/qwaylanddisplay.cpp | 4 | ||||
-rw-r--r-- | src/client/qwaylanddisplay_p.h | 6 | ||||
-rw-r--r-- | src/client/qwaylandintegration.cpp | 2 | ||||
-rw-r--r-- | tests/auto/client/inputcontext/tst_inputcontext.cpp | 3 |
4 files changed, 12 insertions, 3 deletions
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp index c75ede73..55043311 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -833,6 +833,10 @@ bool QWaylandDisplay::isKeyboardAvailable() const [](const QWaylandInputDevice *device) { return device->keyboard() != nullptr; }); } +bool QWaylandDisplay::isClientSideInputContextRequested() const { + return mClientSideInputContextRequested; +} + #if QT_CONFIG(cursor) QWaylandCursor *QWaylandDisplay::waylandCursor() diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h index 3809de1e..473016f1 100644 --- a/src/client/qwaylanddisplay_p.h +++ b/src/client/qwaylanddisplay_p.h @@ -185,6 +185,7 @@ public: wl_event_queue *frameEventQueue() { return m_frameEventQueue; }; bool isKeyboardAvailable() const; + bool isClientSideInputContextRequested() const; void initEventThread(); @@ -275,7 +276,10 @@ private: struct wl_callback *mSyncCallback = nullptr; static const wl_callback_listener syncCallbackListener; - bool mClientSideInputContextRequested = !QPlatformInputContextFactory::requested().isNull(); + bool mClientSideInputContextRequested = [] () { + const QString& requested = QPlatformInputContextFactory::requested(); + return !requested.isEmpty() && requested != QLatin1String("wayland"); + }(); QStringList mTextInputManagerList; int mTextInputManagerIndex = INT_MAX; diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp index 33d47e4c..ed04e403 100644 --- a/src/client/qwaylandintegration.cpp +++ b/src/client/qwaylandintegration.cpp @@ -476,7 +476,7 @@ void QWaylandIntegration::reconfigureInputContext() qCWarning(lcQpaWayland) << "qtvirtualkeyboard currently is not supported at client-side," " use QT_IM_MODULE=qtvirtualkeyboard at compositor-side."; - if (requested.isNull()) { + if (!mDisplay->isClientSideInputContextRequested()) { if (mDisplay->textInputMethodManager() != nullptr) mInputContext.reset(new QWaylandInputMethodContext(mDisplay.data())); #if QT_WAYLAND_TEXT_INPUT_V4_WIP diff --git a/tests/auto/client/inputcontext/tst_inputcontext.cpp b/tests/auto/client/inputcontext/tst_inputcontext.cpp index 9e3d75e0..9bcfa9e7 100644 --- a/tests/auto/client/inputcontext/tst_inputcontext.cpp +++ b/tests/auto/client/inputcontext/tst_inputcontext.cpp @@ -98,8 +98,9 @@ void tst_inputcontext::selectingInputContext_data() // Test compositor with Text Input extension QTest::newRow("ibus:text-input") << QByteArray("ibus") << mIbusModule; QTest::newRow("compose:text-input") << QByteArray("compose") << mComposeModule; - QTest::newRow("empty:text-input") << QByteArray("") << mComposeModule; + QTest::newRow("empty:text-input") << QByteArray("") << mTextInputModule; QTest::newRow("null:text-input") << QByteArray() << mTextInputModule; + QTest::newRow("wayland:text-input") << QByteArray("wayland") << mTextInputModule; QTest::newRow("fake:text-input") << QByteArray("fake") << mComposeModule; } |