aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Skec <skec@protonmail.ch>2021-02-09 17:49:07 +1100
committerFelix Queißner <felix@ib-queissner.de>2021-02-09 10:18:41 +0100
commit0843ee2dada57255c29425f7b598ab3b258e4641 (patch)
tree053f28868aec5901c8bf1a7aa0a5401d442a3987 /src
parent70c71e7a0ee3f2c446551fc15af06136861e10e7 (diff)
downloadkristall-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.cpp27
-rw-r--r--src/browsertab.ui7
-rw-r--r--src/kristall.pro6
-rw-r--r--src/widgets/searchbox.cpp31
-rw-r--r--src/widgets/searchbox.hpp20
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