diff options
-rw-r--r-- | BUGS.md | 38 | ||||
-rw-r--r-- | data/poi.cfg | 3 | ||||
-rw-r--r-- | smolbote.qbs | 3 | ||||
-rw-r--r-- | src/forms/searchform.cpp | 56 | ||||
-rw-r--r-- | src/forms/searchform.h | 34 | ||||
-rw-r--r-- | src/forms/searchform.ui | 44 | ||||
-rw-r--r-- | src/mainwindow.cpp | 7 | ||||
-rw-r--r-- | src/mainwindow.h | 5 |
8 files changed, 184 insertions, 6 deletions
@@ -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; |