diff options
author | Johan Klokkhammer Helsing <johan.helsing@qt.io> | 2018-02-14 16:22:25 +0100 |
---|---|---|
committer | Johan Helsing <johan.helsing@qt.io> | 2018-02-26 15:59:45 +0000 |
commit | 72999738489b5251d025c954a77c93e8e1fdfd9d (patch) | |
tree | 1e17836dea84c49e078aacbc3a363ca305dbe605 /src/plugins/platforms | |
parent | 5b69d5f05fdf187ae8a5f08e9a57375cbbd7f142 (diff) | |
download | qtwayland-72999738489b5251d025c954a77c93e8e1fdfd9d.tar.gz |
Client: Fail gracefully when wl_display_connect fails
[ChangeLog][QPA plugin] If we're unable to create a connection to the Wayland
display, fail gracefully so other platform integrations can be tried instead.
This also adds QWaylandIntegration::hasFailed() which can later be extended to
report that the platform plugin is unusable for other reasons. I.e. no
compatible shell extensions or similar.
Task-number: QTBUG-59762
Change-Id: I0f1ae73982e2860814235c1a189741d130e1db3e
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Diffstat (limited to 'src/plugins/platforms')
5 files changed, 40 insertions, 5 deletions
diff --git a/src/plugins/platforms/qwayland-brcm-egl/main.cpp b/src/plugins/platforms/qwayland-brcm-egl/main.cpp index 2640c8ea..5fa40b8a 100644 --- a/src/plugins/platforms/qwayland-brcm-egl/main.cpp +++ b/src/plugins/platforms/qwayland-brcm-egl/main.cpp @@ -56,7 +56,14 @@ QPlatformIntegration *QWaylandBrcmEglPlatformIntegrationPlugin::create(const QSt { Q_UNUSED(paramList); Q_UNUSED(system); - return new QWaylandBrcmEglPlatformIntegration(); + auto *integration = new QWaylandBrcmEglPlatformIntegration(); + + if (integration->hasFailed()) { + delete integration; + integration = nullptr; + } + + return integration; } } diff --git a/src/plugins/platforms/qwayland-egl/main.cpp b/src/plugins/platforms/qwayland-egl/main.cpp index ebeeff39..76b82b3b 100644 --- a/src/plugins/platforms/qwayland-egl/main.cpp +++ b/src/plugins/platforms/qwayland-egl/main.cpp @@ -56,7 +56,14 @@ QPlatformIntegration *QWaylandEglPlatformIntegrationPlugin::create(const QString { Q_UNUSED(paramList); Q_UNUSED(system); - return new QWaylandEglPlatformIntegration(); + auto *integration = new QWaylandEglPlatformIntegration(); + + if (integration->hasFailed()) { + delete integration; + integration = nullptr; + } + + return integration; } } diff --git a/src/plugins/platforms/qwayland-generic/main.cpp b/src/plugins/platforms/qwayland-generic/main.cpp index 08295c97..e66a5d45 100644 --- a/src/plugins/platforms/qwayland-generic/main.cpp +++ b/src/plugins/platforms/qwayland-generic/main.cpp @@ -56,7 +56,14 @@ QPlatformIntegration *QWaylandIntegrationPlugin::create(const QString& system, c { Q_UNUSED(paramList); Q_UNUSED(system); - return new QWaylandIntegration(); + auto *integration = new QWaylandIntegration(); + + if (integration->hasFailed()) { + delete integration; + integration = nullptr; + } + + return integration; } } diff --git a/src/plugins/platforms/qwayland-xcomposite-egl/main.cpp b/src/plugins/platforms/qwayland-xcomposite-egl/main.cpp index 996f6084..d191bba9 100644 --- a/src/plugins/platforms/qwayland-xcomposite-egl/main.cpp +++ b/src/plugins/platforms/qwayland-xcomposite-egl/main.cpp @@ -56,7 +56,14 @@ QPlatformIntegration *QWaylandXCompositeEglPlatformIntegrationPlugin::create(con { Q_UNUSED(paramList); Q_UNUSED(system); - return new QWaylandXCompositeEglPlatformIntegration(); + auto *integration = new QWaylandXCompositeEglPlatformIntegration(); + + if (integration->hasFailed()) { + delete integration; + integration = nullptr; + } + + return integration; } } diff --git a/src/plugins/platforms/qwayland-xcomposite-glx/main.cpp b/src/plugins/platforms/qwayland-xcomposite-glx/main.cpp index 9f075ebb..1dfbc0cf 100644 --- a/src/plugins/platforms/qwayland-xcomposite-glx/main.cpp +++ b/src/plugins/platforms/qwayland-xcomposite-glx/main.cpp @@ -58,7 +58,14 @@ QPlatformIntegration *QWaylandXCompositeGlxPlatformIntegrationPlugin::create(con { Q_UNUSED(paramList); Q_UNUSED(system); - return new QWaylandXCompositeGlxPlatformIntegration(); + auto *integration = new QWaylandXCompositeGlxPlatformIntegration(); + + if (integration->hasFailed()) { + delete integration; + integration = nullptr; + } + + return integration; } } |