mirror of https://github.com/qt/qtbase.git
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…
Reference in New Issue