diff --git a/src/gui/Src/Gui/MainWindow.cpp b/src/gui/Src/Gui/MainWindow.cpp
index c566d078..de667a87 100644
--- a/src/gui/Src/Gui/MainWindow.cpp
+++ b/src/gui/Src/Gui/MainWindow.cpp
@@ -451,6 +451,30 @@ void MainWindow::setupLanguagesMenu()
void MainWindow::closeEvent(QCloseEvent* event)
{
+ if(DbgIsDebugging() && ConfigBool("Gui", "ShowExitConfirmation"))
+ {
+ auto cb = new QCheckBox(tr("Don't ask this question again"));
+ QMessageBox msgbox(this);
+ msgbox.setText(tr("The debuggee is still running and will be terminated if you exit. Do you really want to exit?"));
+ msgbox.setWindowTitle(tr("Debuggee is still running"));
+ msgbox.setWindowIcon(DIcon("bug.png"));
+ msgbox.addButton(QMessageBox::Yes);
+ msgbox.addButton(QMessageBox::No);
+ msgbox.setDefaultButton(QMessageBox::No);
+ msgbox.setCheckBox(cb);
+
+ QObject::connect(cb, &QCheckBox::toggled, [](bool checked)
+ {
+ Config()->setBool("Gui", "ShowExitConfirmation", !checked);
+ });
+
+ if(msgbox.exec() != QMessageBox::Yes)
+ {
+ event->ignore();
+ return;
+ }
+ }
+
duint noClose = 0;
if(bCanClose)
{
diff --git a/src/gui/Src/Gui/SettingsDialog.cpp b/src/gui/Src/Gui/SettingsDialog.cpp
index f13ec627..dfed8d8a 100644
--- a/src/gui/Src/Gui/SettingsDialog.cpp
+++ b/src/gui/Src/Gui/SettingsDialog.cpp
@@ -220,6 +220,7 @@ void SettingsDialog::LoadSettings()
GetSettingBool("Gui", "NoForegroundWindow", &settings.guiNoForegroundWindow);
GetSettingBool("Gui", "LoadSaveTabOrder", &settings.guiLoadSaveTabOrder);
GetSettingBool("Gui", "ShowGraphRva", &settings.guiShowGraphRva);
+ GetSettingBool("Gui", "ShowExitConfirmation", &settings.guiShowExitConfirmation);
ui->chkFpuRegistersLittleEndian->setChecked(settings.guiFpuRegistersLittleEndian);
ui->chkSaveColumnOrder->setChecked(settings.guiSaveColumnOrder);
ui->chkNoCloseDialog->setChecked(settings.guiNoCloseDialog);
@@ -228,6 +229,7 @@ void SettingsDialog::LoadSettings()
ui->chkNoForegroundWindow->setChecked(settings.guiNoForegroundWindow);
ui->chkSaveLoadTabOrder->setChecked(settings.guiLoadSaveTabOrder);
ui->chkShowGraphRva->setChecked(settings.guiShowGraphRva);
+ ui->chkShowExitConfirmation->setChecked(settings.guiShowExitConfirmation);
//Misc tab
if(DbgFunctions()->GetJit)
@@ -356,6 +358,7 @@ void SettingsDialog::SaveSettings()
BridgeSettingSetUint("Gui", "NoForegroundWindow", settings.guiNoForegroundWindow);
BridgeSettingSetUint("Gui", "LoadSaveTabOrder", settings.guiLoadSaveTabOrder);
BridgeSettingSetUint("Gui", "ShowGraphRva", settings.guiShowGraphRva);
+ BridgeSettingSetUint("Gui", "ShowExitConfirmation", settings.guiShowExitConfirmation);
//Misc tab
if(DbgFunctions()->GetJit)
@@ -803,3 +806,8 @@ void SettingsDialog::on_chkShowGraphRva_toggled(bool checked)
bTokenizerConfigUpdated = true;
settings.guiShowGraphRva = checked;
}
+
+void SettingsDialog::on_chkShowExitConfirmation_toggled(bool checked)
+{
+ settings.guiShowExitConfirmation = checked;
+}
diff --git a/src/gui/Src/Gui/SettingsDialog.h b/src/gui/Src/Gui/SettingsDialog.h
index 14536bce..edba7786 100644
--- a/src/gui/Src/Gui/SettingsDialog.h
+++ b/src/gui/Src/Gui/SettingsDialog.h
@@ -80,6 +80,7 @@ private slots:
void on_chkPidInHex_clicked(bool checked);
void on_chkSidebarWatchLabels_stateChanged(int arg1);
void on_chkNoForegroundWindow_toggled(bool checked);
+ void on_chkShowExitConfirmation_toggled(bool checked);
//Misc tab
void on_chkSetJIT_stateChanged(int arg1);
void on_chkConfirmBeforeAtt_stateChanged(int arg1);
@@ -170,6 +171,7 @@ private:
bool guiNoForegroundWindow;
bool guiLoadSaveTabOrder;
bool guiShowGraphRva;
+ bool guiShowExitConfirmation;
//Misc Tab
bool miscSetJIT;
bool miscSetJITAuto;
diff --git a/src/gui/Src/Gui/SettingsDialog.ui b/src/gui/Src/Gui/SettingsDialog.ui
index ca9d1328..b374d7a2 100644
--- a/src/gui/Src/Gui/SettingsDialog.ui
+++ b/src/gui/Src/Gui/SettingsDialog.ui
@@ -627,6 +627,13 @@
+ -
+
+
+ Show exit confirmation dialog
+
+
+
-
diff --git a/src/gui/Src/Utils/Configuration.cpp b/src/gui/Src/Utils/Configuration.cpp
index 13a4937e..e8de0cdc 100644
--- a/src/gui/Src/Utils/Configuration.cpp
+++ b/src/gui/Src/Utils/Configuration.cpp
@@ -263,6 +263,7 @@ Configuration::Configuration() : QObject(), noMoreMsgbox(false)
guiBool.insert("SidebarWatchLabels", true);
guiBool.insert("LoadSaveTabOrder", false);
guiBool.insert("ShowGraphRva", false);
+ guiBool.insert("ShowExitConfirmation", true);
//Named menu settings
insertMenuBuilderBools(&guiBool, "CPUDisassembly", 50); //CPUDisassembly
insertMenuBuilderBools(&guiBool, "CPUDump", 50); //CPUDump