aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2017-12-21 12:13:04 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2017-12-21 12:13:04 +0100
commite95965843d1d1ecc72dfc22c59d47bf5caa11756 (patch)
tree738abb9ec465b9272da29cbea57ec638e207e369
parentBug fixes (diff)
downloadsmolbote-e95965843d1d1ecc72dfc22c59d47bf5caa11756.tar.xz
Added Search Box
-rw-r--r--BUGS.md38
-rw-r--r--data/poi.cfg3
-rw-r--r--smolbote.qbs3
-rw-r--r--src/forms/searchform.cpp56
-rw-r--r--src/forms/searchform.h34
-rw-r--r--src/forms/searchform.ui44
-rw-r--r--src/mainwindow.cpp7
-rw-r--r--src/mainwindow.h5
8 files changed, 184 insertions, 6 deletions
diff --git a/BUGS.md b/BUGS.md
index 40857ee..21afdad 100644
--- a/BUGS.md
+++ b/BUGS.md
@@ -4,18 +4,46 @@
How to reproduce: enter an address into the address bar, load the page, crash on exit
- crash is somewhere in Qt code?
-### MainWindow doesn't save size on close
-
-### Close tab shortcut doesn't work
-
### Search terms in address bar
-QUrl always seems to return true when checking if valid url
+QUrl always seems to return true when checking if valid url. Workaround is to prepend '#'
+to the search.
### databases-incognito in home
Folder is empty.
## To do list
+List of things to do before 1.0 release
### Search function
+- add QLineEdit to status bar and show/hide with F3
+- add shortcut to clear search box?
+- on return --> currentView should highlight text
+- get information on number of matches
### Instance check on startup
+
+### Auto-destruct cookies
+- cookie whitelist and blacklist
+
+### Adblocker
+- adblocker load list (.config/smolbote/filter.d/**.txt)
+
+### No Script
+- there's already a profile setting to disable scripts
+- check if it applies to OTR
+
+### Deny URI Leaks
+Deny 'resource://' to prevent website fingerprinting
+
+### Deny mouse information
+
+### Settings dialog
+- show settings dialog on startup if config was auto-generated
+
+### Bookmarks
+- review code
+
+### Downloads
+- review code
+- possibly split off into a dialog window
+- properly show download item information
diff --git a/data/poi.cfg b/data/poi.cfg
index 0ec54f3..bf8a022 100644
--- a/data/poi.cfg
+++ b/data/poi.cfg
@@ -29,7 +29,8 @@ browser = {
newTab = "Ctrl+T";
about = "F1";
quit = "Ctrl+Q";
-
+
+ toggleSearchBox = "F3";
focusAddress = "F4";
fullscreen = "F11";
diff --git a/smolbote.qbs b/smolbote.qbs
index 9b9ecb1..92f159f 100644
--- a/smolbote.qbs
+++ b/smolbote.qbs
@@ -102,6 +102,9 @@ Project {
"src/forms/aboutdialog.cpp",
"src/forms/aboutdialog.h",
"src/forms/aboutdialog.ui",
+ "src/forms/searchform.cpp",
+ "src/forms/searchform.h",
+ "src/forms/searchform.ui",
"src/webengine/webpage.cpp",
"src/webengine/webpage.h",
"src/webengine/webview.cpp",
diff --git a/src/forms/searchform.cpp b/src/forms/searchform.cpp
new file mode 100644
index 0000000..0e5161f
--- /dev/null
+++ b/src/forms/searchform.cpp
@@ -0,0 +1,56 @@
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: git://neueland.iserlohn-fortress.net/smolbote.git
+ *
+ * SPDX-License-Identifier: GPL-3.0
+ */
+
+#include "searchform.h"
+#include "ui_searchform.h"
+#include "../mainwindow.h"
+
+#include <QFlags>
+#include <settings/configuration.h>
+
+SearchForm::SearchForm(MainWindow *parentWindow, QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::SearchForm)
+{
+ Q_CHECK_PTR(parentWindow);
+
+ ui->setupUi(this);
+ ui->lineEdit->setPlaceholderText(tr("Search"));
+ ui->lineEdit->setClearButtonEnabled(true);
+
+ // show/hide action
+ QAction *toggleSearchBox = new QAction(this);
+ toggleSearchBox->setShortcut(QKeySequence(QString::fromStdString(parentWindow->m_config->value<std::string>("browser.shortcuts.toggleSearchBox").value())));
+ connect(toggleSearchBox, &QAction::triggered, this, [this]() {
+ if(isVisible()) {
+ setVisible(false);
+ } else {
+ setVisible(true);
+ setFocus();
+ }
+ });
+ parentWindow->addAction(toggleSearchBox);
+
+ connect(ui->lineEdit, &QLineEdit::returnPressed, this, [this, parentWindow]() {
+ QWebEnginePage::FindFlags searchFlags;
+ searchFlags.setFlag(QWebEnginePage::FindCaseSensitively, ui->caseSensitivity_checkBox->isChecked());
+ searchFlags.setFlag(QWebEnginePage::FindBackward, ui->reverseSearch_checkBox->isChecked());
+ parentWindow->m_currentView->findText(ui->lineEdit->text(), searchFlags);
+ });
+}
+
+SearchForm::~SearchForm()
+{
+ delete ui;
+}
+
+void SearchForm::focusInEvent(QFocusEvent *e)
+{
+ ui->lineEdit->setFocus();
+ QWidget::focusInEvent(e);
+}
diff --git a/src/forms/searchform.h b/src/forms/searchform.h
new file mode 100644
index 0000000..646d4d4
--- /dev/null
+++ b/src/forms/searchform.h
@@ -0,0 +1,34 @@
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: git://neueland.iserlohn-fortress.net/smolbote.git
+ *
+ * SPDX-License-Identifier: GPL-3.0
+ */
+
+#ifndef SEARCHFORM_H
+#define SEARCHFORM_H
+
+#include <QWidget>
+
+namespace Ui {
+class SearchForm;
+}
+
+class MainWindow;
+class SearchForm : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit SearchForm(MainWindow *parentWindow, QWidget *parent = nullptr);
+ ~SearchForm();
+
+protected:
+ void focusInEvent(QFocusEvent *e);
+
+private:
+ Ui::SearchForm *ui;
+};
+
+#endif // SEARCHFORM_H
diff --git a/src/forms/searchform.ui b/src/forms/searchform.ui
new file mode 100644
index 0000000..2b0c551
--- /dev/null
+++ b/src/forms/searchform.ui
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SearchForm</class>
+ <widget class="QWidget" name="SearchForm">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>550</width>
+ <height>26</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLineEdit" name="lineEdit"/>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="caseSensitivity_checkBox">
+ <property name="text">
+ <string>Case Sensitive</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="reverseSearch_checkBox">
+ <property name="text">
+ <string>Search Backwards</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 3546f83..5c3048c 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -29,6 +29,8 @@
#include <navigation/urllineedit.h>
+#include "forms/searchform.h"
+
MainWindow::MainWindow(std::shared_ptr<Configuration> config, QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
@@ -101,6 +103,11 @@ MainWindow::MainWindow(std::shared_ptr<Configuration> config, QWidget *parent) :
// loading bar
ui->statusBar->addPermanentWidget(m_progressBar);
+ // search box
+ m_searchBox = new SearchForm(this);
+ ui->statusBar->addWidget(m_searchBox);
+ m_searchBox->setVisible(false);
+
// shortcuts
QAction *focusAddressAction = new QAction(this);
focusAddressAction->setShortcut(QKeySequence(QString::fromStdString(m_config->value<std::string>("browser.shortcuts.focusAddress").value())));
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 31a3d2f..7f5686f 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -23,6 +23,8 @@ namespace Ui {
class MainWindow;
}
+class SearchForm;
+
class Configuration;
class BookmarksWidget;
class DownloadsWidget;
@@ -35,6 +37,7 @@ class MainWindow : public QMainWindow
Q_OBJECT
friend class WebView;
+ friend class SearchForm;
public:
MainWindow(std::shared_ptr<Configuration> config, QWidget *parent = nullptr);
@@ -69,6 +72,8 @@ private:
Q_DISABLE_COPY(MainWindow)
Ui::MainWindow *ui;
+ SearchForm *m_searchBox;
+
MainWindowTabBar *tabBar;
WebView *m_currentView;