summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gui/kernel/qguiapplication.cpp2
-rw-r--r--src/gui/kernel/qplatformintegration.cpp10
-rw-r--r--src/gui/kernel/qplatformintegration.h1
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformintegration.cpp14
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformintegration_p.h2
-rw-r--r--src/plugins/platforms/eglfs/qeglfsintegration.cpp1
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();
}