From 15515200ee2b160cd1ca4d3cf43d1245c6c41ace Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Sat, 6 Aug 2022 14:42:30 +0300 Subject: [PATCH 1/2] Avoid race conditions between dialogs on startup --- src/app/application.cpp | 19 ++++++++++++++++++- src/gui/mainwindow.cpp | 16 ---------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/app/application.cpp b/src/app/application.cpp index ab0434b73..2a6acf9e6 100644 --- a/src/app/application.cpp +++ b/src/app/application.cpp @@ -758,6 +758,24 @@ try const MainWindow::State windowState = (!m_startupProgressDialog || (m_startupProgressDialog->windowState() & Qt::WindowMinimized)) ? MainWindow::Minimized : MainWindow::Normal; m_window = new MainWindow(this, windowState); + delete m_startupProgressDialog; +#ifdef Q_OS_WIN + auto *pref = Preferences::instance(); + if (!pref->neverCheckFileAssoc() && (!Preferences::isTorrentFileAssocSet() || !Preferences::isMagnetLinkAssocSet())) + { + if (QMessageBox::question(m_window, tr("Torrent file association") + , tr("qBittorrent is not the default application for opening torrent files or Magnet links.\nDo you want to make qBittorrent the default application for these?") + , QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) + { + pref->setTorrentFileAssoc(true); + pref->setMagnetLinkAssoc(true); + } + else + { + pref->setNeverCheckFileAssoc(); + } + } +#endif // Q_OS_WIN #endif // DISABLE_GUI #ifndef DISABLE_WEBUI @@ -838,7 +856,6 @@ void Application::createStartupProgressDialog() }); connect(BitTorrent::Session::instance(), &BitTorrent::Session::startupProgressUpdated, m_startupProgressDialog, &QProgressDialog::setValue); - connect(BitTorrent::Session::instance(), &BitTorrent::Session::restored, m_startupProgressDialog, &QObject::deleteLater); connect(m_desktopIntegration, &DesktopIntegration::activationRequested, m_startupProgressDialog, [this]() { diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 964fea847..9a2b08e2e 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -460,22 +460,6 @@ MainWindow::MainWindow(IGUIApplication *app, const State initialState) connect(pref, &Preferences::changed, this, &MainWindow::optionsSaved); qDebug("GUI Built"); -#ifdef Q_OS_WIN - if (!pref->neverCheckFileAssoc() && (!Preferences::isTorrentFileAssocSet() || !Preferences::isMagnetLinkAssocSet())) - { - if (QMessageBox::question(this, tr("Torrent file association"), - tr("qBittorrent is not the default application for opening torrent files or Magnet links.\nDo you want to make qBittorrent the default application for these?"), - QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) - { - Preferences::setTorrentFileAssoc(true); - Preferences::setMagnetLinkAssoc(true); - } - else - { - pref->setNeverCheckFileAssoc(); - } - } -#endif } MainWindow::~MainWindow() From d27dd85dfd0e4d9168a45f1320103cc359ad4ccb Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Sat, 6 Aug 2022 19:37:51 +0300 Subject: [PATCH 2/2] Correctly replace desktop integration menu --- src/app/application.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/application.cpp b/src/app/application.cpp index 2a6acf9e6..d49086009 100644 --- a/src/app/application.cpp +++ b/src/app/application.cpp @@ -754,10 +754,12 @@ try }); disconnect(m_desktopIntegration, &DesktopIntegration::activationRequested, this, &Application::createStartupProgressDialog); - delete m_desktopIntegration->menu(); + // we must not delete menu while it is used by DesktopIntegration + auto *oldMenu = m_desktopIntegration->menu(); const MainWindow::State windowState = (!m_startupProgressDialog || (m_startupProgressDialog->windowState() & Qt::WindowMinimized)) ? MainWindow::Minimized : MainWindow::Normal; m_window = new MainWindow(this, windowState); + delete oldMenu; delete m_startupProgressDialog; #ifdef Q_OS_WIN auto *pref = Preferences::instance();