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