From c38e864c92b7958099d74048fdfc88a5d3b40dcc Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Sun, 7 Jul 2019 17:48:48 -0400 Subject: set the progress dialog's parent to main window as soon as it's available --- src/nxmaccessmanager.cpp | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) (limited to 'src/nxmaccessmanager.cpp') diff --git a/src/nxmaccessmanager.cpp b/src/nxmaccessmanager.cpp index ee6c03f1..5c72d3e2 100644 --- a/src/nxmaccessmanager.cpp +++ b/src/nxmaccessmanager.cpp @@ -47,7 +47,9 @@ namespace { NXMAccessManager::NXMAccessManager(QObject *parent, const QString &moVersion) : QNetworkAccessManager(parent) + , m_TopLevel(nullptr) , m_ValidateReply(nullptr) + , m_ProgressDialog(nullptr) , m_MOVersion(moVersion) { m_ValidateTimeout.setSingleShot(true); @@ -70,6 +72,20 @@ NXMAccessManager::~NXMAccessManager() } } +void NXMAccessManager::setTopLevelWidget(QWidget* w) +{ + m_TopLevel = w; + + if (m_ProgressDialog) { + const auto wasVisible = m_ProgressDialog->isVisible(); + + m_ProgressDialog->hide(); + m_ProgressDialog->setParent(w, m_ProgressDialog->windowFlags() | Qt::Dialog); + m_ProgressDialog->setModal(false); + m_ProgressDialog->setVisible(wasVisible); + } +} + QNetworkReply *NXMAccessManager::createRequest( QNetworkAccessManager::Operation operation, const QNetworkRequest &request, QIODevice *device) @@ -124,7 +140,11 @@ void NXMAccessManager::startValidationCheck() request.setRawHeader("Application-Name", "MO2"); request.setRawHeader("Application-Version", m_MOVersion.toUtf8()); - m_ProgressDialog = new QProgressDialog(nullptr); + if (!m_ProgressDialog) { + m_ProgressDialog = new QProgressDialog(m_TopLevel); + m_ProgressDialog->setModal(false); + } + m_ProgressDialog->setLabelText(tr("Validating Nexus Connection")); QList buttons = m_ProgressDialog->findChildren(); buttons.at(0)->setEnabled(false); @@ -142,16 +162,23 @@ void NXMAccessManager::startValidationCheck() bool NXMAccessManager::validated() const { if (m_ValidateState == VALIDATE_CHECKING) { - QProgressDialog progress; - progress.setLabelText(tr("Validating Nexus Connection")); + if (!m_ProgressDialog) { + m_ProgressDialog = new QProgressDialog(m_TopLevel); + m_ProgressDialog->setModal(false); + } + + m_ProgressDialog->setLabelText(tr("Validating Nexus Connection")); QList buttons = m_ProgressDialog->findChildren(); buttons.at(0)->setEnabled(false); - progress.show(); + m_ProgressDialog->show(); while (m_ValidateState == VALIDATE_CHECKING) { QCoreApplication::processEvents(); QThread::msleep(100); } - progress.hide(); + + m_ProgressDialog->hide(); + m_ProgressDialog->deleteLater(); + m_ProgressDialog = nullptr; } return m_ValidateState == VALIDATE_VALID; -- cgit v1.3.1