Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/desktop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2018-08-11 14:12:13 +0300
committerJulius Härtl <jus@bitgrid.net>2018-08-11 18:38:08 +0300
commit8dedb9084e5023238fb476489cfd615761b20fcb (patch)
treee1973d30a9adb14cfe31cffa0aad2571a84797af /src
parentf6ef11a5c9ac2f9e2394c43f8f9649b19ef43f9e (diff)
Make links open in an external browser
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'src')
-rw-r--r--src/gui/wizard/webview.cpp66
-rw-r--r--src/gui/wizard/webview.h6
2 files changed, 67 insertions, 5 deletions
diff --git a/src/gui/wizard/webview.cpp b/src/gui/wizard/webview.cpp
index 36451b3af..e50ef4a13 100644
--- a/src/gui/wizard/webview.cpp
+++ b/src/gui/wizard/webview.cpp
@@ -6,6 +6,7 @@
#include <QWebEngineUrlRequestJob>
#include <QWebEngineUrlSchemeHandler>
#include <QWebEngineView>
+#include <QDesktopServices>
#include <QProgressBar>
#include <QLoggingCategory>
#include <QLocale>
@@ -36,6 +37,27 @@ Q_SIGNALS:
void urlCatched(QString user, QString pass, QString host);
};
+class WebEngineView : public QWebEngineView {
+ Q_OBJECT
+public:
+ WebEngineView(QWidget* parent = 0);
+ bool acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame);
+};
+
+
+class WebEnginePage : public QWebEnginePage {
+public:
+ WebEnginePage(QWebEngineProfile *profile, QObject* parent = nullptr);
+ QWebEnginePage * createWindow(QWebEnginePage::WebWindowType type) override;
+};
+
+// We need a separate class here, since we cannot simply return the same WebEnginePage object
+// this leads to a strage segfault somewhere deep inside of the QWebEngine code
+class ExternalWebEnginePage : public QWebEnginePage {
+public:
+ ExternalWebEnginePage(QWebEngineProfile *profile, QObject* parent = nullptr);
+ bool acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame) override;
+};
WebView::WebView(QWidget *parent)
: QWidget(parent),
@@ -43,13 +65,15 @@ WebView::WebView(QWidget *parent)
{
_ui.setupUi(this);
- _webview = new QWebEngineView(this);
+ _webview = new WebEngineView(this);
_profile = new QWebEngineProfile(this);
- _page = new QWebEnginePage(_profile);
+ _page = new WebEnginePage(_profile);
_interceptor = new WebViewPageUrlRequestInterceptor(this);
_schemeHandler = new WebViewPageUrlSchemeHandler(this);
- _profile->setHttpUserAgent(Utility::userAgentString());
+ const QString userAgent(Utility::userAgentString());
+ _profile->setHttpUserAgent(userAgent);
+ QWebEngineProfile::defaultProfile()->setHttpUserAgent(userAgent);
_profile->setRequestInterceptor(_interceptor);
_profile->installUrlSchemeHandler("nc", _schemeHandler);
@@ -120,6 +144,42 @@ void WebViewPageUrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *reques
emit urlCatched(user, password, server);
}
+
+WebEnginePage::WebEnginePage(QWebEngineProfile *profile, QObject* parent) : QWebEnginePage(profile, parent) {
+
+}
+
+QWebEnginePage * WebEnginePage::createWindow(QWebEnginePage::WebWindowType type) {
+ ExternalWebEnginePage *view = new ExternalWebEnginePage(this->profile());
+ return view;
+}
+
+ExternalWebEnginePage::ExternalWebEnginePage(QWebEngineProfile *profile, QObject* parent) : QWebEnginePage(profile, parent) {
+
+}
+
+
+bool ExternalWebEnginePage::acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame)
+{
+ QDesktopServices::openUrl(url);
+ return false;
+}
+
+
+WebEngineView::WebEngineView(QWidget* parent) : QWebEngineView (parent) {
+
+}
+
+bool WebEngineView::acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame)
+{
+ if (type == QWebEnginePage::NavigationTypeLinkClicked)
+ {
+ QDesktopServices::openUrl(url);
+ return false;
+ }
+ return true;
+}
+
}
#include "webview.moc"
diff --git a/src/gui/wizard/webview.h b/src/gui/wizard/webview.h
index 5e5a8793a..01529ef09 100644
--- a/src/gui/wizard/webview.h
+++ b/src/gui/wizard/webview.h
@@ -14,6 +14,8 @@ namespace OCC {
class WebViewPageUrlRequestInterceptor;
class WebViewPageUrlSchemeHandler;
+class WebEngineView;
+class WebEnginePage;
class WebView : public QWidget
{
@@ -28,9 +30,9 @@ signals:
private:
Ui_WebView _ui;
- QWebEngineView *_webview;
+ WebEngineView *_webview;
QWebEngineProfile *_profile;
- QWebEnginePage *_page;
+ WebEnginePage *_page;
WebViewPageUrlRequestInterceptor *_interceptor;
WebViewPageUrlSchemeHandler *_schemeHandler;