summaryrefslogtreecommitdiffstats
path: root/application/InstanceWindow.cpp
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2016-10-03 00:55:54 +0200
committerPetr Mrázek <peterix@gmail.com>2016-10-26 18:21:24 +0200
commitd66fdcd4cc6913508d2987c14cd9fc4d6760b8a5 (patch)
tree4f385106ce732d4f7338feab5391f2a06c68a0e6 /application/InstanceWindow.cpp
parentbbe139dce51a7965394c800cac974946820d3869 (diff)
downloadMultiMC-d66fdcd4cc6913508d2987c14cd9fc4d6760b8a5.tar
MultiMC-d66fdcd4cc6913508d2987c14cd9fc4d6760b8a5.tar.gz
MultiMC-d66fdcd4cc6913508d2987c14cd9fc4d6760b8a5.tar.lz
MultiMC-d66fdcd4cc6913508d2987c14cd9fc4d6760b8a5.tar.xz
MultiMC-d66fdcd4cc6913508d2987c14cd9fc4d6760b8a5.zip
NOISSUE Granular instance reload
Diffstat (limited to 'application/InstanceWindow.cpp')
-rw-r--r--application/InstanceWindow.cpp39
1 files changed, 30 insertions, 9 deletions
diff --git a/application/InstanceWindow.cpp b/application/InstanceWindow.cpp
index 3bfc78db..9fdd3ca8 100644
--- a/application/InstanceWindow.cpp
+++ b/application/InstanceWindow.cpp
@@ -95,9 +95,23 @@ InstanceWindow::InstanceWindow(InstancePtr instance, QWidget *parent)
connect(m_instance.get(), &BaseInstance::runningStatusChanged,
this, &InstanceWindow::on_RunningState_changed);
}
+
+ // set up instance destruction detection
+ {
+ connect(m_instance.get(), &BaseInstance::statusChanged, this, &InstanceWindow::on_instanceStatusChanged);
+ }
show();
}
+void InstanceWindow::on_instanceStatusChanged(BaseInstance::Status, BaseInstance::Status newStatus)
+{
+ if(newStatus == BaseInstance::Status::Gone)
+ {
+ m_doNotSave = true;
+ close();
+ }
+}
+
void InstanceWindow::setKillButton(bool kill)
{
if(kill)
@@ -145,18 +159,25 @@ void InstanceWindow::on_closeButton_clicked()
void InstanceWindow::closeEvent(QCloseEvent *event)
{
+ bool proceed = true;
+ if(!m_doNotSave)
+ {
+ proceed &= m_container->requestClose(event);
+ }
+
+ if(!proceed)
+ {
+ return;
+ }
+
MMC->settings()->set("ConsoleWindowState", saveState().toBase64());
MMC->settings()->set("ConsoleWindowGeometry", saveGeometry().toBase64());
-
- if(m_container->requestClose(event))
+ emit isClosing();
+ event->accept();
+ if(m_shouldQuit)
{
- emit isClosing();
- event->accept();
- if(m_shouldQuit)
- {
- // this needs to be delayed so we don't do horrible things
- QMetaObject::invokeMethod(MMC, "quit", Qt::QueuedConnection);
- }
+ // this needs to be delayed so we don't do horrible things
+ QMetaObject::invokeMethod(MMC, "quit", Qt::QueuedConnection);
}
}