diff --git a/src/librssguard/gui/dialogs/formmain.cpp b/src/librssguard/gui/dialogs/formmain.cpp index 94727d54f..9ec783449 100644 --- a/src/librssguard/gui/dialogs/formmain.cpp +++ b/src/librssguard/gui/dialogs/formmain.cpp @@ -16,6 +16,7 @@ #include "gui/messagebox.h" #include "gui/messagepreviewer.h" #include "gui/messagesview.h" +#include "gui/reusable/baselineedit.h" #include "gui/reusable/plaintoolbutton.h" #include "gui/systemtrayicon.h" #include "gui/tabbar.h" @@ -209,6 +210,8 @@ QList FormMain::allActions() const { actions << m_ui->m_actionEditSelectedItem; actions << m_ui->m_actionCopyUrlSelectedFeed; actions << m_ui->m_actionCopyUrlSelectedArticles; + actions << m_ui->m_actionFocusSearchFeeds; + actions << m_ui->m_actionFocusSearchArticles; actions << m_ui->m_actionDeleteSelectedItem; actions << m_ui->m_actionServiceAdd; actions << m_ui->m_actionServiceEdit; @@ -792,6 +795,18 @@ void FormMain::createConnections() { connect(qApp->feedReader(), &FeedReader::feedUpdatesFinished, this, &FormMain::onFeedUpdatesFinished); // Toolbar forwardings. + connect(m_ui->m_actionFocusSearchFeeds, + &QAction::triggered, + tabWidget()->feedMessageViewer()->feedsToolBar()->searchBox(), + [this]() { + tabWidget()->feedMessageViewer()->feedsToolBar()->searchBox()->setFocus(); + }); + connect(m_ui->m_actionFocusSearchArticles, + &QAction::triggered, + tabWidget()->feedMessageViewer()->messagesToolBar()->searchBox(), + [this]() { + tabWidget()->feedMessageViewer()->messagesToolBar()->searchBox()->setFocus(); + }); connect(m_ui->m_actionAddFeedIntoSelectedItem, &QAction::triggered, tabWidget()->feedMessageViewer()->feedsView(), diff --git a/src/librssguard/gui/dialogs/formmain.ui b/src/librssguard/gui/dialogs/formmain.ui index c83f1fcd2..6bb5ff49b 100644 --- a/src/librssguard/gui/dialogs/formmain.ui +++ b/src/librssguard/gui/dialogs/formmain.ui @@ -146,6 +146,8 @@ + + @@ -169,6 +171,8 @@ + + @@ -890,6 +894,16 @@ Display application &log + + + Focus feeds search box + + + + + Focus articles search box + + diff --git a/src/librssguard/gui/reusable/baselineedit.cpp b/src/librssguard/gui/reusable/baselineedit.cpp index 6cb5ab758..e5de28eba 100644 --- a/src/librssguard/gui/reusable/baselineedit.cpp +++ b/src/librssguard/gui/reusable/baselineedit.cpp @@ -14,9 +14,8 @@ BaseLineEdit::BaseLineEdit(QWidget* parent) this)) { connect(m_actShowPassword, &QAction::triggered, this, [this]() { - setEchoMode(echoMode() == QLineEdit::EchoMode::Password - ? QLineEdit::EchoMode::Normal - : QLineEdit::EchoMode::Password); + setEchoMode(echoMode() == QLineEdit::EchoMode::Password ? QLineEdit::EchoMode::Normal + : QLineEdit::EchoMode::Password); }); connect(this, &QLineEdit::textChanged, this, [this](const QString& text) { if (actions().contains(m_actShowPassword)) { @@ -48,9 +47,13 @@ void BaseLineEdit::submit(const QString& text) { } void BaseLineEdit::keyPressEvent(QKeyEvent* event) { - if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) { + if (event->key() == Qt::Key::Key_Enter || event->key() == Qt::Key::Key_Return) { emit submitted(text()); + event->accept(); + } + if (event->key() == Qt::Key::Key_Escape) { + submit(QString()); event->accept(); } diff --git a/src/librssguard/gui/toolbars/feedstoolbar.cpp b/src/librssguard/gui/toolbars/feedstoolbar.cpp index bff7e5f1c..573bf437b 100644 --- a/src/librssguard/gui/toolbars/feedstoolbar.cpp +++ b/src/librssguard/gui/toolbars/feedstoolbar.cpp @@ -93,27 +93,31 @@ void FeedsToolBar::loadSpecificActions(const QList& actions, bool init } QStringList FeedsToolBar::defaultActions() const { - return QString(GUI::FeedsToolbarActionsDef).split(',', + return QString(GUI::FeedsToolbarActionsDef) + .split(',', #if QT_VERSION >= 0x050F00 // Qt >= 5.15.0 - Qt::SplitBehaviorFlags::SkipEmptyParts); + Qt::SplitBehaviorFlags::SkipEmptyParts); #else - QString::SplitBehavior::SkipEmptyParts); + QString::SplitBehavior::SkipEmptyParts); #endif } QStringList FeedsToolBar::savedActions() const { - return qApp->settings()->value(GROUP(GUI), - SETTING(GUI::FeedsToolbarActions)).toString().split(',', + return qApp->settings() + ->value(GROUP(GUI), SETTING(GUI::FeedsToolbarActions)) + .toString() + .split(',', #if QT_VERSION >= 0x050F00 // Qt >= 5.15.0 - Qt::SplitBehaviorFlags::SkipEmptyParts); + Qt::SplitBehaviorFlags::SkipEmptyParts); #else - QString::SplitBehavior::SkipEmptyParts); + QString::SplitBehavior::SkipEmptyParts); #endif } void FeedsToolBar::initializeSearchBox() { m_txtSearchMessages = new BaseLineEdit(this); - m_txtSearchMessages->setSizePolicy(QSizePolicy::Policy::Expanding, m_txtSearchMessages->sizePolicy().verticalPolicy()); + m_txtSearchMessages->setSizePolicy(QSizePolicy::Policy::Expanding, + m_txtSearchMessages->sizePolicy().verticalPolicy()); m_txtSearchMessages->setPlaceholderText(tr("Search feeds (regex only)")); // Setup wrapping action for search box. @@ -126,3 +130,7 @@ void FeedsToolBar::initializeSearchBox() { connect(m_txtSearchMessages, &BaseLineEdit::textChanged, this, &FeedsToolBar::feedsFilterPatternChanged); } + +BaseLineEdit* FeedsToolBar::searchBox() const { + return m_txtSearchMessages; +} diff --git a/src/librssguard/gui/toolbars/feedstoolbar.h b/src/librssguard/gui/toolbars/feedstoolbar.h index b8b587c22..274c94442 100644 --- a/src/librssguard/gui/toolbars/feedstoolbar.h +++ b/src/librssguard/gui/toolbars/feedstoolbar.h @@ -22,6 +22,8 @@ class FeedsToolBar : public BaseToolBar { virtual QStringList defaultActions() const; virtual QStringList savedActions() const; + BaseLineEdit *searchBox() const; + signals: void feedsFilterPatternChanged(const QString& pattern); diff --git a/src/librssguard/gui/toolbars/messagestoolbar.cpp b/src/librssguard/gui/toolbars/messagestoolbar.cpp index 4f6287b66..6a8fd94ce 100644 --- a/src/librssguard/gui/toolbars/messagestoolbar.cpp +++ b/src/librssguard/gui/toolbars/messagestoolbar.cpp @@ -305,6 +305,10 @@ void MessagesToolBar::saveToolButtonSelection(const QString& button_name, const qApp->settings()->setValue(GROUP(GUI), GUI::MessagesToolbarDefaultButtons, action_names.join(QSL(","))); } +BaseLineEdit* MessagesToolBar::searchBox() const { + return m_txtSearchMessages; +} + void MessagesToolBar::activateAction(const QString& action_name, QWidgetAction* widget_action) { const int start = action_name.indexOf('['); const int end = action_name.indexOf(']'); diff --git a/src/librssguard/gui/toolbars/messagestoolbar.h b/src/librssguard/gui/toolbars/messagestoolbar.h index 5b8c17e9c..f2bbdaf91 100644 --- a/src/librssguard/gui/toolbars/messagestoolbar.h +++ b/src/librssguard/gui/toolbars/messagestoolbar.h @@ -28,6 +28,8 @@ class MessagesToolBar : public BaseToolBar { virtual QStringList defaultActions() const; virtual QStringList savedActions() const; + BaseLineEdit *searchBox() const; + signals: void messageSearchPatternChanged(const QString& pattern); void messageHighlighterChanged(MessagesModel::MessageHighlighter highlighter);