From 240cbd6a27addf46943cda1d016ec9c14089fb27 Mon Sep 17 00:00:00 2001 From: Eran Mizrahi Date: Wed, 13 Dec 2017 16:18:54 +0200 Subject: Wait for injected processes on MO close --- src/mainwindow.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/mainwindow.cpp') 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 . #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; -- cgit v1.3.1