Add a small delay before processing the key input of search boxes

PR #20465.
Closes #20025.
Closes #20235.
This commit is contained in:
Chocobo1
2024-02-27 12:57:55 +08:00
committed by GitHub
parent 46e8ee50c8
commit 15697f904d
14 changed files with 87 additions and 50 deletions

View File

@@ -33,6 +33,7 @@
#include <functional>
#include <QAction>
#include <QByteArray>
#include <QDateTime>
#include <QDebug>
#include <QDir>
@@ -41,6 +42,7 @@
#include <QMessageBox>
#include <QPushButton>
#include <QShortcut>
#include <QSize>
#include <QString>
#include <QUrl>
#include <QVector>

View File

@@ -38,13 +38,13 @@
#include "base/path.h"
#include "base/settingvalue.h"
class LineEdit;
namespace Ui
{
class AddNewTorrentDialog;
}
class LineEdit;
class AddNewTorrentDialog final : public QDialog
{
Q_OBJECT

View File

@@ -29,20 +29,41 @@
#include "lineedit.h"
#include <chrono>
#include <QAction>
#include <QKeyEvent>
#include <QTimer>
#include "base/global.h"
#include "uithememanager.h"
using namespace std::chrono_literals;
namespace
{
const std::chrono::milliseconds FILTER_INPUT_DELAY {400};
}
LineEdit::LineEdit(QWidget *parent)
: QLineEdit(parent)
, m_delayedTextChangedTimer {new QTimer(this)}
{
auto *action = new QAction(UIThemeManager::instance()->getIcon(u"edit-find"_s), QString(), this);
addAction(action, QLineEdit::LeadingPosition);
setClearButtonEnabled(true);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
m_delayedTextChangedTimer->setSingleShot(true);
connect(m_delayedTextChangedTimer, &QTimer::timeout, this, [this]
{
emit textChanged(text());
});
connect(this, &QLineEdit::textChanged, this, [this]
{
m_delayedTextChangedTimer->start(FILTER_INPUT_DELAY);
});
}
void LineEdit::keyPressEvent(QKeyEvent *event)

View File

@@ -31,6 +31,9 @@
#include <QLineEdit>
class QKeyEvent;
class QTimer;
class LineEdit final : public QLineEdit
{
Q_OBJECT
@@ -39,6 +42,11 @@ class LineEdit final : public QLineEdit
public:
explicit LineEdit(QWidget *parent = nullptr);
signals:
void textChanged(const QString &text);
private:
void keyPressEvent(QKeyEvent *event) override;
QTimer *m_delayedTextChangedTimer = nullptr;
};

View File

@@ -54,6 +54,7 @@
#include <QShortcut>
#include <QSplitter>
#include <QStatusBar>
#include <QString>
#include <QTimer>
#include "base/bittorrent/session.h"

View File

@@ -42,6 +42,7 @@ class QCloseEvent;
class QComboBox;
class QFileSystemWatcher;
class QSplitter;
class QString;
class QTabWidget;
class QTimer;

View File

@@ -126,9 +126,9 @@ SearchJobWidget::SearchJobWidget(SearchHandler *searchHandler, IGUIApplication *
m_lineEditSearchResultsFilter->setPlaceholderText(tr("Filter search results..."));
m_lineEditSearchResultsFilter->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_lineEditSearchResultsFilter, &QWidget::customContextMenuRequested, this, &SearchJobWidget::showFilterContextMenu);
connect(m_lineEditSearchResultsFilter, &LineEdit::textChanged, this, &SearchJobWidget::filterSearchResults);
m_ui->horizontalLayout->insertWidget(0, m_lineEditSearchResultsFilter);
connect(m_lineEditSearchResultsFilter, &LineEdit::textChanged, this, &SearchJobWidget::filterSearchResults);
connect(m_ui->filterMode, qOverload<int>(&QComboBox::currentIndexChanged)
, this, &SearchJobWidget::updateFilter);
connect(m_ui->minSeeds, &QAbstractSpinBox::editingFinished, this, &SearchJobWidget::updateFilter);