From 8e248bbde6c9e7034b6ae88cdf460cd857db167c Mon Sep 17 00:00:00 2001 From: Balazs Gyurak Date: Sun, 9 Jun 2019 19:15:02 +0100 Subject: [PATCH] Drop to background on copy feature --- CHANGELOG | 1 + share/keepassxc.ini | 4 +- src/core/Config.cpp | 11 +++- src/gui/ApplicationSettingsWidget.cpp | 19 +++++- src/gui/ApplicationSettingsWidget.h | 1 + src/gui/ApplicationSettingsWidgetGeneral.ui | 68 +++++++++++++++++++-- src/gui/DatabaseWidget.cpp | 8 ++- src/gui/TotpDialog.cpp | 9 ++- src/gui/TotpExportSettingsDialog.cpp | 9 ++- 9 files changed, 116 insertions(+), 14 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index dabd69c1..07e50663 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,7 @@ - Rework the Entry Preview panel [#3306] - Move notes to General tab on Group Preview Panel [#3336] - Add 'Monospaced font' option to the Notes field [#3321] +- Drop to background when copy feature [#3253] 2.4.3 (2019-06-12) ========================= diff --git a/share/keepassxc.ini b/share/keepassxc.ini index 7117b984..d4057265 100644 --- a/share/keepassxc.ini +++ b/share/keepassxc.ini @@ -5,7 +5,9 @@ OpenPreviousDatabasesOnStartup=true AutoSaveAfterEveryChange=false AutoSaveOnExit=false AutoReloadOnChange=true -MinimizeOnCopy=false +HideWindowOnCopy=false +MinimizeOnCopy=true +DropToBackgroundOnCopy=false MinimizeOnOpenUrl=false UseGroupIconOnEntryCreation=true IgnoreGroupExpansion=false diff --git a/src/core/Config.cpp b/src/core/Config.cpp index e65926ec..3922d3e2 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -106,6 +106,12 @@ void Config::upgrade() if (m_settings->value("AutoSaveAfterEveryChange").toBool()) { m_settings->setValue("AutoSaveOnExit", true); } + + // Setting defaults for 'hide window on copy' behavior, keeping the user's original setting + if (m_settings->value("HideWindowOnCopy").isNull()) { + m_settings->setValue("HideWindowOnCopy", m_settings->value("MinimizeOnCopy").toBool()); + m_settings->setValue("MinimizeOnCopy", true); + } } Config::Config(const QString& fileName, QObject* parent) @@ -177,8 +183,11 @@ void Config::init(const QString& fileName) m_defaults.insert("BackupBeforeSave", false); m_defaults.insert("UseAtomicSaves", true); m_defaults.insert("SearchLimitGroup", false); - m_defaults.insert("MinimizeOnCopy", false); m_defaults.insert("MinimizeOnOpenUrl", false); + m_defaults.insert("HideWindowOnCopy", false); + m_defaults.insert("MinimizeOnCopy", true); + m_defaults.insert("DropToBackgroundOnCopy", false); + m_defaults.insert("UseGroupIconOnEntryCreation", false); m_defaults.insert("AutoTypeEntryTitleMatch", true); m_defaults.insert("AutoTypeEntryURLMatch", true); m_defaults.insert("AutoTypeDelay", 25); diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp index dea184a4..832e73fa 100644 --- a/src/gui/ApplicationSettingsWidget.cpp +++ b/src/gui/ApplicationSettingsWidget.cpp @@ -80,6 +80,7 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent) // clang-format off connect(m_generalUi->autoSaveAfterEveryChangeCheckBox, SIGNAL(toggled(bool)), SLOT(autoSaveToggled(bool))); + connect(m_generalUi->hideWindowOnCopyCheckBox, SIGNAL(toggled(bool)), SLOT(hideWindowOnCopyCheckBoxToggled(bool))); connect(m_generalUi->systrayShowCheckBox, SIGNAL(toggled(bool)), SLOT(systrayToggled(bool))); connect(m_generalUi->toolbarHideCheckBox, SIGNAL(toggled(bool)), SLOT(toolbarSettingsToggled(bool))); connect(m_generalUi->rememberLastDatabasesCheckBox, SIGNAL(toggled(bool)), SLOT(rememberDatabasesToggled(bool))); @@ -147,13 +148,19 @@ void ApplicationSettingsWidget::loadSettings() m_generalUi->backupBeforeSaveCheckBox->setChecked(config()->get("BackupBeforeSave").toBool()); m_generalUi->useAtomicSavesCheckBox->setChecked(config()->get("UseAtomicSaves").toBool()); m_generalUi->autoReloadOnChangeCheckBox->setChecked(config()->get("AutoReloadOnChange").toBool()); - m_generalUi->minimizeOnCopyCheckBox->setChecked(config()->get("MinimizeOnCopy").toBool()); m_generalUi->minimizeOnOpenUrlCheckBox->setChecked(config()->get("MinimizeOnOpenUrl").toBool()); + m_generalUi->hideWindowOnCopyCheckBox->setChecked(config()->get("HideWindowOnCopy").toBool()); + m_generalUi->minimizeOnCopyRadioButton->setChecked(config()->get("MinimizeOnCopy").toBool()); + m_generalUi->dropToBackgroundOnCopyRadioButton->setChecked(config()->get("DropToBackgroundOnCopy").toBool()); m_generalUi->useGroupIconOnEntryCreationCheckBox->setChecked(config()->get("UseGroupIconOnEntryCreation").toBool()); m_generalUi->autoTypeEntryTitleMatchCheckBox->setChecked(config()->get("AutoTypeEntryTitleMatch").toBool()); m_generalUi->autoTypeEntryURLMatchCheckBox->setChecked(config()->get("AutoTypeEntryURLMatch").toBool()); m_generalUi->ignoreGroupExpansionCheckBox->setChecked(config()->get("IgnoreGroupExpansion").toBool()); + if (!m_generalUi->hideWindowOnCopyCheckBox->isChecked()) { + hideWindowOnCopyCheckBoxToggled(false); + } + m_generalUi->languageComboBox->clear(); QList> languages = Translator::availableLanguages(); for (const auto& language : languages) { @@ -248,8 +255,10 @@ void ApplicationSettingsWidget::saveSettings() config()->set("BackupBeforeSave", m_generalUi->backupBeforeSaveCheckBox->isChecked()); config()->set("UseAtomicSaves", m_generalUi->useAtomicSavesCheckBox->isChecked()); config()->set("AutoReloadOnChange", m_generalUi->autoReloadOnChangeCheckBox->isChecked()); - config()->set("MinimizeOnCopy", m_generalUi->minimizeOnCopyCheckBox->isChecked()); config()->set("MinimizeOnOpenUrl", m_generalUi->minimizeOnOpenUrlCheckBox->isChecked()); + config()->set("HideWindowOnCopy", m_generalUi->hideWindowOnCopyCheckBox->isChecked()); + config()->set("MinimizeOnCopy", m_generalUi->minimizeOnCopyRadioButton->isChecked()); + config()->set("DropToBackgroundOnCopy", m_generalUi->dropToBackgroundOnCopyRadioButton->isChecked()); config()->set("UseGroupIconOnEntryCreation", m_generalUi->useGroupIconOnEntryCreationCheckBox->isChecked()); config()->set("IgnoreGroupExpansion", m_generalUi->ignoreGroupExpansionCheckBox->isChecked()); config()->set("AutoTypeEntryTitleMatch", m_generalUi->autoTypeEntryTitleMatchCheckBox->isChecked()); @@ -338,6 +347,12 @@ void ApplicationSettingsWidget::autoSaveToggled(bool checked) m_generalUi->autoSaveOnExitCheckBox->setEnabled(!checked); } +void ApplicationSettingsWidget::hideWindowOnCopyCheckBoxToggled(bool checked) +{ + m_generalUi->minimizeOnCopyRadioButton->setEnabled(checked); + m_generalUi->dropToBackgroundOnCopyRadioButton->setEnabled(checked); +} + void ApplicationSettingsWidget::systrayToggled(bool checked) { m_generalUi->systrayDarkIconCheckBox->setEnabled(checked); diff --git a/src/gui/ApplicationSettingsWidget.h b/src/gui/ApplicationSettingsWidget.h index dfffbddb..fe9ac88f 100644 --- a/src/gui/ApplicationSettingsWidget.h +++ b/src/gui/ApplicationSettingsWidget.h @@ -54,6 +54,7 @@ private slots: void saveSettings(); void reject(); void autoSaveToggled(bool checked); + void hideWindowOnCopyCheckBoxToggled(bool checked); void systrayToggled(bool checked); void toolbarSettingsToggled(bool checked); void rememberDatabasesToggled(bool checked); diff --git a/src/gui/ApplicationSettingsWidgetGeneral.ui b/src/gui/ApplicationSettingsWidgetGeneral.ui index 97f8f0fe..d1fb19c7 100644 --- a/src/gui/ApplicationSettingsWidgetGeneral.ui +++ b/src/gui/ApplicationSettingsWidgetGeneral.ui @@ -249,9 +249,9 @@ - + - Minimize when copying to clipboard + Hide the entry preview panel @@ -263,12 +263,72 @@ - + - Hide the entry preview panel + Hide window when copying to clipboard + + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Minimize + + + + + + + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Drop to background + + + + + diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index d73b2a0f..7d8c9580 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -625,8 +625,12 @@ void DatabaseWidget::showTotpKeyQrCode() void DatabaseWidget::setClipboardTextAndMinimize(const QString& text) { clipboard()->setText(text); - if (config()->get("MinimizeOnCopy").toBool()) { - window()->showMinimized(); + if (config()->get("HideWindowOnCopy").toBool()) { + if (config()->get("MinimizeOnCopy").toBool()) { + window()->showMinimized(); + } else if (config()->get("DropToBackgroundOnCopy").toBool()) { + window()->lower(); + } } } diff --git a/src/gui/TotpDialog.cpp b/src/gui/TotpDialog.cpp index a9e4272d..8cc84eaa 100644 --- a/src/gui/TotpDialog.cpp +++ b/src/gui/TotpDialog.cpp @@ -59,8 +59,13 @@ TotpDialog::~TotpDialog() void TotpDialog::copyToClipboard() { clipboard()->setText(m_entry->totp()); - if (config()->get("MinimizeOnCopy").toBool()) { - qobject_cast(parent())->window()->showMinimized(); + if (config()->get("HideWindowOnCopy").toBool()) { + if (config()->get("MinimizeOnCopy").toBool()) { + qobject_cast(parent())->window()->showMinimized(); + } else if (config()->get("DropToBackgroundOnCopy").toBool()) { + qobject_cast(parent())->window()->lower(); + window()->lower(); + } } } diff --git a/src/gui/TotpExportSettingsDialog.cpp b/src/gui/TotpExportSettingsDialog.cpp index dc7fcafd..956cca53 100644 --- a/src/gui/TotpExportSettingsDialog.cpp +++ b/src/gui/TotpExportSettingsDialog.cpp @@ -99,8 +99,13 @@ TotpExportSettingsDialog::TotpExportSettingsDialog(DatabaseWidget* parent, Entry void TotpExportSettingsDialog::copyToClipboard() { clipboard()->setText(m_totpUri); - if (config()->get("MinimizeOnCopy").toBool()) { - static_cast(parent())->window()->showMinimized(); + if (config()->get("HideWindowOnCopy").toBool()) { + if (config()->get("MinimizeOnCopy").toBool()) { + static_cast(parent())->window()->showMinimized(); + } else if (config()->get("DropToBackgroundOnCopy").toBool()) { + static_cast(parent())->window()->lower(); + window()->lower(); + } } }