From 5982763bed2a9280de82d7cf36f95c8f6272e4b2 Mon Sep 17 00:00:00 2001 From: denk-mal Date: Thu, 18 Jun 2015 15:23:41 +0200 Subject: [PATCH] implement a (nonperfect) hide-to-tray on win close --- src/core/Config.cpp | 1 + src/gui/MainWindow.cpp | 17 ++++++++++++++++- src/gui/MainWindow.h | 3 +++ src/gui/SettingsWidget.cpp | 4 ++++ src/gui/SettingsWidgetGeneral.ui | 12 +++++++++++- 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/core/Config.cpp b/src/core/Config.cpp index 046a0fe50..0650b1c21 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 e873ce135..20f949ae0 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 b966703d1..0bdb1b828 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 01099559c..498eb0694 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 6f4ee660c..3f6c7e4b1 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 + + +