diff --git a/src/gui/SearchWidget.cpp b/src/gui/SearchWidget.cpp index 023948d7..4ac01b3f 100644 --- a/src/gui/SearchWidget.cpp +++ b/src/gui/SearchWidget.cpp @@ -34,7 +34,9 @@ SearchWidget::SearchWidget(QWidget *parent) m_searchTimer->setSingleShot(true); connect(m_ui->searchEdit, SIGNAL(textChanged(QString)), SLOT(startSearchTimer())); - connect(m_ui->searchIcon, SIGNAL(triggered(QAction*)), m_ui->searchEdit, SLOT(setFocus())); + connect(m_ui->searchIcon, SIGNAL(pressed()), m_ui->searchEdit, SLOT(setFocus())); + connect(m_ui->clearIcon, SIGNAL(pressed()), m_ui->searchEdit, SLOT(clear())); + connect(m_ui->clearIcon, SIGNAL(pressed()), m_ui->searchEdit, SLOT(setFocus())); connect(m_searchTimer, SIGNAL(timeout()), this, SLOT(startSearch())); connect(this, SIGNAL(escapePressed()), m_ui->searchEdit, SLOT(clear())); @@ -50,6 +52,9 @@ SearchWidget::SearchWidget(QWidget *parent) m_ui->searchIcon->setIcon(filePath()->icon("actions", "system-search")); m_ui->searchIcon->setMenu(searchMenu); m_ui->searchIcon->setPopupMode(QToolButton::MenuButtonPopup); + + m_ui->clearIcon->setIcon(filePath()->icon("actions", "edit-clear-locationbar-rtl")); + m_ui->clearIcon->setEnabled(false); } SearchWidget::~SearchWidget() @@ -126,6 +131,9 @@ void SearchWidget::startSearch() m_searchTimer->stop(); } + bool hasText = m_ui->searchEdit->text().length() > 0; + m_ui->clearIcon->setEnabled(hasText); + search(m_ui->searchEdit->text()); } diff --git a/src/gui/SearchWidget.ui b/src/gui/SearchWidget.ui index a75642e1..46c2699f 100644 --- a/src/gui/SearchWidget.ui +++ b/src/gui/SearchWidget.ui @@ -54,6 +54,22 @@ Find + false + + + + + + + Qt::ClickFocus + + + Clear + + + Qt::ToolButtonIconOnly + + true diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 45c1a271..c23226a2 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -401,7 +401,13 @@ void TestGui::testSearch() QTRY_COMPARE(searchTextEdit->text(), QString("ZZZ")); QTRY_VERIFY(m_dbWidget->isInSearchMode()); QTRY_COMPARE(entryView->model()->rowCount(), 0); + // Press the search clear button + QToolButton* clearButton = searchWidget->findChild("clearIcon"); + QTest::mouseClick(clearButton, Qt::LeftButton); + QTRY_VERIFY(searchTextEdit->text().isEmpty()); + QTRY_VERIFY(searchTextEdit->hasFocus()); // Escape clears searchedit and retains focus + QTest::keyClicks(searchTextEdit, "ZZZ"); QTest::keyClick(searchTextEdit, Qt::Key_Escape); QTRY_VERIFY(searchTextEdit->text().isEmpty()); QTRY_VERIFY(searchTextEdit->hasFocus());