diff --git a/src/core/Config.cpp b/src/core/Config.cpp index 046a0fe5..0650b1c2 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -106,6 +106,7 @@ void Config::init(const QString& fileName) m_defaults.insert("GUI/Language", "system"); m_defaults.insert("GUI/ShowTrayIcon", false); m_defaults.insert("GUI/MinimizeToTray", false); + m_defaults.insert("GUI/MinimizeOnClose", false); } Config* Config::instance() diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index e873ce13..20f949ae 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -71,6 +71,8 @@ MainWindow::MainWindow() : m_ui(new Ui::MainWindow()) , m_trayIcon(Q_NULLPTR) { + appExitCalled = false; + m_ui->setupUi(this); m_countDefaultAttributes = m_ui->menuEntryCopyAttribute->actions().size(); @@ -202,7 +204,7 @@ MainWindow::MainWindow() SLOT(importKeePass1Database())); connect(m_ui->actionLockDatabases, SIGNAL(triggered()), m_ui->tabWidget, SLOT(lockDatabases())); - connect(m_ui->actionQuit, SIGNAL(triggered()), SLOT(close())); + connect(m_ui->actionQuit, SIGNAL(triggered()), SLOT(appExit())); m_actionMultiplexer.connect(m_ui->actionEntryNew, SIGNAL(triggered()), SLOT(createEntry())); @@ -249,6 +251,12 @@ MainWindow::~MainWindow() { } +void MainWindow::appExit() +{ + appExitCalled = true; + close(); +} + void MainWindow::updateLastDatabasesMenu() { m_ui->menuRecentDatabases->clear(); @@ -462,6 +470,13 @@ void MainWindow::databaseTabChanged(int tabIndex) void MainWindow::closeEvent(QCloseEvent* event) { + if (config()->get("GUI/MinimizeOnClose").toBool() && !appExitCalled) + { + event->ignore(); + hide(); + return; + } + bool accept = saveLastDatabases(); if (accept) { diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index b966703d..0bdb1b82 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -65,6 +65,7 @@ private Q_SLOTS: void applySettingsChanges(); void trayIconTriggered(QSystemTrayIcon::ActivationReason reason); void toggleWindow(); + void appExit(); private: static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0); @@ -87,6 +88,8 @@ private: QSystemTrayIcon* m_trayIcon; Q_DISABLE_COPY(MainWindow) + + bool appExitCalled; }; #endif // KEEPASSX_MAINWINDOW_H diff --git a/src/gui/SettingsWidget.cpp b/src/gui/SettingsWidget.cpp index 01099559..498eb069 100644 --- a/src/gui/SettingsWidget.cpp +++ b/src/gui/SettingsWidget.cpp @@ -74,6 +74,8 @@ SettingsWidget::SettingsWidget(QWidget* parent) this, SLOT(enableAutoSaveOnExit(bool))); connect(m_generalUi->systrayShowCheckBox, SIGNAL(toggled(bool)), m_generalUi->systrayMinimizeToTrayCheckBox, SLOT(setEnabled(bool))); + connect(m_generalUi->systrayMinimizeToTrayCheckBox, SIGNAL(toggled(bool)), + m_generalUi->systrayMinimizeOnCloseCheckBox, SLOT(setEnabled(bool))); connect(m_secUi->clearClipboardCheckBox, SIGNAL(toggled(bool)), m_secUi->clearClipboardSpinBox, SLOT(setEnabled(bool))); @@ -117,6 +119,7 @@ void SettingsWidget::loadSettings() m_generalUi->systrayShowCheckBox->setChecked(config()->get("GUI/ShowTrayIcon").toBool()); m_generalUi->systrayMinimizeToTrayCheckBox->setChecked(config()->get("GUI/MinimizeToTray").toBool()); + m_generalUi->systrayMinimizeOnCloseCheckBox->setChecked(config()->get("GUI/MinimizeOnClose").toBool()); if (autoType()->isAvailable()) { m_globalAutoTypeKey = static_cast(config()->get("GlobalAutoTypeKey").toInt()); @@ -161,6 +164,7 @@ void SettingsWidget::saveSettings() config()->set("GUI/ShowTrayIcon", m_generalUi->systrayShowCheckBox->isChecked()); config()->set("GUI/MinimizeToTray", m_generalUi->systrayMinimizeToTrayCheckBox->isChecked()); + config()->set("GUI/MinimizeOnClose", m_generalUi->systrayMinimizeOnCloseCheckBox->isChecked()); if (autoType()->isAvailable()) { config()->set("GlobalAutoTypeKey", m_generalUi->autoTypeShortcutWidget->key()); diff --git a/src/gui/SettingsWidgetGeneral.ui b/src/gui/SettingsWidgetGeneral.ui index 6f4ee660..3f6c7e4b 100644 --- a/src/gui/SettingsWidgetGeneral.ui +++ b/src/gui/SettingsWidgetGeneral.ui @@ -7,7 +7,7 @@ 0 0 456 - 313 + 346 @@ -113,6 +113,16 @@ + + + + false + + + Hide window to system tray instead of App Exit + + +