Fix QApplication autotest crash when running on multiple screens
Screens need to be destroyed in reverse order to ensure the primary screen stays valid when other screens are destroyed. Task-number: QTBUG-24300 Change-Id: I9d9d710aa67ec045baa8bf292833ffe7d9eea935 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
This commit is contained in:
parent
53229ec8f7
commit
62a654cc90
@ -97,6 +97,7 @@ private:
|
||||
|
||||
QScopedPointer<QPlatformAccessibility> mAccessibility;
|
||||
QScopedPointer<QPlatformTheme> mPlatformTheme;
|
||||
QList<QCocoaScreen *> mScreens;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -134,6 +134,7 @@ QCocoaIntegration::QCocoaIntegration()
|
||||
NSArray *screens = [NSScreen screens];
|
||||
for (uint i = 0; i < [screens count]; i++) {
|
||||
QCocoaScreen *screen = new QCocoaScreen(i);
|
||||
mScreens.append(screen);
|
||||
screenAdded(screen);
|
||||
}
|
||||
|
||||
@ -142,6 +143,11 @@ QCocoaIntegration::QCocoaIntegration()
|
||||
QCocoaIntegration::~QCocoaIntegration()
|
||||
{
|
||||
[[NSApplication sharedApplication] setDelegate: 0];
|
||||
|
||||
// Delete screens in reverse order to avoid crash in case of multiple screens
|
||||
while (!mScreens.isEmpty()) {
|
||||
delete mScreens.takeLast();
|
||||
}
|
||||
}
|
||||
|
||||
bool QCocoaIntegration::hasCapability(QPlatformIntegration::Capability cap) const
|
||||
|
@ -115,7 +115,11 @@ public:
|
||||
|
||||
QWindowsScreenManager();
|
||||
|
||||
inline void clearScreens() { qDeleteAll(m_screens); m_screens.clear(); }
|
||||
inline void clearScreens() {
|
||||
// Delete screens in reverse order to avoid crash in case of multiple screens
|
||||
while (!m_screens.isEmpty())
|
||||
delete m_screens.takeLast();
|
||||
}
|
||||
|
||||
void handleScreenChanges();
|
||||
bool handleDisplayChange(WPARAM wParam, LPARAM lParam);
|
||||
|
@ -191,7 +191,9 @@ QXcbConnection::~QXcbConnection()
|
||||
{
|
||||
delete m_clipboard;
|
||||
|
||||
qDeleteAll(m_screens);
|
||||
// Delete screens in reverse order to avoid crash in case of multiple screens
|
||||
while (!m_screens.isEmpty())
|
||||
delete m_screens.takeLast();
|
||||
|
||||
#ifdef XCB_USE_XINPUT2_MAEMO
|
||||
finalizeXInput2();
|
||||
|
@ -605,9 +605,6 @@ public slots:
|
||||
|
||||
void tst_QApplication::quitOnLastWindowClosed()
|
||||
{
|
||||
#ifdef Q_OS_WIN32
|
||||
QSKIP("This test crashes on Windows. Remove skip once the issue causing the crash is fixed (QTBUG-24300).");
|
||||
#endif
|
||||
#ifndef Q_OS_MAC
|
||||
// Test hangs on Mac OS X, see QTBUG-24319
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user