diff options
| author | Mike Skec <skec@protonmail.ch> | 2021-02-09 17:49:07 +1100 |
|---|---|---|
| committer | Felix Queißner <felix@ib-queissner.de> | 2021-02-09 10:18:41 +0100 |
| commit | 0843ee2dada57255c29425f7b598ab3b258e4641 (patch) | |
| tree | 053f28868aec5901c8bf1a7aa0a5401d442a3987 /src | |
| parent | 70c71e7a0ee3f2c446551fc15af06136861e10e7 (diff) | |
| download | kristall-0843ee2dada57255c29425f7b598ab3b258e4641.tar.gz | |
Search box: better reimplementation
This was necessary to fix a bug, where the URL bar becomes unusable while search box is visible.
Diffstat (limited to 'src')
| -rw-r--r-- | src/browsertab.cpp | 27 | ||||
| -rw-r--r-- | src/browsertab.ui | 7 | ||||
| -rw-r--r-- | src/kristall.pro | 6 | ||||
| -rw-r--r-- | src/widgets/searchbox.cpp | 31 | ||||
| -rw-r--r-- | src/widgets/searchbox.hpp | 20 |
5 files changed, 76 insertions, 15 deletions
diff --git a/src/browsertab.cpp b/src/browsertab.cpp index 2af2bb0..8cc30a8 100644 --- a/src/browsertab.cpp +++ b/src/browsertab.cpp @@ -22,6 +22,7 @@ #include "ioutil.hpp" #include "kristall.hpp" #include "widgets/favouritepopup.hpp" +#include "widgets/searchbox.hpp" #include <cassert> #include <QTabWidget> @@ -106,16 +107,8 @@ BrowserTab::BrowserTab(MainWindow *mainWindow) : QWidget(nullptr), connect(sc, &QShortcut::activated, this, &BrowserTab::on_refresh_button_clicked); } { - QShortcut * sc0 = new QShortcut(QKeySequence("Return"), this), - *sc1 = new QShortcut(QKeySequence("F3"), this); - connect(sc0, &QShortcut::activated, this, &BrowserTab::on_search_next_clicked); - connect(sc1, &QShortcut::activated, this, &BrowserTab::on_search_next_clicked); - } - { - QShortcut * sc0 = new QShortcut(QKeySequence("Shift+Return"), this), - *sc1 = new QShortcut(QKeySequence("Shift+F3"), this); - connect(sc0, &QShortcut::activated, this, &BrowserTab::on_search_previous_clicked); - connect(sc1, &QShortcut::activated, this, &BrowserTab::on_search_previous_clicked); + connect(this->ui->search_box, &SearchBox::searchNext, this, &BrowserTab::on_search_next_clicked); + connect(this->ui->search_box, &SearchBox::searchPrev, this, &BrowserTab::on_search_previous_clicked); } { QShortcut * sc = new QShortcut(QKeySequence("Escape"), this->ui->search_bar); @@ -1635,12 +1628,22 @@ void BrowserTab::on_search_box_returnPressed() void BrowserTab::on_search_next_clicked() { - this->ui->text_browser->find(this->ui->search_box->text()); + if (!this->ui->text_browser->find(this->ui->search_box->text())) + { + // Wrap search + this->ui->text_browser->moveCursor(QTextCursor::Start); + this->ui->text_browser->find(this->ui->search_box->text()); + } } void BrowserTab::on_search_previous_clicked() { - this->ui->text_browser->find(this->ui->search_box->text(), QTextDocument::FindBackward); + if (!this->ui->text_browser->find(this->ui->search_box->text(), QTextDocument::FindBackward)) + { + // Wrap search + this->ui->text_browser->moveCursor(QTextCursor::End); + this->ui->text_browser->find(this->ui->search_box->text(), QTextDocument::FindBackward); + } } void BrowserTab::on_close_search_clicked() diff --git a/src/browsertab.ui b/src/browsertab.ui index 105ca41..8454735 100644 --- a/src/browsertab.ui +++ b/src/browsertab.ui @@ -227,7 +227,7 @@ p, li { white-space: pre-wrap; } <number>0</number> </property> <item> - <widget class="QLineEdit" name="search_box"/> + <widget class="SearchBox" name="search_box"/> </item> <item> <widget class="QToolButton" name="search_previous"> @@ -297,6 +297,11 @@ p, li { white-space: pre-wrap; } <extends>QToolButton</extends> <header>widgets/favouritebutton.hpp</header> </customwidget> + <customwidget> + <class>SearchBox</class> + <extends>QLineEdit</extends> + <header>widgets/searchbox.hpp</header> + </customwidget> </customwidgets> <resources> <include location="icons.qrc"/> diff --git a/src/kristall.pro b/src/kristall.pro index d118128..85ea511 100644 --- a/src/kristall.pro +++ b/src/kristall.pro @@ -121,7 +121,8 @@ SOURCES += \ widgets/ssltrusteditor.cpp \ widgets/favouritepopup.cpp \ widgets/favouritebutton.cpp \ - cachehandler.cpp + cachehandler.cpp \ + widgets/searchbox.cpp HEADERS += \ ../lib/luis-l-gist/interactiveview.hpp \ @@ -167,7 +168,8 @@ HEADERS += \ widgets/ssltrusteditor.hpp \ widgets/favouritepopup.hpp \ widgets/favouritebutton.hpp \ - cachehandler.hpp + cachehandler.hpp \ + widgets/searchbox.hpp FORMS += \ browsertab.ui \ diff --git a/src/widgets/searchbox.cpp b/src/widgets/searchbox.cpp new file mode 100644 index 0000000..67e48f9 --- /dev/null +++ b/src/widgets/searchbox.cpp @@ -0,0 +1,31 @@ +#include "searchbox.hpp" + +#include <QKeyEvent> +#include <QDebug> + +SearchBox::SearchBox(QWidget * parent) : QLineEdit(parent) +{} + +void SearchBox::keyPressEvent(QKeyEvent *event) +{ + if(event->key() == Qt::Key_Return || event->key() == Qt::Key_F3) { + if (event->modifiers() == Qt::ShiftModifier) { + emit searchPrev(); + } + else { + emit searchNext(); + } + } else { + QLineEdit::keyPressEvent(event); + } +} + +void SearchBox::keyReleaseEvent(QKeyEvent *event) +{ + if(event->key() == Qt::Key_Return) { + // Eat the event + } else { + QLineEdit::keyReleaseEvent(event); + } +} + diff --git a/src/widgets/searchbox.hpp b/src/widgets/searchbox.hpp new file mode 100644 index 0000000..fe589ff --- /dev/null +++ b/src/widgets/searchbox.hpp @@ -0,0 +1,20 @@ +#ifndef SEARCHBOX_HPP +#define SEARCHBOX_HPP + +#include <QLineEdit> + +class SearchBox : public QLineEdit +{ + Q_OBJECT +public: + explicit SearchBox(QWidget *parent = nullptr); + +signals: + void searchNext(); + void searchPrev(); +public: + void keyPressEvent(QKeyEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; +}; + +#endif // SEARCHBOX_HPP |
