diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index 0112889355f..a311fb1adaf 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -216,7 +216,6 @@ QAndroidPlatformIntegration::QAndroidPlatformIntegration(const QStringList ¶ m_mainThread = QThread::currentThread(); m_androidFDB = new QAndroidPlatformFontDatabase(); - m_androidPlatformServices = new QAndroidPlatformServices(); #ifndef QT_NO_CLIPBOARD m_androidPlatformClipboard = new QAndroidPlatformClipboard(); @@ -453,7 +452,10 @@ QPlatformNativeInterface *QAndroidPlatformIntegration::nativeInterface() const QPlatformServices *QAndroidPlatformIntegration::services() const { - return m_androidPlatformServices; + if (m_androidPlatformServices.isNull()) + m_androidPlatformServices.reset(new QAndroidPlatformServices); + + return m_androidPlatformServices.data(); } QVariant QAndroidPlatformIntegration::styleHint(StyleHint hint) const diff --git a/src/plugins/platforms/android/qandroidplatformintegration.h b/src/plugins/platforms/android/qandroidplatformintegration.h index b7bfb58d1dd..135790dda63 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.h +++ b/src/plugins/platforms/android/qandroidplatformintegration.h @@ -136,7 +136,7 @@ private: QPlatformFontDatabase *m_androidFDB; QAndroidPlatformNativeInterface *m_androidPlatformNativeInterface; - QAndroidPlatformServices *m_androidPlatformServices; + mutable QScopedPointer m_androidPlatformServices; // Handling the multiple screens connected. Every display is identified // with an unique (autoincremented) displayID. The values of this ID will diff --git a/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp b/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp index c56499b3a4d..58a542bbd7d 100644 --- a/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp +++ b/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp @@ -30,7 +30,6 @@ using namespace Qt::StringLiterals; QBsdFbIntegration::QBsdFbIntegration(const QStringList ¶mList) { m_fontDb.reset(new QGenericUnixFontDatabase); - m_services.reset(new QGenericUnixServices); m_primaryScreen.reset(new QBsdFbScreen(paramList)); } @@ -97,6 +96,9 @@ QPlatformFontDatabase *QBsdFbIntegration::fontDatabase() const QPlatformServices *QBsdFbIntegration::services() const { + if (m_services.isNull()) + m_services.reset(new QGenericUnixServices); + return m_services.data(); } diff --git a/src/plugins/platforms/bsdfb/qbsdfbintegration.h b/src/plugins/platforms/bsdfb/qbsdfbintegration.h index 8d2b572fb69..319071c7163 100644 --- a/src/plugins/platforms/bsdfb/qbsdfbintegration.h +++ b/src/plugins/platforms/bsdfb/qbsdfbintegration.h @@ -41,7 +41,7 @@ private: QScopedPointer m_primaryScreen; QScopedPointer m_inputContext; QScopedPointer m_fontDb; - QScopedPointer m_services; + mutable QScopedPointer m_services; QScopedPointer m_vtHandler; QScopedPointer m_nativeInterface; }; diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h index f5173110259..9ce85a51659 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.h +++ b/src/plugins/platforms/cocoa/qcocoaintegration.h @@ -111,7 +111,7 @@ private: #endif QScopedPointer mCocoaDrag; QScopedPointer mNativeInterface; - QScopedPointer mServices; + mutable QScopedPointer mServices; QScopedPointer mKeyboardMapper; #if QT_CONFIG(vulkan) diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm index ad767a0694a..8c6dcfd4f60 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.mm +++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm @@ -109,7 +109,6 @@ QCocoaIntegration::QCocoaIntegration(const QStringList ¶mList) #endif , mCocoaDrag(new QCocoaDrag) , mNativeInterface(new QCocoaNativeInterface) - , mServices(new QCocoaServices) , mKeyboardMapper(new QAppleKeyMapper) { logVersionInformation(); @@ -394,6 +393,9 @@ QPlatformTheme *QCocoaIntegration::createPlatformTheme(const QString &name) cons QCocoaServices *QCocoaIntegration::services() const { + if (mServices.isNull()) + mServices.reset(new QCocoaServices); + return mServices.data(); } diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index c52213b1615..562ab7f16fb 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -26,7 +26,6 @@ QT_BEGIN_NAMESPACE QDirectFbIntegration::QDirectFbIntegration() : m_fontDb(new QGenericUnixFontDatabase()) - , m_services(new QGenericUnixServices) { } @@ -125,6 +124,9 @@ QPlatformFontDatabase *QDirectFbIntegration::fontDatabase() const QPlatformServices *QDirectFbIntegration::services() const { + if (m_services.isNull()) + m_services.reset(new QGenericUnixServices); + return m_services.data(); } diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h index 8dd2a4516aa..b472e15ae75 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.h +++ b/src/plugins/platforms/directfb/qdirectfbintegration.h @@ -47,7 +47,7 @@ protected: QScopedPointer m_input; QScopedPointer m_inputRunner; QScopedPointer m_fontDb; - QScopedPointer m_services; + mutable QScopedPointer m_services; QPlatformInputContext *m_inputContext; }; diff --git a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp index a018919e17e..fe2b97080b5 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp @@ -77,7 +77,6 @@ QEglFSIntegration::QEglFSIntegration() : m_display(EGL_NO_DISPLAY), m_inputContext(nullptr), m_fontDb(new QGenericUnixFontDatabase), - m_services(new QGenericUnixServices), m_disableInputHandlers(false) { m_disableInputHandlers = qEnvironmentVariableIntValue("QT_QPA_EGLFS_DISABLE_INPUT"); @@ -132,6 +131,9 @@ QAbstractEventDispatcher *QEglFSIntegration::createEventDispatcher() const QPlatformServices *QEglFSIntegration::services() const { + if (m_services.isNull()) + m_services.reset(new QGenericUnixServices); + return m_services.data(); } diff --git a/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h b/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h index f332db55e3d..2359b7f29f1 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h +++ b/src/plugins/platforms/eglfs/api/qeglfsintegration_p.h @@ -108,7 +108,7 @@ private: EGLDisplay m_display; QPlatformInputContext *m_inputContext; QScopedPointer m_fontDb; - QScopedPointer m_services; + mutable QScopedPointer m_services; QScopedPointer m_vtHandler; QPointer m_pointerWindow; bool m_disableInputHandlers; diff --git a/src/plugins/platforms/haiku/qhaikuintegration.cpp b/src/plugins/platforms/haiku/qhaikuintegration.cpp index 2b0672e3636..cf63f3039a8 100644 --- a/src/plugins/platforms/haiku/qhaikuintegration.cpp +++ b/src/plugins/platforms/haiku/qhaikuintegration.cpp @@ -45,8 +45,6 @@ QHaikuIntegration::QHaikuIntegration(const QStringList ¶meters) m_screen = new QHaikuScreen; - m_services = new QHaikuServices; - // notify system about available screen QWindowSystemInterface::handleScreenAdded(m_screen); } @@ -78,6 +76,9 @@ QPlatformFontDatabase *QHaikuIntegration::fontDatabase() const QPlatformServices *QHaikuIntegration::services() const { + if (!m_services) + m_services = new QHaikuServices; + return m_services; } diff --git a/src/plugins/platforms/haiku/qhaikuintegration.h b/src/plugins/platforms/haiku/qhaikuintegration.h index 8e5f3d52f14..5c917e31aff 100644 --- a/src/plugins/platforms/haiku/qhaikuintegration.h +++ b/src/plugins/platforms/haiku/qhaikuintegration.h @@ -34,7 +34,7 @@ public: private: QHaikuClipboard *m_clipboard; QHaikuScreen *m_screen; - QHaikuServices *m_services; + mutable QHaikuServices *m_services = nullptr; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/integrity/qintegrityfbintegration.cpp b/src/plugins/platforms/integrity/qintegrityfbintegration.cpp index e57ad83cf8c..e06011a38d9 100644 --- a/src/plugins/platforms/integrity/qintegrityfbintegration.cpp +++ b/src/plugins/platforms/integrity/qintegrityfbintegration.cpp @@ -20,8 +20,7 @@ QT_BEGIN_NAMESPACE QIntegrityFbIntegration::QIntegrityFbIntegration(const QStringList ¶mList) - : m_fontDb(new QGenericUnixFontDatabase), - m_services(new QGenericUnixServices) + : m_fontDb(new QGenericUnixFontDatabase) { m_primaryScreen = new QIntegrityFbScreen(paramList); } @@ -84,6 +83,9 @@ QPlatformFontDatabase *QIntegrityFbIntegration::fontDatabase() const QPlatformServices *QIntegrityFbIntegration::services() const { + if (m_services.isNull()) + m_services.reset(new QGenericUnixServices); + return m_services.data(); } diff --git a/src/plugins/platforms/integrity/qintegrityfbintegration.h b/src/plugins/platforms/integrity/qintegrityfbintegration.h index 5c0d16516d4..bed7641a57a 100644 --- a/src/plugins/platforms/integrity/qintegrityfbintegration.h +++ b/src/plugins/platforms/integrity/qintegrityfbintegration.h @@ -40,7 +40,7 @@ private: QIntegrityFbScreen *m_primaryScreen; QPlatformInputContext *m_inputContext; QScopedPointer m_fontDb; - QScopedPointer m_services; + mutable QScopedPointer m_services; QScopedPointer m_nativeInterface; }; diff --git a/src/plugins/platforms/ios/qiosintegration.h b/src/plugins/platforms/ios/qiosintegration.h index 6c2014d048f..a7733d8216c 100644 --- a/src/plugins/platforms/ios/qiosintegration.h +++ b/src/plugins/platforms/ios/qiosintegration.h @@ -109,7 +109,7 @@ private: #endif QPlatformInputContext *m_inputContext; QPointingDevice *m_touchDevice; - QIOSServices *m_platformServices; + mutable QIOSServices *m_platformServices = nullptr; mutable QPlatformAccessibility *m_accessibility; QFactoryLoader *m_optionalPlugins; #if !defined(Q_OS_TVOS) && !defined(Q_OS_VISIONOS) diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm index 69b79b111b3..dcb37076bf7 100644 --- a/src/plugins/platforms/ios/qiosintegration.mm +++ b/src/plugins/platforms/ios/qiosintegration.mm @@ -59,7 +59,6 @@ QIOSIntegration::QIOSIntegration() , m_clipboard(new QIOSClipboard) #endif , m_inputContext(0) - , m_platformServices(new QIOSServices) , m_accessibility(0) , m_optionalPlugins(new QFactoryLoader(QIosOptionalPluginInterface_iid, "/platforms/darwin"_L1)) { @@ -232,6 +231,9 @@ QPlatformInputContext *QIOSIntegration::inputContext() const QPlatformServices *QIOSIntegration::services() const { + if (!m_platformServices) + m_platformServices = new QIOSServices; + return m_platformServices; } diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp index f87766cf1ba..e1da9849236 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp @@ -41,7 +41,6 @@ using namespace Qt::StringLiterals; QLinuxFbIntegration::QLinuxFbIntegration(const QStringList ¶mList) : m_primaryScreen(nullptr), m_fontDb(new QGenericUnixFontDatabase), - m_services(new QGenericUnixServices), m_kbdMgr(nullptr) { #if QT_CONFIG(kms) @@ -111,6 +110,9 @@ QPlatformFontDatabase *QLinuxFbIntegration::fontDatabase() const QPlatformServices *QLinuxFbIntegration::services() const { + if (m_services.isNull()) + m_services.reset(new QGenericUnixServices); + return m_services.data(); } diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h index 352bddd907d..2a2b53ea3d6 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h @@ -53,7 +53,7 @@ private: QFbScreen *m_primaryScreen; QPlatformInputContext *m_inputContext; QScopedPointer m_fontDb; - QScopedPointer m_services; + mutable QScopedPointer m_services; QScopedPointer m_vtHandler; QEvdevKeyboardManager *m_kbdMgr; diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp index ea8042928a1..5decacc61a3 100644 --- a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp +++ b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp @@ -74,7 +74,6 @@ QOffscreenIntegration::QOffscreenIntegration(const QStringList& paramList) #if QT_CONFIG(draganddrop) m_drag.reset(new QOffscreenDrag); #endif - m_services.reset(new QPlatformServices); QJsonObject config = resolveConfigFileConfiguration(paramList).value_or(defaultConfiguration()); setConfiguration(config); @@ -417,6 +416,9 @@ QPlatformDrag *QOffscreenIntegration::drag() const QPlatformServices *QOffscreenIntegration::services() const { + if (m_services.isNull()) + m_services.reset(new QPlatformServices); + return m_services.data(); } diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration.h b/src/plugins/platforms/offscreen/qoffscreenintegration.h index aab8d305b42..003abab99f7 100644 --- a/src/plugins/platforms/offscreen/qoffscreenintegration.h +++ b/src/plugins/platforms/offscreen/qoffscreenintegration.h @@ -55,7 +55,7 @@ protected: QScopedPointer m_drag; #endif QScopedPointer m_inputContext; - QScopedPointer m_services; + mutable QScopedPointer m_services; mutable QScopedPointer m_nativeInterface; QList m_screens; bool m_windowFrameMarginsEnabled = true; diff --git a/src/plugins/platforms/qnx/qqnxintegration.cpp b/src/plugins/platforms/qnx/qqnxintegration.cpp index cb453f8ca7d..8e3c4ee85a8 100644 --- a/src/plugins/platforms/qnx/qqnxintegration.cpp +++ b/src/plugins/platforms/qnx/qqnxintegration.cpp @@ -124,7 +124,6 @@ QQnxIntegration::QQnxIntegration(const QStringList ¶mList) , m_buttonsNotifier(new QQnxButtonEventNotifier()) #endif , m_qpaInputContext(0) - , m_services(0) , m_fontDatabase(new QGenericUnixFontDatabase()) , m_eventDispatcher(createUnixEventDispatcher()) , m_nativeInterface(new QQnxNativeInterface(this)) @@ -190,10 +189,6 @@ QQnxIntegration::QQnxIntegration(const QStringList ¶mList) m_navigator = new QQnxNavigatorPps(); #endif - // Create services handling class - if (m_navigator) - m_services = new QQnxServices(m_navigator); - createDisplays(); if (m_virtualKeyboard) { @@ -473,6 +468,10 @@ QVariant QQnxIntegration::styleHint(QPlatformIntegration::StyleHint hint) const QPlatformServices * QQnxIntegration::services() const { + // Create services handling class + if (m_navigator && !m_services) + m_services = new QQnxServices(m_navigator); + return m_services; } diff --git a/src/plugins/platforms/qnx/qqnxintegration.h b/src/plugins/platforms/qnx/qqnxintegration.h index d096a78dcb8..2fc762314d8 100644 --- a/src/plugins/platforms/qnx/qqnxintegration.h +++ b/src/plugins/platforms/qnx/qqnxintegration.h @@ -128,7 +128,7 @@ private: QQnxButtonEventNotifier *m_buttonsNotifier; #endif QPlatformInputContext *m_qpaInputContext; - QQnxServices *m_services; + mutable QQnxServices *m_services = nullptr; QPlatformFontDatabase *m_fontDatabase; mutable QAbstractEventDispatcher *m_eventDispatcher; QQnxNativeInterface *m_nativeInterface; diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index 48e6567d890..1f4ed194553 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -25,8 +25,7 @@ QT_BEGIN_NAMESPACE using namespace Qt::StringLiterals; QVncIntegration::QVncIntegration(const QStringList ¶mList) - : m_fontDb(new QGenericUnixFontDatabase), - m_services(new QGenericUnixServices) + : m_fontDb(new QGenericUnixFontDatabase) { QRegularExpression portRx("port=(\\d+)"_L1); quint16 port = 5900; @@ -105,6 +104,9 @@ QPlatformFontDatabase *QVncIntegration::fontDatabase() const QPlatformServices *QVncIntegration::services() const { + if (m_services.isNull()) + m_services.reset(new QGenericUnixServices); + return m_services.data(); } diff --git a/src/plugins/platforms/vnc/qvncintegration.h b/src/plugins/platforms/vnc/qvncintegration.h index 6c00ba8493d..282fea7a30e 100644 --- a/src/plugins/platforms/vnc/qvncintegration.h +++ b/src/plugins/platforms/vnc/qvncintegration.h @@ -40,7 +40,7 @@ private: QVncScreen *m_primaryScreen; QPlatformInputContext *m_inputContext; QScopedPointer m_fontDb; - QScopedPointer m_services; + mutable QScopedPointer m_services; QScopedPointer m_nativeInterface; }; diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index 487e1d47b6f..a9fcf711edd 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -105,7 +105,7 @@ struct QWindowsIntegrationPrivate #if QT_CONFIG(accessibility) QWindowsUiaAccessibility m_accessibility; #endif - QWindowsServices m_services; + mutable QScopedPointer m_services; }; template @@ -598,7 +598,10 @@ QPlatformTheme *QWindowsIntegration::createPlatformTheme(const QString &name) co QPlatformServices *QWindowsIntegration::services() const { - return &d->m_services; + if (d->m_services.isNull()) + d->m_services.reset(new QWindowsServices); + + return d->m_services.data(); } void QWindowsIntegration::beep() const