diff options
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 2 | ||||
-rw-r--r-- | src/gui/kernel/qplatformintegration.cpp | 10 | ||||
-rw-r--r-- | src/gui/kernel/qplatformintegration.h | 1 | ||||
-rw-r--r-- | src/platformsupport/eglconvenience/qeglplatformintegration.cpp | 14 | ||||
-rw-r--r-- | src/platformsupport/eglconvenience/qeglplatformintegration_p.h | 2 | ||||
-rw-r--r-- | src/plugins/platforms/eglfs/qeglfsintegration.cpp | 1 |
6 files changed, 21 insertions, 9 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 79dd7ea934..520330abc1 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -1391,6 +1391,8 @@ QGuiApplicationPrivate::~QGuiApplicationPrivate() } #endif + platform_integration->destroy(); + delete platform_theme; platform_theme = 0; delete platform_integration; diff --git a/src/gui/kernel/qplatformintegration.cpp b/src/gui/kernel/qplatformintegration.cpp index 39b031ef6d..7e291e9050 100644 --- a/src/gui/kernel/qplatformintegration.cpp +++ b/src/gui/kernel/qplatformintegration.cpp @@ -324,6 +324,16 @@ void QPlatformIntegration::initialize() } /*! + Called before the platform integration is deleted. Useful when cleanup relies on virtual + functions. + + \since 5.5 +*/ +void QPlatformIntegration::destroy() +{ +} + +/*! Returns the platforms input context. The default implementation returns 0, implying no input method support. diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h index d510240fa4..ccbe4cc73d 100644 --- a/src/gui/kernel/qplatformintegration.h +++ b/src/gui/kernel/qplatformintegration.h @@ -109,6 +109,7 @@ public: // Event dispatcher: virtual QAbstractEventDispatcher *createEventDispatcher() const = 0; virtual void initialize(); + virtual void destroy(); //Deeper window system integrations virtual QPlatformFontDatabase *fontDatabase() const; diff --git a/src/platformsupport/eglconvenience/qeglplatformintegration.cpp b/src/platformsupport/eglconvenience/qeglplatformintegration.cpp index a6207cf402..10913ef094 100644 --- a/src/platformsupport/eglconvenience/qeglplatformintegration.cpp +++ b/src/platformsupport/eglconvenience/qeglplatformintegration.cpp @@ -95,15 +95,7 @@ QEGLPlatformIntegration::QEGLPlatformIntegration() QEGLPlatformIntegration::~QEGLPlatformIntegration() { - foreach (QWindow *w, qGuiApp->topLevelWindows()) - w->destroy(); - - delete m_screen; - - if (m_display != EGL_NO_DISPLAY) - eglTerminate(m_display); - destroy(); } void QEGLPlatformIntegration::initialize() @@ -126,7 +118,13 @@ void QEGLPlatformIntegration::initialize() void QEGLPlatformIntegration::destroy() { + foreach (QWindow *w, qGuiApp->topLevelWindows()) + w->destroy(); + + delete m_screen; + if (m_display != EGL_NO_DISPLAY) + eglTerminate(m_display); } QAbstractEventDispatcher *QEGLPlatformIntegration::createEventDispatcher() const diff --git a/src/platformsupport/eglconvenience/qeglplatformintegration_p.h b/src/platformsupport/eglconvenience/qeglplatformintegration_p.h index 11977db78b..2080ff0352 100644 --- a/src/platformsupport/eglconvenience/qeglplatformintegration_p.h +++ b/src/platformsupport/eglconvenience/qeglplatformintegration_p.h @@ -65,7 +65,7 @@ public: ~QEGLPlatformIntegration(); void initialize() Q_DECL_OVERRIDE; - virtual void destroy(); + void destroy() Q_DECL_OVERRIDE; QEGLPlatformScreen *screen() const { return m_screen; } EGLDisplay display() const { return m_display; } diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/qeglfsintegration.cpp index 16d8c50291..6fe3893922 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.cpp +++ b/src/plugins/platforms/eglfs/qeglfsintegration.cpp @@ -88,6 +88,7 @@ void QEglFSIntegration::initialize() void QEglFSIntegration::destroy() { + QEGLPlatformIntegration::destroy(); QEglFSHooks::hooks()->platformDestroy(); } |