summaryrefslogtreecommitdiff
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
authorJeremy Rimpo <jeremy.rimpo@servermonkey.com>2017-12-13 15:58:43 -0600
committerGitHub <noreply@github.com>2017-12-13 15:58:43 -0600
commit554b46847589fffb6cd7bc5c54689665c34ed95b (patch)
tree235f1cad320f73e6b22cdf330d9a14d42bd33092 /src/mainwindow.cpp
parente4b952278d978567af3210d6a4be992eef3ba205 (diff)
parent604d86ed07711651bc71871f6d37a794d916da6a (diff)
Merge pull request #148 from erasmux/lockeddialog_fixes
Lockeddialog fixes
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 632b64e9..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,11 @@ ILockedWaitingForProcess* MainWindow::lock()
++m_LockCount;
return m_LockDialog;
}
- m_LockDialog = new LockedDialog(qApp->activeWindow());
+ if (m_closing)
+ m_LockDialog = new WaitingOnCloseDialog(this);
+ else
+ m_LockDialog = new LockedDialog(this, true);
+ m_LockDialog->setModal(true);
m_LockDialog->show();
setEnabled(false);
m_LockDialog->setEnabled(true); //What's the point otherwise?
@@ -1488,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;