Also use text-input if QT_IM_MODULE is empty or "wayland"

Previously, text input can only be used when only when QT_IM_MODULE is
unset, it is counter-intuitive when empty and null has different meaning.
Additionally making "wayland" to use text input to make it easier to enforce
wayland context. Gtk's relevant value is also "wayland" so it will be more
consistent.

Pick-to: 6.4 6.3 6.2
Change-Id: I39b8c899b0ab7965d4b17ca29ed9eadc14f17e88
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Reviewed-by: Aleix Pol Gonzalez <aleixpol@kde.org>
This commit is contained in:
Weng Xuetian 2022-06-16 19:46:59 -07:00
parent b5160ae118
commit e43b382fb3
4 changed files with 12 additions and 3 deletions

View File

@ -833,6 +833,10 @@ bool QWaylandDisplay::isKeyboardAvailable() const
[](const QWaylandInputDevice *device) { return device->keyboard() != nullptr; }); [](const QWaylandInputDevice *device) { return device->keyboard() != nullptr; });
} }
bool QWaylandDisplay::isClientSideInputContextRequested() const {
return mClientSideInputContextRequested;
}
#if QT_CONFIG(cursor) #if QT_CONFIG(cursor)
QWaylandCursor *QWaylandDisplay::waylandCursor() QWaylandCursor *QWaylandDisplay::waylandCursor()

View File

@ -185,6 +185,7 @@ public:
wl_event_queue *frameEventQueue() { return m_frameEventQueue; }; wl_event_queue *frameEventQueue() { return m_frameEventQueue; };
bool isKeyboardAvailable() const; bool isKeyboardAvailable() const;
bool isClientSideInputContextRequested() const;
void initEventThread(); void initEventThread();
@ -275,7 +276,10 @@ private:
struct wl_callback *mSyncCallback = nullptr; struct wl_callback *mSyncCallback = nullptr;
static const wl_callback_listener syncCallbackListener; 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; QStringList mTextInputManagerList;
int mTextInputManagerIndex = INT_MAX; int mTextInputManagerIndex = INT_MAX;

View File

@ -479,7 +479,7 @@ void QWaylandIntegration::reconfigureInputContext()
qCWarning(lcQpaWayland) << "qtvirtualkeyboard currently is not supported at client-side," qCWarning(lcQpaWayland) << "qtvirtualkeyboard currently is not supported at client-side,"
" use QT_IM_MODULE=qtvirtualkeyboard at compositor-side."; " use QT_IM_MODULE=qtvirtualkeyboard at compositor-side.";
if (requested.isNull()) { if (!mDisplay->isClientSideInputContextRequested()) {
if (mDisplay->textInputMethodManager() != nullptr) if (mDisplay->textInputMethodManager() != nullptr)
mInputContext.reset(new QWaylandInputMethodContext(mDisplay.data())); mInputContext.reset(new QWaylandInputMethodContext(mDisplay.data()));
#if QT_WAYLAND_TEXT_INPUT_V4_WIP #if QT_WAYLAND_TEXT_INPUT_V4_WIP

View File

@ -98,8 +98,9 @@ void tst_inputcontext::selectingInputContext_data()
// Test compositor with Text Input extension // Test compositor with Text Input extension
QTest::newRow("ibus:text-input") << QByteArray("ibus") << mIbusModule; QTest::newRow("ibus:text-input") << QByteArray("ibus") << mIbusModule;
QTest::newRow("compose:text-input") << QByteArray("compose") << mComposeModule; 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("null:text-input") << QByteArray() << mTextInputModule;
QTest::newRow("wayland:text-input") << QByteArray("wayland") << mTextInputModule;
QTest::newRow("fake:text-input") << QByteArray("fake") << mComposeModule; QTest::newRow("fake:text-input") << QByteArray("fake") << mComposeModule;
} }