Skip to content

Commit cfdac14

Browse files
committed
Implement search auto-clear and goto group
* Search clears if the search box does not have focus for 5 minutes (fixes #2178) * Goto group from search results after double clicking the group name (fixes #2043)
1 parent 5914dfe commit cfdac14

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

src/gui/DatabaseWidget.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,14 @@ void DatabaseWidget::entryActivationSignalReceived(Entry* entry, EntryModel::Mod
893893
setupTotp();
894894
}
895895
break;
896+
case EntryModel::ParentGroup:
897+
// Call this first to clear out of search mode, otherwise
898+
// the desired entry is not properly selected
899+
endSearch();
900+
emit clearSearch();
901+
m_groupView->setCurrentGroup(entry->group());
902+
m_entryView->setCurrentEntry(entry);
903+
break;
896904
// TODO: switch to 'Notes' tab in details view/pane
897905
// case EntryModel::Notes:
898906
// break;

src/gui/SearchWidget.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,23 @@ SearchWidget::SearchWidget(QWidget* parent)
3333
, m_ui(new Ui::SearchWidget())
3434
, m_helpUi(new Ui::SearchHelpWidget())
3535
, m_helpWidget(new QWidget(parent))
36+
, m_searchTimer(new QTimer(this))
37+
, m_clearSearchTimer(new QTimer(this))
3638
{
3739
m_ui->setupUi(this);
3840

3941
m_helpUi->setupUi(m_helpWidget);
4042
m_helpWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
4143
m_helpWidget->hide();
4244

43-
m_searchTimer = new QTimer(this);
4445
m_searchTimer->setSingleShot(true);
46+
m_clearSearchTimer->setSingleShot(true);
4547

4648
connect(m_ui->searchEdit, SIGNAL(textChanged(QString)), SLOT(startSearchTimer()));
4749
connect(m_ui->clearIcon, SIGNAL(triggered(bool)), m_ui->searchEdit, SLOT(clear()));
4850
connect(m_ui->helpIcon, SIGNAL(triggered()), SLOT(toggleHelp()));
4951
connect(m_searchTimer, SIGNAL(timeout()), this, SLOT(startSearch()));
52+
connect(m_clearSearchTimer, SIGNAL(timeout()), m_ui->searchEdit, SLOT(clear()));
5053
connect(this, SIGNAL(escapePressed()), m_ui->searchEdit, SLOT(clear()));
5154

5255
new QShortcut(QKeySequence::Find, this, SLOT(searchFocus()), nullptr, Qt::ApplicationShortcut);
@@ -107,6 +110,10 @@ bool SearchWidget::eventFilter(QObject* obj, QEvent* event)
107110
}
108111
} else if (event->type() == QEvent::FocusOut) {
109112
m_helpWidget->hide();
113+
// Auto-clear search after 5 minutes
114+
m_clearSearchTimer->start(300000);
115+
} else if (event->type() == QEvent::FocusIn) {
116+
m_clearSearchTimer->stop();
110117
}
111118

112119
return QWidget::eventFilter(obj, event);

src/gui/SearchWidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ private slots:
7979
const QScopedPointer<Ui::SearchHelpWidget> m_helpUi;
8080
QWidget* m_helpWidget;
8181
QTimer* m_searchTimer;
82+
QTimer* m_clearSearchTimer;
8283
QAction* m_actionCaseSensitive;
8384
QAction* m_actionLimitGroup;
8485
};

0 commit comments

Comments
 (0)