summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.cpp3
-rw-r--r--src/nxmaccessmanager.cpp37
-rw-r--r--src/nxmaccessmanager.h5
3 files changed, 39 insertions, 6 deletions
diff --git a/src/main.cpp b/src/main.cpp
index f2571685..0b078f03 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -697,6 +697,9 @@ int runApplication(MOApplication &application, SingleInstance &instance,
// set up main window and its data structures
MainWindow mainWindow(settings, organizer, pluginContainer);
+ NexusInterface::instance(&pluginContainer)
+ ->getAccessManager()->setTopLevelWidget(&mainWindow);
+
QObject::connect(&mainWindow, SIGNAL(styleChanged(QString)), &application,
SLOT(setStyleFile(QString)));
QObject::connect(&instance, SIGNAL(messageSent(QString)), &organizer,
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<QPushButton*> buttons = m_ProgressDialog->findChildren<QPushButton*>();
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<QPushButton*> buttons = m_ProgressDialog->findChildren<QPushButton*>();
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;
diff --git a/src/nxmaccessmanager.h b/src/nxmaccessmanager.h
index 1bdeae40..16dde612 100644
--- a/src/nxmaccessmanager.h
+++ b/src/nxmaccessmanager.h
@@ -41,6 +41,8 @@ public:
~NXMAccessManager();
+ void setTopLevelWidget(QWidget* w);
+
bool validated() const;
bool validateAttempted() const;
@@ -94,9 +96,10 @@ protected:
QIODevice *device);
private:
+ QWidget* m_TopLevel;
QTimer m_ValidateTimeout;
QNetworkReply *m_ValidateReply;
- QProgressDialog *m_ProgressDialog { nullptr };
+ mutable QProgressDialog* m_ProgressDialog;
QString m_MOVersion;