From 60f11cf6371fd6f482d257c54a48070874dc4b73 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 14 Sep 2022 09:22:45 +0200 Subject: [PATCH] Squish: Avoid potential crashes The control bar of the Squish plugin is used as top level widget, but may get destroyed out of the sudden under several circumstances. If some dialog is using the control bar as parent QC will crash at this point. Redo 0d7bbb848015622dfafaf to avoid all crashes instead of just this specific one. Change-Id: I5c5de737d748fe8eee724e9fa489696a27300978 Reviewed-by: Reviewed-by: Eike Ziller --- src/plugins/coreplugin/icore.cpp | 2 +- src/plugins/squish/squishperspective.cpp | 2 +- src/plugins/squish/squishtools.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index 152ae1e63e7..0ed4d4cc8a5 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -688,7 +688,7 @@ QWidget *ICore::dialogParent() QWidget *active = QApplication::activeModalWidget(); if (!active) active = QApplication::activeWindow(); - if (!active || (active && active->windowFlags().testFlag(Qt::SplashScreen))) + if (!active || (active && active->windowFlags().testAnyFlags(Qt::SplashScreen | Qt::Popup))) active = m_mainwindow; return active; } diff --git a/src/plugins/squish/squishperspective.cpp b/src/plugins/squish/squishperspective.cpp index a4e80aa280e..a5c52049996 100644 --- a/src/plugins/squish/squishperspective.cpp +++ b/src/plugins/squish/squishperspective.cpp @@ -126,7 +126,7 @@ SquishControlBar::SquishControlBar(SquishPerspective *perspective) , m_perspective(perspective) { setWindowTitle(Tr::tr("Control Bar")); - setWindowFlags(Qt::Widget | Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint); + setWindowFlags(Qt::Tool | Qt::WindowCloseButtonHint | Qt::WindowStaysOnTopHint); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->setContentsMargins(0, 0, 0, 0); diff --git a/src/plugins/squish/squishtools.cpp b/src/plugins/squish/squishtools.cpp index b9a5d62b341..dab4907d5f7 100644 --- a/src/plugins/squish/squishtools.cpp +++ b/src/plugins/squish/squishtools.cpp @@ -367,7 +367,7 @@ void SquishTools::setState(SquishTools::State state) QDir(m_suitePath).dirName(), &error); if (!error.isEmpty()) - QMessageBox::critical(Core::ICore::mainWindow(), Tr::tr("Error"), error); + QMessageBox::critical(Core::ICore::dialogParent(), Tr::tr("Error"), error); logrotateTestResults(); } else { m_xmlOutputHandler->clearForNextRun();