Client: let QWaylandClientExtension work before platform integration is assigned

Task-number: QTBUG-102457
Pick-to: 6.5
Change-Id: Ia47478a4fbf45ba96fd73c6a1a53c2b844aa41b4
Reviewed-by: David Edmundson <davidedmundson@kde.org>
This commit is contained in:
Ilya Fedin 2023-03-29 21:22:46 +04:00
parent 25e7d1ed11
commit d6d416b05e
3 changed files with 10 additions and 8 deletions

View File

@ -6,10 +6,6 @@
#include "qwaylandclientextension_p.h"
#include <QtWaylandClient/private/qwaylanddisplay_p.h>
#include <QtWaylandClient/private/qwaylandintegration_p.h>
#include <QtGui/QGuiApplication>
#include <QtGui/qpa/qplatformnativeinterface.h>
#include <QtGui/private/qguiapplication_p.h>
#include <QtCore/QDebug>
QT_BEGIN_NAMESPACE
@ -19,12 +15,9 @@ QWaylandClientExtensionPrivate::QWaylandClientExtensionPrivate()
{
// Keep the possibility to use a custom waylandIntegration as a plugin,
// but also add the possibility to run it as a QML component.
waylandIntegration = static_cast<QtWaylandClient::QWaylandIntegration *>(QGuiApplicationPrivate::platformIntegration());
waylandIntegration = QtWaylandClient::QWaylandIntegration::instance();
if (!waylandIntegration)
waylandIntegration = new QtWaylandClient::QWaylandIntegration();
if (!waylandIntegration->nativeInterface()->nativeResourceForIntegration("wl_display"))
qWarning() << "This application requires a Wayland platform plugin";
}
void QWaylandClientExtensionPrivate::globalAdded(const RegistryGlobal &global)

View File

@ -73,6 +73,8 @@ QT_BEGIN_NAMESPACE
namespace QtWaylandClient {
QWaylandIntegration *QWaylandIntegration::sInstance = nullptr;
QWaylandIntegration::QWaylandIntegration()
#if defined(Q_OS_MACOS)
: mFontDb(new QCoreTextFontDatabaseEngineFactory<QCoreTextFontEngine>)
@ -88,10 +90,13 @@ QWaylandIntegration::QWaylandIntegration()
QWaylandWindow::fixedToplevelPositions =
!qEnvironmentVariableIsSet("QT_WAYLAND_DISABLE_FIXED_POSITIONS");
sInstance = this;
}
QWaylandIntegration::~QWaylandIntegration()
{
sInstance = nullptr;
}
QPlatformNativeInterface * QWaylandIntegration::nativeInterface() const

View File

@ -41,6 +41,8 @@ public:
QWaylandIntegration();
~QWaylandIntegration() override;
static QWaylandIntegration *instance() { return sInstance; }
bool hasFailed() { return mFailed; }
bool hasCapability(QPlatformIntegration::Capability cap) const override;
@ -138,6 +140,8 @@ private:
bool mServerBufferIntegrationInitialized = false;
bool mShellIntegrationInitialized = false;
static QWaylandIntegration *sInstance;
friend class QWaylandDisplay;
};