diff options
Diffstat (limited to 'src/gui/SearchWidget.cpp')
-rw-r--r-- | src/gui/SearchWidget.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/gui/SearchWidget.cpp b/src/gui/SearchWidget.cpp index 822d40ba1..1c7b683c1 100644 --- a/src/gui/SearchWidget.cpp +++ b/src/gui/SearchWidget.cpp @@ -25,7 +25,7 @@ #include <QToolButton> #include "core/Config.h" -#include "core/FilePath.h" +#include "core/Resources.h" #include "gui/widgets/PopupHelpWidget.h" SearchWidget::SearchWidget(QWidget* parent) @@ -38,7 +38,6 @@ SearchWidget::SearchWidget(QWidget* parent) setFocusProxy(m_ui->searchEdit); m_helpWidget = new PopupHelpWidget(m_ui->searchEdit); - m_helpWidget->setOffset(QPoint(0, 1)); Ui::SearchHelpWidget helpUi; helpUi.setupUi(m_helpWidget); @@ -68,15 +67,15 @@ SearchWidget::SearchWidget(QWidget* parent) m_actionLimitGroup = m_searchMenu->addAction(tr("Limit search to selected group"), this, SLOT(updateLimitGroup())); m_actionLimitGroup->setObjectName("actionSearchLimitGroup"); m_actionLimitGroup->setCheckable(true); - m_actionLimitGroup->setChecked(config()->get("SearchLimitGroup", false).toBool()); + m_actionLimitGroup->setChecked(config()->get(Config::SearchLimitGroup).toBool()); - m_ui->searchIcon->setIcon(filePath()->icon("actions", "system-search")); + m_ui->searchIcon->setIcon(resources()->icon("system-search")); m_ui->searchEdit->addAction(m_ui->searchIcon, QLineEdit::LeadingPosition); - m_ui->helpIcon->setIcon(filePath()->icon("actions", "system-help")); + m_ui->helpIcon->setIcon(resources()->icon("system-help")); m_ui->searchEdit->addAction(m_ui->helpIcon, QLineEdit::TrailingPosition); - m_ui->clearIcon->setIcon(filePath()->icon("actions", "edit-clear-locationbar-rtl")); + m_ui->clearIcon->setIcon(resources()->icon("edit-clear-locationbar-rtl")); m_ui->clearIcon->setVisible(false); m_ui->searchEdit->addAction(m_ui->clearIcon, QLineEdit::TrailingPosition); @@ -115,15 +114,16 @@ bool SearchWidget::eventFilter(QObject* obj, QEvent* event) return true; } } - } else if (event->type() == QEvent::FocusOut) { - if (config()->get("security/clearsearch").toBool()) { - int timeout = config()->get("security/clearsearchtimeout").toInt(); + } else if (event->type() == QEvent::FocusOut && !m_ui->searchEdit->text().isEmpty()) { + if (config()->get(Config::Security_ClearSearch).toBool()) { + int timeout = config()->get(Config::Security_ClearSearchTimeout).toInt(); if (timeout > 0) { // Auto-clear search after set timeout (5 minutes by default) m_clearSearchTimer->start(timeout * 60000); // 60 sec * 1000 ms } } } else if (event->type() == QEvent::FocusIn) { + // Never clear the search if we are using it m_clearSearchTimer->stop(); } @@ -137,8 +137,11 @@ void SearchWidget::connectSignals(SignalMultiplexer& mx) mx.connect(this, SIGNAL(caseSensitiveChanged(bool)), SLOT(setSearchCaseSensitive(bool))); mx.connect(this, SIGNAL(limitGroupChanged(bool)), SLOT(setSearchLimitGroup(bool))); mx.connect(this, SIGNAL(copyPressed()), SLOT(copyPassword())); - mx.connect(this, SIGNAL(downPressed()), SLOT(setFocus())); + mx.connect(this, SIGNAL(downPressed()), SLOT(focusOnEntries())); mx.connect(SIGNAL(clearSearch()), m_ui->searchEdit, SLOT(clear())); + mx.connect(SIGNAL(entrySelectionChanged()), this, SLOT(resetSearchClearTimer())); + mx.connect(SIGNAL(currentModeChanged(DatabaseWidget::Mode)), this, SLOT(resetSearchClearTimer())); + mx.connect(SIGNAL(databaseUnlocked()), this, SLOT(searchFocus())); mx.connect(m_ui->searchEdit, SIGNAL(returnPressed()), SLOT(switchToEntryEdit())); } @@ -147,8 +150,6 @@ void SearchWidget::databaseChanged(DatabaseWidget* dbWidget) if (dbWidget != nullptr) { // Set current search text from this database m_ui->searchEdit->setText(dbWidget->getCurrentSearch()); - // Keyboard focus on search widget at database unlocking - connect(dbWidget, SIGNAL(databaseUnlocked()), this, SLOT(searchFocus())); // Enforce search policy emit caseSensitiveChanged(m_actionCaseSensitive->isChecked()); emit limitGroupChanged(m_actionLimitGroup->isChecked()); @@ -177,6 +178,14 @@ void SearchWidget::startSearch() search(m_ui->searchEdit->text()); } +void SearchWidget::resetSearchClearTimer() +{ + // Restart the search clear timer if it is running + if (m_clearSearchTimer->isActive()) { + m_clearSearchTimer->start(); + } +} + void SearchWidget::updateCaseSensitive() { emit caseSensitiveChanged(m_actionCaseSensitive->isChecked()); @@ -190,7 +199,7 @@ void SearchWidget::setCaseSensitive(bool state) void SearchWidget::updateLimitGroup() { - config()->set("SearchLimitGroup", m_actionLimitGroup->isChecked()); + config()->set(Config::SearchLimitGroup, m_actionLimitGroup->isChecked()); emit limitGroupChanged(m_actionLimitGroup->isChecked()); } |