From 1bc3c311551d53759ffdfb11904c45f1cc2f91ce Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Fri, 26 Jan 2018 00:41:09 +0100 Subject: UrlLineEdit rework - moved UrlLineEdit to src/addressbar - added UrlLineEdit::connectWebView - removed UrlLineEdit::pageAction - UrlLineEdit restores the text format when losing focus - Split off completer code into Completer class - WebPage now displays a warning message box instead on certificate errors --- CMakeLists.txt | 12 ++- lib/navigation/CMakeLists.txt | 7 -- lib/navigation/urllineedit.cpp | 195 ----------------------------------------- lib/navigation/urllineedit.h | 62 ------------- src/addressbar/completer.cpp | 74 ++++++++++++++++ src/addressbar/completer.h | 33 +++++++ src/addressbar/urllineedit.cpp | 168 +++++++++++++++++++++++++++++++++++ src/addressbar/urllineedit.h | 65 ++++++++++++++ src/mainwindow/mainwindow.cpp | 6 +- src/webengine/webpage.cpp | 9 +- src/webengine/webpage.h | 3 - src/webengine/webview.cpp | 8 +- src/webengine/webview.h | 1 - 13 files changed, 358 insertions(+), 285 deletions(-) delete mode 100644 lib/navigation/CMakeLists.txt delete mode 100644 lib/navigation/urllineedit.cpp delete mode 100644 lib/navigation/urllineedit.h create mode 100644 src/addressbar/completer.cpp create mode 100644 src/addressbar/completer.h create mode 100644 src/addressbar/urllineedit.cpp create mode 100644 src/addressbar/urllineedit.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0147a9f..0d1491f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,6 @@ endif (UseLibCpp) add_subdirectory(lib/settings) add_subdirectory(lib/bookmarks) add_subdirectory(lib/downloads) -add_subdirectory(lib/navigation) add_subdirectory(plugins/ProfileEditor) @@ -81,6 +80,12 @@ set(SourceCode src/mainwindow/widgets/searchform.h src/mainwindow/widgets/searchform.ui + # address bar + src/addressbar/completer.cpp + src/addressbar/completer.h + src/addressbar/urllineedit.cpp + src/addressbar/urllineedit.h + # todo: move all to src/mainwindow "src/widgets/mainwindowmenubar.cpp" "src/widgets/mainwindowmenubar.h" @@ -109,8 +114,7 @@ set(SourceCode "src/forms/cookiesform.ui" # plugin interfaces - plugins/interfaces.h - ) + plugins/interfaces.h) add_executable(poi ${SourceCode}) @@ -120,6 +124,6 @@ target_include_directories(poi target_link_libraries(poi Qt5::Core Qt5::Widgets Qt5::Concurrent Qt5::WebEngineWidgets) target_link_libraries(poi configuration) -target_link_libraries(poi bookmarks downloads navigation) +target_link_libraries(poi bookmarks downloads) install(TARGETS poi RUNTIME DESTINATION bin CONFIGURATIONS Release) diff --git a/lib/navigation/CMakeLists.txt b/lib/navigation/CMakeLists.txt deleted file mode 100644 index 4f0208b..0000000 --- a/lib/navigation/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -cmake_minimum_required(VERSION 3.1.0) - -add_library(navigation - urllineedit.cpp - urllineedit.h) - -target_link_libraries(navigation Qt5::Widgets Qt5::WebEngineWidgets) diff --git a/lib/navigation/urllineedit.cpp b/lib/navigation/urllineedit.cpp deleted file mode 100644 index fdbfc63..0000000 --- a/lib/navigation/urllineedit.cpp +++ /dev/null @@ -1,195 +0,0 @@ -/* - * 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: https://neueland.iserlohn-fortress.net/smolbote.hg - * - * SPDX-License-Identifier: GPL-3.0 - */ - -#include "urllineedit.h" -#include -#include -#include -#include - -// ssl menu -#include - -// completer -#include -#include - -UrlLineEdit::UrlLineEdit(QWidget *parent) - : QLineEdit(parent) - , m_listView(new QListView(this)) -{ - setPlaceholderText(tr("Enter address")); - - m_listView->setWindowFlags(Qt::ToolTip); - m_listView->setVisible(false); - connect(this, &UrlLineEdit::textEdited, this, &UrlLineEdit::updateCompleter); - - // ssl menu - m_sslMenu = new QMenu(this); - m_sslLabel = new QLabel(m_sslMenu); - QWidgetAction *sslErrorAction = new QWidgetAction(m_sslMenu); - sslErrorAction->setDefaultWidget(m_sslLabel); - m_sslMenu->addAction(sslErrorAction); - - m_sslAction = addAction(style()->standardIcon(QStyle::SP_DriveNetIcon), QLineEdit::LeadingPosition); - m_sslAction->setToolTip(tr("TODO: Display SSL Status popup here")); - m_sslAction->setMenu(m_sslMenu); - - connect(m_sslAction, &QAction::triggered, this, [this]() { - m_sslMenu->exec(this->mapToGlobal(QPoint(0, height()))); - }); - - m_pageAction = addAction(style()->standardIcon(QStyle::SP_FileIcon), QLineEdit::TrailingPosition); - m_pageAction->setShortcut(QKeySequence("F10")); - m_pageAction->setToolTip(tr("Page Actions")); - connect(m_pageAction, &QAction::triggered, m_pageAction, [&]() { - //this->deselect(); - if(m_pageAction->menu() != nullptr) { - m_pageAction->menu()->exec(this->mapToGlobal(QPoint(width(), height()))); - } - }); - - QTextCharFormat hostnameFormat; - hostnameFormat.setFontWeight(QFont::Bold); - m_hostFormat.format = hostnameFormat; - - // connect signals - connect(this, &QLineEdit::returnPressed, [this]() { - if(this->text().startsWith('#')) { - emit searchTermEntered(this->text().mid(1)); - } else { - emit addressEntered(QUrl::fromUserInput(this->text())); - } - this->clearFocus(); - }); -} - -QAction *UrlLineEdit::pageAction() -{ - Q_CHECK_PTR(m_pageAction); - return m_pageAction; -} - -void UrlLineEdit::setCompleterModel(QAbstractItemModel *model) -{ - Q_CHECK_PTR(model); - m_bookmarksModel = model; -} - -void UrlLineEdit::setUrl(const QUrl &url) -{ - QString urlText = url.toString(); - QString domain = url.host(); - - m_hostFormat.start = urlText.indexOf(domain); - m_hostFormat.length = domain.length(); - - clear(); - clearTextFormat(); - setTextFormat(m_hostFormat); - setText(urlText); -} - -void UrlLineEdit::showSslError(const QString &message) -{ - m_sslLabel->setText(message); - m_sslAction->trigger(); -} - -void UrlLineEdit::updateCompleter(const QString &text) -{ - if(m_bookmarksModel == nullptr) { - return; - } - - const QModelIndexList res = m_bookmarksModel->match(QModelIndex(), Qt::EditRole, text, 7); - if(res.isEmpty()) { - m_listView->hide(); - return; - } - - QStringList l; - for(const QModelIndex &idx : res) { - l.append(idx.data(Qt::EditRole).toString()); - } - - auto *m = new QStringListModel(l, this); - - m_listView->setModel(m); - - // positioning - m_listView->setFixedWidth(width()); - m_listView->move(mapToGlobal(QPoint(0, height()))); - m_listView->show(); -} - -void UrlLineEdit::focusInEvent(QFocusEvent *event) -{ - clearTextFormat(); - - QLineEdit::focusInEvent(event); - - // select the contents when receiving focus - // http://stackoverflow.com/a/35725950/1054406 - // mousePressEvent triggers right after focusInEvent so text selected in focusInEvent unselects by mousePressEvent - //QTimer::singleShot(0, this, SLOT(selectAll())); -} - -void UrlLineEdit::keyPressEvent(QKeyEvent *event) -{ - if(!m_listView->isHidden()) { - int key = event->key(); - int count = m_listView->model()->rowCount(); - QModelIndex currentIndex = m_listView->currentIndex(); - - switch(key) { - case Qt::Key_Down: - if(currentIndex.row() + 1 >= count) { - m_listView->setCurrentIndex(m_listView->model()->index(0, 0)); - } else { - m_listView->setCurrentIndex(m_listView->model()->index(currentIndex.row() + 1, 0)); - } - break; - case Qt::Key_Up: - if(currentIndex.row() == 0) { - m_listView->setCurrentIndex(m_listView->model()->index(count - 1, 0)); - } else { - m_listView->setCurrentIndex(m_listView->model()->index(currentIndex.row() - 1, 0)); - } - break; - - case Qt::Key_Enter: - case Qt::Key_Return: - if(currentIndex.isValid()) { - setText(currentIndex.data().toString()); - } - m_listView->hide(); - return; - case Qt::Key_Escape: - m_listView->hide(); - break; - default: - break; - } - } - QLineEdit::keyPressEvent(event); -} - -// formatting taken from: https://forum.qt.io/topic/60962/setting-qlineedit-text-bold -void UrlLineEdit::setTextFormat(const QTextLayout::FormatRange &format) -{ - QList attributes; - attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, format.start, format.length, format.format)); - QInputMethodEvent ev(QString(), attributes); - event(&ev); -} - -void UrlLineEdit::clearTextFormat() -{ - setTextFormat(QTextLayout::FormatRange()); -} diff --git a/lib/navigation/urllineedit.h b/lib/navigation/urllineedit.h deleted file mode 100644 index 2d2a267..0000000 --- a/lib/navigation/urllineedit.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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: https://neueland.iserlohn-fortress.net/smolbote.hg - * - * SPDX-License-Identifier: GPL-3.0 - */ - -#ifndef URLLINEEDIT_H -#define URLLINEEDIT_H - -#include -#include -#include - -class QAbstractItemModel; -class QMenu; -class QLabel; -class QListView; -class UrlLineEdit : public QLineEdit -{ - Q_OBJECT -public: - explicit UrlLineEdit(QWidget *parent = nullptr); - - QAction *pageAction(); - - void setCompleterModel(QAbstractItemModel *model); - -signals: - void addressEntered(const QUrl &url); - void searchTermEntered(const QString &term); - -public slots: - void setUrl(const QUrl &url); - void showSslError(const QString &message); - - void updateCompleter(const QString &text); - -protected: - void focusInEvent(QFocusEvent *event); - void keyPressEvent(QKeyEvent *event); - -private: - void setTextFormat(const QTextLayout::FormatRange &format); - void clearTextFormat(); - - QTextLayout::FormatRange m_hostFormat; - - QAction *m_sslAction = nullptr; - QAction *m_pageAction = nullptr; - - // ssl menu - QMenu *m_sslMenu; - QLabel *m_sslLabel; - - // completer - QAbstractItemModel *m_bookmarksModel = nullptr; - QListView *m_listView; -}; - -#endif // URLLINEEDIT_H diff --git a/src/addressbar/completer.cpp b/src/addressbar/completer.cpp new file mode 100644 index 0000000..4c95bce --- /dev/null +++ b/src/addressbar/completer.cpp @@ -0,0 +1,74 @@ +/* + * 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: https://neueland.iserlohn-fortress.net/smolbote.hg + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "completer.h" +#include + +Completer::Completer(QWidget *parent) + : QListView(parent) +{ + setWindowFlags(Qt::ToolTip); +} + +bool Completer::updateItems(const QModelIndexList &list) +{ + if(list.isEmpty()) + return false; + + // list is not empty + QStringList l; + for(const QModelIndex &idx : list) { + l.append(idx.data(Qt::EditRole).toString()); + } + + auto *model = new QStringListModel(l, this); + setModel(model); + + delete completionModel; + completionModel = model; + + return true; +} + +bool Completer::keyPressed(QKeyEvent *event) +{ + if(isHidden()) + return false; + + Q_CHECK_PTR(completionModel); + + int count = completionModel->rowCount(); + const QModelIndex currentIndex = this->currentIndex(); + + switch(event->key()) { + case Qt::Key_Down: + if(currentIndex.row() + 1 >= count) { + setCurrentIndex(completionModel->index(0, 0)); + } else { + setCurrentIndex(completionModel->index(currentIndex.row() + 1, 0)); + } + break; + + case Qt::Key_Up: + if(currentIndex.row() == 0) { + setCurrentIndex(completionModel->index(count - 1, 0)); + } else { + setCurrentIndex(completionModel->index(currentIndex.row() - 1, 0)); + } + break; + + case Qt::Key_Escape: + hide(); + break; + + default: + break; + } + + return true; +} diff --git a/src/addressbar/completer.h b/src/addressbar/completer.h new file mode 100644 index 0000000..adf5d8e --- /dev/null +++ b/src/addressbar/completer.h @@ -0,0 +1,33 @@ +/* + * 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: https://neueland.iserlohn-fortress.net/smolbote.hg + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#ifndef SMOLBOTE_COMPLETER_H +#define SMOLBOTE_COMPLETER_H + +#include +#include + +class Completer : public QListView +{ + + Q_OBJECT + +public: + explicit Completer(QWidget *parent = nullptr); + + bool updateItems(const QModelIndexList &list); + + bool keyPressed(QKeyEvent *event); + +private: + QStringListModel *completionModel; + +}; + + +#endif //SMOLBOTE_COMPLETER_H diff --git a/src/addressbar/urllineedit.cpp b/src/addressbar/urllineedit.cpp new file mode 100644 index 0000000..d34fdcb --- /dev/null +++ b/src/addressbar/urllineedit.cpp @@ -0,0 +1,168 @@ +/* + * 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: https://neueland.iserlohn-fortress.net/smolbote.hg + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "urllineedit.h" +#include +#include +#include + +UrlLineEdit::UrlLineEdit(QWidget *parent) + : QLineEdit(parent) + , m_listView(new Completer(this)) +{ + setPlaceholderText(tr("Enter address")); + + m_listView->setVisible(false); + connect(this, &UrlLineEdit::textEdited, this, &UrlLineEdit::updateCompleter); + + // ssl menu + m_sslMenu = new QMenu(this); + m_sslLabel = new QLabel(m_sslMenu); + QWidgetAction *sslErrorAction = new QWidgetAction(m_sslMenu); + sslErrorAction->setDefaultWidget(m_sslLabel); + m_sslMenu->addAction(sslErrorAction); + + m_sslAction = addAction(style()->standardIcon(QStyle::SP_DriveNetIcon), QLineEdit::LeadingPosition); + m_sslAction->setToolTip(tr("TODO: Display SSL Status popup here")); + m_sslAction->setMenu(m_sslMenu); + + connect(m_sslAction, &QAction::triggered, this, [this]() { + m_sslMenu->exec(this->mapToGlobal(QPoint(0, height()))); + }); + + m_pageAction = addAction(style()->standardIcon(QStyle::SP_FileIcon), QLineEdit::TrailingPosition); + m_pageAction->setShortcut(QKeySequence("F10")); + m_pageAction->setToolTip(tr("Page Actions")); + connect(m_pageAction, &QAction::triggered, m_pageAction, [&]() { + //this->deselect(); + if(m_pageAction->menu() != nullptr) { + m_pageAction->menu()->exec(this->mapToGlobal(QPoint(width(), height()))); + } + }); + + QTextCharFormat hostnameFormat; + hostnameFormat.setFontWeight(QFont::Bold); + m_hostFormat.format = hostnameFormat; + + // connect signals + connect(this, &QLineEdit::returnPressed, [this]() { + if(this->text().startsWith('#')) { + emit searchTermEntered(this->text().mid(1)); + } else { + emit addressEntered(QUrl::fromUserInput(this->text())); + } + this->clearFocus(); + }); +} + +void UrlLineEdit::setCompleterModel(QAbstractItemModel *model) +{ + Q_CHECK_PTR(model); + m_bookmarksModel = model; +} + +void UrlLineEdit::connectWebView(WebView *view) +{ + Q_CHECK_PTR(view); + + disconnect(urlChangedConnection); + + setUrl(view->url()); + m_pageAction->setMenu(view->pageMenu()); + + urlChangedConnection = connect(view, &WebView::urlChanged, this, &UrlLineEdit::setUrl); +} + +void UrlLineEdit::setUrl(const QUrl &url) +{ + QString urlText = url.toString(); + QString domain = url.host(); + + m_hostFormat.start = urlText.indexOf(domain); + m_hostFormat.length = domain.length(); + + clear(); + clearTextFormat(); + setTextFormat(m_hostFormat); + setText(urlText); +} + +void UrlLineEdit::showSslError(const QString &message) +{ + m_sslLabel->setText(message); + m_sslAction->trigger(); +} + +void UrlLineEdit::updateCompleter(const QString &text) +{ + if(m_bookmarksModel == nullptr) { + return; + } + + const QModelIndexList res = m_bookmarksModel->match(QModelIndex(), Qt::EditRole, text, 7); + + if(!m_listView->updateItems(res)) { + m_listView->hide(); + return; + } + + // positioning + m_listView->setFixedWidth(width()); + m_listView->move(mapToGlobal(QPoint(0, height()))); + m_listView->show(); +} + +void UrlLineEdit::focusInEvent(QFocusEvent *event) +{ + clearTextFormat(); + + QLineEdit::focusInEvent(event); + + // select the contents when receiving focus + // http://stackoverflow.com/a/35725950/1054406 + // mousePressEvent triggers right after focusInEvent so text selected in focusInEvent unselects by mousePressEvent + //QTimer::singleShot(0, this, SLOT(selectAll())); +} + +void UrlLineEdit::focusOutEvent(QFocusEvent *event) +{ + setUrl(QUrl::fromUserInput(text())); + QLineEdit::focusOutEvent(event); +} + +void UrlLineEdit::keyPressEvent(QKeyEvent *event) +{ + if(m_listView->keyPressed(event)) { + int key = event->key(); + QModelIndex currentIndex = m_listView->currentIndex(); + + if(key == Qt::Key::Key_Enter || key == Qt::Key_Return) { + + if(currentIndex.isValid()) { + setText(currentIndex.data().toString()); + } + m_listView->hide(); + return; + } + } + QLineEdit::keyPressEvent(event); +} + +// formatting taken from: https://forum.qt.io/topic/60962/setting-qlineedit-text-bold +void UrlLineEdit::setTextFormat(const QTextLayout::FormatRange &format) +{ + QList attributes; + attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, format.start, format.length, format.format)); + QInputMethodEvent ev(QString(), attributes); + event(&ev); +} + +void UrlLineEdit::clearTextFormat() +{ + setTextFormat(QTextLayout::FormatRange()); +} diff --git a/src/addressbar/urllineedit.h b/src/addressbar/urllineedit.h new file mode 100644 index 0000000..4e62128 --- /dev/null +++ b/src/addressbar/urllineedit.h @@ -0,0 +1,65 @@ +/* + * 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: https://neueland.iserlohn-fortress.net/smolbote.hg + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#ifndef URLLINEEDIT_H +#define URLLINEEDIT_H + +#include +#include +#include +#include +#include "completer.h" + +class QAbstractItemModel; +class QMenu; +class QLabel; +class UrlLineEdit : public QLineEdit +{ + Q_OBJECT +public: + explicit UrlLineEdit(QWidget *parent = nullptr); + + void setCompleterModel(QAbstractItemModel *model); + +signals: + void addressEntered(const QUrl &url); + void searchTermEntered(const QString &term); + +public slots: + void connectWebView(WebView *view); + void setUrl(const QUrl &url); + void showSslError(const QString &message); + + void updateCompleter(const QString &text); + +protected: + void focusInEvent(QFocusEvent *event) override; + void focusOutEvent(QFocusEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; + +private: + void setTextFormat(const QTextLayout::FormatRange &format); + void clearTextFormat(); + + QTextLayout::FormatRange m_hostFormat; + + QAction *m_sslAction = nullptr; + QAction *m_pageAction = nullptr; + + // ssl menu + QMenu *m_sslMenu; + QLabel *m_sslLabel; + + // completer + QAbstractItemModel *m_bookmarksModel = nullptr; + Completer *m_listView; + + QMetaObject::Connection urlChangedConnection; +}; + +#endif // URLLINEEDIT_H diff --git a/src/mainwindow/mainwindow.cpp b/src/mainwindow/mainwindow.cpp index a45c89e..d5efe5c 100644 --- a/src/mainwindow/mainwindow.cpp +++ b/src/mainwindow/mainwindow.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include MainWindow::MainWindow(std::shared_ptr config, QWidget *parent) @@ -270,9 +270,7 @@ void MainWindow::handleTabChanged(WebView *view) // connect signals m_navigationBar->connectWebView(view); - connect(view, &WebView::urlChanged, m_addressBar, &UrlLineEdit::setUrl); - m_addressBar->setUrl(view->url()); - m_addressBar->pageAction()->setMenu(view->pageMenu()); + m_addressBar->connectWebView(view); connect(view, &WebView::titleChanged, this, &MainWindow::handleTitleUpdated); diff --git a/src/webengine/webpage.cpp b/src/webengine/webpage.cpp index b2f8c43..7a2a5e7 100644 --- a/src/webengine/webpage.cpp +++ b/src/webengine/webpage.cpp @@ -8,6 +8,7 @@ #include "webpage.h" +#include #include WebPage::WebPage(QWebEngineProfile *profile, QObject *parent) @@ -25,6 +26,10 @@ WebPage::WebPage(QWebEngineProfile *profile, QObject *parent) bool WebPage::certificateError(const QWebEngineCertificateError &certificateError) { - emit certificateErrorMessage(certificateError.errorDescription()); - return certificateError.isOverridable(); + auto resp = QMessageBox::warning(nullptr, + tr("SSL error"), + tr("An SSL error has occurred:
%1").arg(certificateError.errorDescription()), + QMessageBox::Ignore, QMessageBox::Abort); + + return resp == QMessageBox::Ignore; } diff --git a/src/webengine/webpage.h b/src/webengine/webpage.h index 0c7c3b9..674f278 100644 --- a/src/webengine/webpage.h +++ b/src/webengine/webpage.h @@ -17,9 +17,6 @@ class WebPage : public QWebEnginePage public: explicit WebPage(QWebEngineProfile *profile, QObject *parent = nullptr); -signals: - void certificateErrorMessage(const QString &message); - protected: bool certificateError(const QWebEngineCertificateError &certificateError); }; diff --git a/src/webengine/webview.cpp b/src/webengine/webview.cpp index fa03dd4..263fb67 100644 --- a/src/webengine/webview.cpp +++ b/src/webengine/webview.cpp @@ -30,7 +30,7 @@ #include // ssl errors -#include "lib/navigation/urllineedit.h" +#include "src/addressbar/urllineedit.h" WebView::WebView(MainWindow *parentMainWindow, QWidget *parent) : QWebEngineView(parent) @@ -144,7 +144,6 @@ void WebView::setPage(WebPage *page) // make sure the page gets cleaned up if we replace it by taking ownership page->setParent(this); connect(page, &WebPage::linkHovered, this, &WebView::handleLinkHovered); - connect(page, &WebPage::certificateErrorMessage, this, &WebView::handleCertificateError); QWebEngineView::setPage(page); } @@ -192,8 +191,3 @@ void WebView::handleLinkHovered(const QString &url) m_parent->statusBar()->showMessage(url); } } - -void WebView::handleCertificateError(const QString &message) -{ - m_parent->m_addressBar->showSslError(message); -} diff --git a/src/webengine/webview.h b/src/webengine/webview.h index 5242d0d..957d181 100644 --- a/src/webengine/webview.h +++ b/src/webengine/webview.h @@ -35,7 +35,6 @@ protected: private slots: void handleLinkHovered(const QString &url); - void handleCertificateError(const QString &message); private: MainWindow *m_parent = nullptr; -- cgit v1.2.1