diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index 942494f93cd..179c0454e0c 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -142,9 +142,9 @@ QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration) qRegisterMetaType("uint32_t"); mDisplay = wl_display_connect(nullptr); - if (mDisplay == nullptr) { - qErrnoWarning(errno, "Failed to create display"); - ::exit(1); + if (!mDisplay) { + qErrnoWarning(errno, "Failed to create wl_display"); + return; } struct ::wl_registry *registry = wl_display_get_registry(mDisplay); @@ -170,7 +170,8 @@ QWaylandDisplay::~QWaylandDisplay(void) #if QT_CONFIG(wayland_datadevice) delete mDndSelectionHandler.take(); #endif - wl_display_disconnect(mDisplay); + if (mDisplay) + wl_display_disconnect(mDisplay); } void QWaylandDisplay::checkError() const diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp index 698abd8fd4a..267e481ac9c 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.cpp +++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp @@ -134,6 +134,10 @@ QWaylandIntegration::QWaylandIntegration() { initializeInputDeviceIntegration(); mDisplay.reset(new QWaylandDisplay(this)); + if (!mDisplay->isInitialized()) { + mFailed = true; + return; + } #if QT_CONFIG(clipboard) mClipboard.reset(new QWaylandClipboard(mDisplay.data())); #endif diff --git a/src/plugins/platforms/wayland/qwaylandintegration_p.h b/src/plugins/platforms/wayland/qwaylandintegration_p.h index 174eca25315..17144b8d716 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration_p.h +++ b/src/plugins/platforms/wayland/qwaylandintegration_p.h @@ -73,6 +73,8 @@ public: QWaylandIntegration(); ~QWaylandIntegration(); + bool hasFailed() { return mFailed; } + bool hasCapability(QPlatformIntegration::Capability cap) const override; QPlatformWindow *createPlatformWindow(QWindow *window) const override; #if QT_CONFIG(opengl) @@ -144,6 +146,7 @@ private: #if QT_CONFIG(accessibility) QScopedPointer mAccessibility; #endif + bool mFailed = false; bool mClientBufferIntegrationInitialized; bool mServerBufferIntegrationInitialized; bool mShellIntegrationInitialized;