summaryrefslogtreecommitdiff
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
authorEran Mizrahi <erasmux@gmail.com>2017-12-13 16:18:54 +0200
committerJeremy Rimpo <jeremy.rimpo@servermonkey.com>2017-12-13 16:53:20 -0600
commit240cbd6a27addf46943cda1d016ec9c14089fb27 (patch)
tree0d6f2c1e2bce7497c59785dd6de645d741620193 /src/mainwindow.cpp
parent81344771dd03fd844daeedcbf3545103db3898c0 (diff)
Wait for injected processes on MO close
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 1e1a4558..85808e8d 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -59,6 +59,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "messagedialog.h"
#include "installationmanager.h"
#include "lockeddialog.h"
+#include "waitingonclosedialog.h"
#include "logbuffer.h"
#include "downloadlistsortproxy.h"
#include "motddialog.h"
@@ -855,6 +856,8 @@ void MainWindow::showEvent(QShowEvent *event)
void MainWindow::closeEvent(QCloseEvent* event)
{
+ m_closing = true;
+
if (m_OrganizerCore.downloadManager()->downloadsInProgress()) {
if (QMessageBox::question(this, tr("Downloads in progress"),
tr("There are still downloads in progress, do you really want to quit?"),
@@ -866,6 +869,16 @@ void MainWindow::closeEvent(QCloseEvent* event)
}
}
+ HANDLE injected_process_still_running = m_OrganizerCore.findAndOpenAUSVFSProcess();
+ if (injected_process_still_running != INVALID_HANDLE_VALUE)
+ {
+ m_OrganizerCore.waitForApplication(injected_process_still_running);
+ if (!m_closing) { // if operation cancelled
+ event->ignore();
+ return;
+ }
+ }
+
setCursor(Qt::WaitCursor);
}
@@ -1471,7 +1484,10 @@ ILockedWaitingForProcess* MainWindow::lock()
++m_LockCount;
return m_LockDialog;
}
- m_LockDialog = new LockedDialog(this, true);
+ if (m_closing)
+ m_LockDialog = new WaitingOnCloseDialog(this);
+ else
+ m_LockDialog = new LockedDialog(this, true);
m_LockDialog->setModal(true);
m_LockDialog->show();
setEnabled(false);
@@ -1489,6 +1505,8 @@ void MainWindow::unlock()
}
--m_LockCount;
if (m_LockCount == 0) {
+ if (m_closing && m_LockDialog->canceled())
+ m_closing = false;
m_LockDialog->hide();
m_LockDialog->deleteLater();
m_LockDialog = nullptr;