diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index ed90caea2d2..4d8c9726da3 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -85,6 +85,7 @@ #include #include #include +#include #include #include #include @@ -209,6 +210,16 @@ void MainWindow::setSidebarVisible(bool visible, Side side) navigationWidget(side)->setShown(visible); } +bool MainWindow::askConfirmationBeforeExit() const +{ + return m_askConfirmationBeforeExit; +} + +void MainWindow::setAskConfirmationBeforeExit(bool ask) +{ + m_askConfirmationBeforeExit = ask; +} + void MainWindow::setOverrideColor(const QColor &color) { m_overrideColor = color; @@ -338,6 +349,17 @@ void MainWindow::closeEvent(QCloseEvent *event) return; } + if (m_askConfirmationBeforeExit && + (QMessageBox::question(this, + tr("Exit %1?").arg(Constants::IDE_DISPLAY_NAME), + tr("Exit %1?").arg(Constants::IDE_DISPLAY_NAME), + QMessageBox::Yes | QMessageBox::No, + QMessageBox::No) + == QMessageBox::No)) { + event->ignore(); + return; + } + ICore::saveSettings(ICore::MainWindowClosing); // Save opened files @@ -1001,6 +1023,7 @@ void MainWindow::aboutToShutdown() static const char settingsGroup[] = "MainWindow"; static const char colorKey[] = "Color"; +static const char askBeforeExitKey[] = "AskBeforeExit"; static const char windowGeometryKey[] = "WindowGeometry"; static const char windowStateKey[] = "WindowState"; static const char modeSelectorLayoutKey[] = "ModeSelectorLayout"; @@ -1019,6 +1042,8 @@ void MainWindow::readSettings() QColor(StyleHelper::DEFAULT_BASE_COLOR)).value()); } + m_askConfirmationBeforeExit = settings->value(askBeforeExitKey, false).toBool(); + { ModeManager::Style modeStyle = ModeManager::Style(settings->value(modeSelectorLayoutKey, int(ModeManager::Style::IconsAndText)).toInt()); @@ -1050,6 +1075,8 @@ void MainWindow::saveSettings() if (!(m_overrideColor.isValid() && StyleHelper::baseColor() == m_overrideColor)) settings->setValue(QLatin1String(colorKey), StyleHelper::requestedBaseColor()); + settings->setValue(askBeforeExitKey, m_askConfirmationBeforeExit); + settings->endGroup(); DocumentManager::saveSettings(); diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h index 2847b341cb4..3c56062d437 100644 --- a/src/plugins/coreplugin/mainwindow.h +++ b/src/plugins/coreplugin/mainwindow.h @@ -102,6 +102,9 @@ public: void updateAdditionalContexts(const Context &remove, const Context &add, ICore::ContextPriority priority); + bool askConfirmationBeforeExit() const; + void setAskConfirmationBeforeExit(bool ask); + void setOverrideColor(const QColor &color); QStringList additionalAboutInformation() const; @@ -194,6 +197,7 @@ private: QToolButton *m_toggleLeftSideBarButton = nullptr; QToolButton *m_toggleRightSideBarButton = nullptr; + bool m_askConfirmationBeforeExit = false; QColor m_overrideColor; QList> m_preCloseListeners; }; diff --git a/src/plugins/coreplugin/systemsettings.cpp b/src/plugins/coreplugin/systemsettings.cpp index 59b2d518fc9..4d4234e6259 100644 --- a/src/plugins/coreplugin/systemsettings.cpp +++ b/src/plugins/coreplugin/systemsettings.cpp @@ -29,6 +29,7 @@ #include "fileutils.h" #include "icore.h" #include "iversioncontrol.h" +#include "mainwindow.h" #include "patchtool.h" #include "vcsmanager.h" @@ -112,6 +113,8 @@ public: m_ui.maxRecentFilesSpinBox->setMinimum(1); m_ui.maxRecentFilesSpinBox->setMaximum(99); m_ui.maxRecentFilesSpinBox->setValue(EditorManagerPrivate::maxRecentFiles()); + m_ui.askBeforeExitCheckBox->setChecked( + static_cast(ICore::mainWindow())->askConfirmationBeforeExit()); if (HostOsInfo::isAnyUnixHost()) { connect(m_ui.resetTerminalButton, &QAbstractButton::clicked, @@ -191,6 +194,8 @@ void SystemSettingsWidget::apply() m_ui.warnBeforeOpeningBigFiles->isChecked()); EditorManagerPrivate::setBigFileSizeLimit(m_ui.bigFilesLimitSpinBox->value()); EditorManagerPrivate::setMaxRecentFiles(m_ui.maxRecentFilesSpinBox->value()); + static_cast(ICore::mainWindow())->setAskConfirmationBeforeExit( + m_ui.askBeforeExitCheckBox->isChecked()); if (HostOsInfo::isMacHost()) { Qt::CaseSensitivity defaultSensitivity diff --git a/src/plugins/coreplugin/systemsettings.ui b/src/plugins/coreplugin/systemsettings.ui index 1aee69e9e3d..769a8e04c98 100644 --- a/src/plugins/coreplugin/systemsettings.ui +++ b/src/plugins/coreplugin/systemsettings.ui @@ -390,6 +390,17 @@ + + + + + + Ask for confirmation before exiting + + + + +