Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/ApplicationSettingsWidget.cpp')
-rw-r--r--src/gui/ApplicationSettingsWidget.cpp114
1 files changed, 110 insertions, 4 deletions
diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp
index 2461230c8..d3cc994f8 100644
--- a/src/gui/ApplicationSettingsWidget.cpp
+++ b/src/gui/ApplicationSettingsWidget.cpp
@@ -28,6 +28,7 @@
#include "core/Global.h"
#include "core/Translator.h"
+#include "MessageBox.h"
#include "touchid/TouchID.h"
class ApplicationSettingsWidget::ExtraPage
@@ -54,6 +55,28 @@ private:
QWidget* widget;
};
+/**
+ * Helper class to ignore mouse wheel events on non-focused widgets
+ * NOTE: The widget must NOT have a focus policy of "WHEEL"
+ */
+class MouseWheelEventFilter : public QObject
+{
+public:
+ explicit MouseWheelEventFilter(QObject* parent)
+ : QObject(parent){};
+
+protected:
+ bool eventFilter(QObject* obj, QEvent* event) override
+ {
+ const auto* widget = qobject_cast<QWidget*>(obj);
+ if (event->type() == QEvent::Wheel && widget && !widget->hasFocus()) {
+ event->ignore();
+ return true;
+ }
+ return QObject::eventFilter(obj, event);
+ }
+};
+
ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent)
: EditWidget(parent)
, m_secWidget(new QWidget())
@@ -80,28 +103,41 @@ 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)));
+ connect(m_generalUi->resetSettingsButton, SIGNAL(clicked()), SLOT(resetSettings()));
connect(m_secUi->clearClipboardCheckBox, SIGNAL(toggled(bool)),
m_secUi->clearClipboardSpinBox, SLOT(setEnabled(bool)));
+ connect(m_secUi->clearSearchCheckBox, SIGNAL(toggled(bool)),
+ m_secUi->clearSearchSpinBox, SLOT(setEnabled(bool)));
connect(m_secUi->lockDatabaseIdleCheckBox, SIGNAL(toggled(bool)),
m_secUi->lockDatabaseIdleSpinBox, SLOT(setEnabled(bool)));
connect(m_secUi->touchIDResetCheckBox, SIGNAL(toggled(bool)),
m_secUi->touchIDResetSpinBox, SLOT(setEnabled(bool)));
// clang-format on
+ // Disable mouse wheel grab when scrolling
+ // This prevents combo box and spinner values from changing without explicit focus
+ auto mouseWheelFilter = new MouseWheelEventFilter(this);
+ m_generalUi->faviconTimeoutSpinBox->installEventFilter(mouseWheelFilter);
+ m_generalUi->toolButtonStyleComboBox->installEventFilter(mouseWheelFilter);
+ m_generalUi->languageComboBox->installEventFilter(mouseWheelFilter);
+
#ifdef WITH_XC_UPDATECHECK
connect(m_generalUi->checkForUpdatesOnStartupCheckBox, SIGNAL(toggled(bool)), SLOT(checkUpdatesToggled(bool)));
#else
m_generalUi->checkForUpdatesOnStartupCheckBox->setVisible(false);
m_generalUi->checkForUpdatesIncludeBetasCheckBox->setVisible(false);
- m_generalUi->checkUpdatesSpacer->changeSize(0,0, QSizePolicy::Fixed, QSizePolicy::Fixed);
+ m_generalUi->checkUpdatesSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
#endif
#ifndef WITH_XC_NETWORKING
m_secUi->privacy->setVisible(false);
+ m_generalUi->faviconTimeoutLabel->setVisible(false);
+ m_generalUi->faviconTimeoutSpinBox->setVisible(false);
#endif
#ifndef WITH_XC_TOUCHID
@@ -147,11 +183,20 @@ 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->minimizeAfterUnlockCheckBox->setChecked(config()->get("MinimizeAfterUnlock").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());
+ m_generalUi->faviconTimeoutSpinBox->setValue(config()->get("FaviconDownloadTimeout").toInt());
+
+ if (!m_generalUi->hideWindowOnCopyCheckBox->isChecked()) {
+ hideWindowOnCopyCheckBoxToggled(false);
+ }
m_generalUi->languageComboBox->clear();
QList<QPair<QString, QString>> languages = Translator::availableLanguages();
@@ -166,6 +211,7 @@ void ApplicationSettingsWidget::loadSettings()
m_generalUi->previewHideCheckBox->setChecked(config()->get("GUI/HidePreviewPanel").toBool());
m_generalUi->toolbarHideCheckBox->setChecked(config()->get("GUI/HideToolbar").toBool());
m_generalUi->toolbarMovableCheckBox->setChecked(config()->get("GUI/MovableToolbar").toBool());
+ m_generalUi->monospaceNotesCheckBox->setChecked(config()->get("GUI/MonospaceNotes").toBool());
m_generalUi->toolButtonStyleComboBox->clear();
m_generalUi->toolButtonStyleComboBox->addItem(tr("Icon only"), Qt::ToolButtonIconOnly);
@@ -203,6 +249,9 @@ void ApplicationSettingsWidget::loadSettings()
m_secUi->clearClipboardCheckBox->setChecked(config()->get("security/clearclipboard").toBool());
m_secUi->clearClipboardSpinBox->setValue(config()->get("security/clearclipboardtimeout").toInt());
+ m_secUi->clearSearchCheckBox->setChecked(config()->get("security/clearsearch").toBool());
+ m_secUi->clearSearchSpinBox->setValue(config()->get("security/clearsearchtimeout").toInt());
+
m_secUi->lockDatabaseIdleCheckBox->setChecked(config()->get("security/lockdatabaseidle").toBool());
m_secUi->lockDatabaseIdleSpinBox->setValue(config()->get("security/lockdatabaseidlesec").toInt());
m_secUi->lockDatabaseMinimizeCheckBox->setChecked(config()->get("security/lockdatabaseminimize").toBool());
@@ -229,7 +278,6 @@ void ApplicationSettingsWidget::loadSettings()
void ApplicationSettingsWidget::saveSettings()
{
-
if (config()->hasAccessError()) {
showMessage(tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error);
// We prevent closing the settings page if we could not write to
@@ -246,18 +294,24 @@ 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("MinimizeAfterUnlock", m_generalUi->minimizeAfterUnlockCheckBox->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());
config()->set("AutoTypeEntryURLMatch", m_generalUi->autoTypeEntryURLMatchCheckBox->isChecked());
int currentLangIndex = m_generalUi->languageComboBox->currentIndex();
+ config()->set("FaviconDownloadTimeout", m_generalUi->faviconTimeoutSpinBox->value());
config()->set("GUI/Language", m_generalUi->languageComboBox->itemData(currentLangIndex).toString());
config()->set("GUI/HidePreviewPanel", m_generalUi->previewHideCheckBox->isChecked());
config()->set("GUI/HideToolbar", m_generalUi->toolbarHideCheckBox->isChecked());
config()->set("GUI/MovableToolbar", m_generalUi->toolbarMovableCheckBox->isChecked());
+ config()->set("GUI/MonospaceNotes", m_generalUi->monospaceNotesCheckBox->isChecked());
int currentToolButtonStyleIndex = m_generalUi->toolButtonStyleComboBox->currentIndex();
config()->set("GUI/ToolButtonStyle",
@@ -282,6 +336,9 @@ void ApplicationSettingsWidget::saveSettings()
config()->set("security/clearclipboard", m_secUi->clearClipboardCheckBox->isChecked());
config()->set("security/clearclipboardtimeout", m_secUi->clearClipboardSpinBox->value());
+ config()->set("security/clearsearch", m_secUi->clearSearchCheckBox->isChecked());
+ config()->set("security/clearsearchtimeout", m_secUi->clearSearchSpinBox->value());
+
config()->set("security/lockdatabaseidle", m_secUi->lockDatabaseIdleCheckBox->isChecked());
config()->set("security/lockdatabaseidlesec", m_secUi->lockDatabaseIdleSpinBox->value());
config()->set("security/lockdatabaseminimize", m_secUi->lockDatabaseMinimizeCheckBox->isChecked());
@@ -305,6 +362,7 @@ void ApplicationSettingsWidget::saveSettings()
config()->set("LastDatabases", {});
config()->set("OpenPreviousDatabasesOnStartup", {});
config()->set("LastActiveDatabase", {});
+ config()->set("LastAttachmentDir", {});
}
if (!config()->get("RememberLastKeyFiles").toBool()) {
@@ -317,6 +375,48 @@ void ApplicationSettingsWidget::saveSettings()
}
}
+void ApplicationSettingsWidget::resetSettings()
+{
+ // Confirm reset
+ auto ans = MessageBox::question(this,
+ tr("Reset Settings?"),
+ tr("Are you sure you want to reset all general and security settings to default?"),
+ MessageBox::Reset | MessageBox::Cancel,
+ MessageBox::Cancel);
+ if (ans == MessageBox::Cancel) {
+ return;
+ }
+
+ if (config()->hasAccessError()) {
+ showMessage(tr("Access error for config file %1").arg(config()->getFileName()), MessageWidget::Error);
+ // We prevent closing the settings page if we could not write to
+ // the config file.
+ return;
+ }
+
+ // Reset general and security settings to default
+ config()->resetToDefaults();
+
+ // Clear recently used data
+ config()->set("LastDatabases", {});
+ config()->set("OpenPreviousDatabasesOnStartup", {});
+ config()->set("LastActiveDatabase", {});
+ config()->set("LastAttachmentDir", {});
+ config()->set("LastKeyFiles", {});
+ config()->set("LastDir", "");
+
+ // Save the Extra Pages (these are NOT reset)
+ for (const ExtraPage& page : asConst(m_extraPages)) {
+ page.saveSettings();
+ }
+
+ config()->sync();
+
+ // Refresh the settings widget and notify listeners
+ loadSettings();
+ emit settingsReset();
+}
+
void ApplicationSettingsWidget::reject()
{
// register the old key again as it might have changed
@@ -334,6 +434,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);