From 494483fd2b8b3ecc8c7ad19d493a8f7552cc95e2 Mon Sep 17 00:00:00 2001 From: flow Date: Thu, 29 Jun 2023 19:09:52 -0300 Subject: [PATCH] fix(updater): add parent to dialog to fix issues in tilling WMs QProgressDialog without parents in Qt tend to cause graphical issues on some systems, so we add the main window as a parent here! Signed-off-by: flow --- launcher/Application.cpp | 38 +++++++++++------------ launcher/updater/PrismExternalUpdater.cpp | 7 +++-- launcher/updater/PrismExternalUpdater.h | 2 +- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/launcher/Application.cpp b/launcher/Application.cpp index c59bea8d6..8007f26a9 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -857,17 +857,6 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv) qDebug() << "<> Translations loaded."; } - // initialize the updater - if (updaterEnabled()) { - qDebug() << "Initializing updater"; -#ifdef Q_OS_MAC - m_updater.reset(new MacSparkleUpdater()); -#else - m_updater.reset(new PrismExternalUpdater(applicationDirPath(), m_dataPath)); -#endif - qDebug() << "<> Updater started."; - } - // Instance icons { auto setting = APPLICATION->settings()->getSetting("IconsDir"); @@ -968,6 +957,25 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv) applyCurrentlySelectedTheme(true); + updateCapabilities(); + + if (createSetupWizard()) { + return; + } + + performMainStartupAction(); + + // initialize the updater + if (updaterEnabled()) { + qDebug() << "Initializing updater"; +#ifdef Q_OS_MAC + m_updater.reset(new MacSparkleUpdater()); +#else + m_updater.reset(new PrismExternalUpdater(m_mainWindow, applicationDirPath(), m_dataPath)); +#endif + qDebug() << "<> Updater started."; + } + // check update locks { auto update_log_path = FS::PathCombine(m_dataPath, "logs", "prism_launcher_update.log"); @@ -1063,14 +1071,6 @@ Application::Application(int& argc, char** argv) : QApplication(argc, argv) FS::deletePath(update_success_marker.absoluteFilePath()); } } - - updateCapabilities(); - - if (createSetupWizard()) { - return; - } - - performMainStartupAction(); } bool Application::createSetupWizard() diff --git a/launcher/updater/PrismExternalUpdater.cpp b/launcher/updater/PrismExternalUpdater.cpp index d51ad690e..792dd2a52 100644 --- a/launcher/updater/PrismExternalUpdater.cpp +++ b/launcher/updater/PrismExternalUpdater.cpp @@ -48,9 +48,11 @@ class PrismExternalUpdater::Private { double updateInterval; QDateTime lastCheck; std::unique_ptr settings; + + QWidget* parent; }; -PrismExternalUpdater::PrismExternalUpdater(const QString& binDir, const QString& dataDir) +PrismExternalUpdater::PrismExternalUpdater(QWidget* parent, const QString& binDir, const QString& dataDir) { priv = new PrismExternalUpdater::Private(); priv->binDir = QDir(binDir); @@ -68,6 +70,7 @@ PrismExternalUpdater::PrismExternalUpdater(const QString& binDir, const QString& if (!last_check.isNull() && last_check.isValid()) { priv->lastCheck = QDateTime::fromString(last_check.toString(), Qt::ISODate); } + priv->parent = parent; connectTimer(); resetAutoCheckTimer(); } @@ -83,7 +86,7 @@ PrismExternalUpdater::~PrismExternalUpdater() void PrismExternalUpdater::checkForUpdates() { - QProgressDialog progress(tr("Checking for updates..."), "", 0, 0); + QProgressDialog progress(tr("Checking for updates..."), "", 0, 0, priv->parent); progress.setCancelButton(nullptr); progress.show(); QCoreApplication::processEvents(); diff --git a/launcher/updater/PrismExternalUpdater.h b/launcher/updater/PrismExternalUpdater.h index f8ed29ccc..bfe94c149 100644 --- a/launcher/updater/PrismExternalUpdater.h +++ b/launcher/updater/PrismExternalUpdater.h @@ -34,7 +34,7 @@ class PrismExternalUpdater : public ExternalUpdater { Q_OBJECT public: - PrismExternalUpdater(const QString& appDir, const QString& dataDir); + PrismExternalUpdater(QWidget* parent, const QString& appDir, const QString& dataDir); ~PrismExternalUpdater() override; /*!