diff --git a/src/plugins/platforms/wayland/global/qwaylandclientextension.cpp b/src/plugins/platforms/wayland/global/qwaylandclientextension.cpp index b2783088bf3..92c746d3541 100644 --- a/src/plugins/platforms/wayland/global/qwaylandclientextension.cpp +++ b/src/plugins/platforms/wayland/global/qwaylandclientextension.cpp @@ -10,6 +10,7 @@ QT_BEGIN_NAMESPACE using RegistryGlobal = QtWaylandClient::QWaylandDisplay::RegistryGlobal; +using namespace Qt::StringLiterals; QWaylandClientExtensionPrivate::QWaylandClientExtensionPrivate() { @@ -17,7 +18,7 @@ QWaylandClientExtensionPrivate::QWaylandClientExtensionPrivate() // but also add the possibility to run it as a QML component. waylandIntegration = QtWaylandClient::QWaylandIntegration::instance(); if (!waylandIntegration) - waylandIntegration = new QtWaylandClient::QWaylandIntegration(); + waylandIntegration = new QtWaylandClient::QWaylandIntegration("wayland"_L1); } void QWaylandClientExtensionPrivate::globalAdded(const RegistryGlobal &global) diff --git a/src/plugins/platforms/wayland/plugins/CMakeLists.txt b/src/plugins/platforms/wayland/plugins/CMakeLists.txt index e0c91c5e46e..7b90c829453 100644 --- a/src/plugins/platforms/wayland/plugins/CMakeLists.txt +++ b/src/plugins/platforms/wayland/plugins/CMakeLists.txt @@ -5,7 +5,7 @@ add_subdirectory(hardwareintegration) if(TARGET Qt::WaylandClient) - add_subdirectory(platforms) + add_subdirectory(platform) add_subdirectory(decorations) add_subdirectory(shellintegration) endif() diff --git a/src/plugins/platforms/wayland/plugins/platform/CMakeLists.txt b/src/plugins/platforms/wayland/plugins/platform/CMakeLists.txt new file mode 100644 index 00000000000..59b6b3efead --- /dev/null +++ b/src/plugins/platforms/wayland/plugins/platform/CMakeLists.txt @@ -0,0 +1,24 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +# Generated from qwayland-generic.pro. + +##################################################################### +## QWaylandIntegrationPlugin Plugin: +##################################################################### + +qt_internal_add_plugin(QWaylandIntegrationPlugin + OUTPUT_NAME qwayland + PLUGIN_TYPE platforms + DEFAULT_IF "wayland" IN_LIST QT_QPA_PLATFORMS + SOURCES + main.cpp + LIBRARIES + Qt::Core + Qt::Gui + Qt::WaylandClientPrivate + QT_LICENSE_ID QT_COMMERCIAL_OR_LGPL3 +) + +#### Keys ignored in scope 1:.:.:qwayland-generic.pro:: +# OTHER_FILES = "qwayland-generic.json" diff --git a/src/plugins/platforms/wayland/plugins/platform/main.cpp b/src/plugins/platforms/wayland/plugins/platform/main.cpp new file mode 100644 index 00000000000..19a8fa147f9 --- /dev/null +++ b/src/plugins/platforms/wayland/plugins/platform/main.cpp @@ -0,0 +1,45 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QtWaylandClient { + +class QWaylandIntegrationPlugin : public QPlatformIntegrationPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "qwayland-generic.json") +public: + QPlatformIntegration *create(const QString&, const QStringList&) override; +}; + +QPlatformIntegration *QWaylandIntegrationPlugin::create(const QString& system, const QStringList& paramList) +{ + Q_UNUSED(paramList) +#if !QT_CONFIG(wayland_egl) + if (system == "wayland-egl") + return nullptr; +#endif +#if !QT_CONFIG(wayland_brcm) + if (system == "wayland-brcm") + return nullptr; +#endif + auto *integration = new QWaylandIntegration(system); + + if (!integration->init()) { + delete integration; + integration = nullptr; + } + + return integration; +} + +} // namespace QtWaylandClient + +QT_END_NAMESPACE + +#include "main.moc" diff --git a/src/plugins/platforms/wayland/plugins/platform/qwayland-generic.json b/src/plugins/platforms/wayland/plugins/platform/qwayland-generic.json new file mode 100644 index 00000000000..d07e7e1aa89 --- /dev/null +++ b/src/plugins/platforms/wayland/plugins/platform/qwayland-generic.json @@ -0,0 +1,7 @@ +{ + "Keys": [ + "wayland", + "wayland-egl", + "wayland-brcm" + ] +} diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp index d5da84c2434..50fe5cbe2d1 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.cpp +++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp @@ -74,15 +74,17 @@ QT_BEGIN_NAMESPACE +using namespace Qt::StringLiterals; + namespace QtWaylandClient { QWaylandIntegration *QWaylandIntegration::sInstance = nullptr; -QWaylandIntegration::QWaylandIntegration() +QWaylandIntegration::QWaylandIntegration(const QString &platformName) #if defined(Q_OS_MACOS) : mFontDb(new QCoreTextFontDatabaseEngineFactory) #else - : mFontDb(new QGenericUnixFontDatabase()) + : mPlatformName(platformName), mFontDb(new QGenericUnixFontDatabase()) #endif { mDisplay.reset(new QWaylandDisplay(this)); @@ -92,6 +94,8 @@ QWaylandIntegration::QWaylandIntegration() !qEnvironmentVariableIsSet("QT_WAYLAND_DISABLE_FIXED_POSITIONS"); sInstance = this; + if (platformName != "wayland"_L1) + initializeClientBufferIntegration(); } QWaylandIntegration::~QWaylandIntegration() @@ -335,6 +339,10 @@ void QWaylandIntegration::initializeClientBufferIntegration() return; QString targetKey = QString::fromLocal8Bit(qgetenv("QT_WAYLAND_CLIENT_BUFFER_INTEGRATION")); + if (mPlatformName == "wayland-egl"_L1) + targetKey = "wayland-egl"_L1; + else if (mPlatformName == "wayland-brcm"_L1) + targetKey = "brcm"_L1; if (targetKey.isEmpty()) { if (mDisplay->hardwareIntegration() diff --git a/src/plugins/platforms/wayland/qwaylandintegration_p.h b/src/plugins/platforms/wayland/qwaylandintegration_p.h index d75fef6194a..e379668adb4 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration_p.h +++ b/src/plugins/platforms/wayland/qwaylandintegration_p.h @@ -39,7 +39,7 @@ class QWaylandPlatformServices; class Q_WAYLANDCLIENT_EXPORT QWaylandIntegration : public QPlatformIntegration { public: - QWaylandIntegration(); + QWaylandIntegration(const QString &platformName); ~QWaylandIntegration() override; static QWaylandIntegration *instance() { return sInstance; } @@ -127,6 +127,7 @@ private: void initializeInputDeviceIntegration(); QWaylandShellIntegration *createShellIntegration(const QString& interfaceName); + const QString mPlatformName; QScopedPointer mFontDb; #if QT_CONFIG(clipboard) QScopedPointer mClipboard;