diff options
| author | Eran Mizrahi <erasmux@gmail.com> | 2017-12-13 16:18:54 +0200 |
|---|---|---|
| committer | Eran Mizrahi <erasmux@gmail.com> | 2017-12-13 22:27:11 +0200 |
| commit | a5bb70f53bc20f36f695ac5cd9f8b91163f694eb (patch) | |
| tree | 0d6f2c1e2bce7497c59785dd6de645d741620193 /src/mainwindow.cpp | |
| parent | 0586b2856b0b8973e5781b9b0a1b5e5acac20532 (diff) | |
Wait for injected processes on MO close
Diffstat (limited to 'src/mainwindow.cpp')
| -rw-r--r-- | src/mainwindow.cpp | 20 |
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;
|
