Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.2:Update
messagelib
fix-opening-links.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File fix-opening-links.patch of Package messagelib
From 1109b48ef544914353c87e1eb47cf08bafceeabc Mon Sep 17 00:00:00 2001 From: Montel Laurent <montel@kde.org> Date: Thu, 27 Oct 2016 21:02:35 +0200 Subject: Fix Bug 368498 - Kmail does not open links with target="_blank" FIXED-IN: 5.4.0 BUG: 368498 (cherry picked from commit 70173a8245c6f0401619f5be9cc4770451feeb21) --- webengineviewer/src/CMakeLists.txt | 2 +- .../src/webenginenavigationrequestinterceptor.cpp | 47 ++++++++++++++++++++++ .../src/webenginenavigationrequestinterceptor.h | 43 ++++++++++++++++++++ webengineviewer/src/webengineview.cpp | 24 ++++++++++- 4 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 webengineviewer/src/webenginenavigationrequestinterceptor.cpp create mode 100644 webengineviewer/src/webenginenavigationrequestinterceptor.h diff --git a/webengineviewer/src/CMakeLists.txt b/webengineviewer/src/CMakeLists.txt index c626049..5a67248 100644 --- a/webengineviewer/src/CMakeLists.txt +++ b/webengineviewer/src/CMakeLists.txt @@ -48,9 +48,9 @@ set(libwebengineviewer_webengine_SRCS webenginescript.cpp webengineview.cpp webenginemanagescript.cpp - webengineprintmessagebox.cpp webengineexporthtmlpagejob.cpp + webenginenavigationrequestinterceptor.cpp ) set(libwebengineviewer_interceptor_SRCS diff --git a/webengineviewer/src/webenginenavigationrequestinterceptor.cpp b/webengineviewer/src/webenginenavigationrequestinterceptor.cpp new file mode 100644 index 0000000..f5d34cd --- /dev/null +++ b/webengineviewer/src/webenginenavigationrequestinterceptor.cpp @@ -0,0 +1,47 @@ +/* + Copyright (C) 2016 Laurent Montel <montel@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + + +#include "webenginenavigationrequestinterceptor.h" +#include "webenginepage.h" +using namespace WebEngineViewer; + +WebEngineNavigationRequestInterceptor::WebEngineNavigationRequestInterceptor(QWebEnginePage *page) + : QWebEnginePage(page), + mTargetPage(page) +{ + +} + +WebEngineNavigationRequestInterceptor::~WebEngineNavigationRequestInterceptor() +{ + +} + +bool WebEngineNavigationRequestInterceptor::acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame) +{ + Q_UNUSED(isMainFrame); + WebEnginePage *page = qobject_cast<WebEnginePage *>(mTargetPage); + if (type == NavigationTypeLinkClicked && page) { + Q_EMIT page->urlClicked(url); + return false; + } + return false; +} + diff --git a/webengineviewer/src/webenginenavigationrequestinterceptor.h b/webengineviewer/src/webenginenavigationrequestinterceptor.h new file mode 100644 index 0000000..ad6e881 --- /dev/null +++ b/webengineviewer/src/webenginenavigationrequestinterceptor.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2016 Laurent Montel <montel@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef WEBENGINENAVIGATIONREQUESTINTERCEPTOR_H +#define WEBENGINENAVIGATIONREQUESTINTERCEPTOR_H + +#include <QWebEnginePage> + +namespace WebEngineViewer +{ +class WebEnginePage; +class WebEngineNavigationRequestInterceptor : public QWebEnginePage +{ + Q_OBJECT +public: + explicit WebEngineNavigationRequestInterceptor(QWebEnginePage *page); + ~WebEngineNavigationRequestInterceptor(); + +protected: + bool acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame) Q_DECL_OVERRIDE; + +private: + QWebEnginePage *mTargetPage; +}; +} + +#endif // WEBENGINENAVIGATIONREQUESTINTERCEPTOR_H diff --git a/webengineviewer/src/webengineview.cpp b/webengineviewer/src/webengineview.cpp index a976046..6193069 100644 --- a/webengineviewer/src/webengineview.cpp +++ b/webengineviewer/src/webengineview.cpp @@ -18,6 +18,7 @@ */ #include "webengineview.h" +#include "webenginenavigationrequestinterceptor.h" #include "webenginemanagescript.h" #include "webengineviewer_debug.h" #include "../config-webengineviewer.h" @@ -37,13 +38,26 @@ class WebEngineViewer::WebEngineViewPrivate public: WebEngineViewPrivate() : mSavedRelativePosition(-1), - mCurrentWidget(Q_NULLPTR) + mCurrentWidget(Q_NULLPTR), + mWebEngineNavigatorInterceptor(Q_NULLPTR), + mWebEngineNavigatorInterceptorView(Q_NULLPTR) + { } + ~WebEngineViewPrivate() + { + delete mWebEngineNavigatorInterceptor; + mWebEngineNavigatorInterceptor = Q_NULLPTR; + delete mWebEngineNavigatorInterceptorView; + mWebEngineNavigatorInterceptorView = Q_NULLPTR; + } + qreal mSavedRelativePosition; QWidget *mCurrentWidget; WebEngineManageScript *mManagerScript; + WebEngineNavigationRequestInterceptor *mWebEngineNavigatorInterceptor; + WebEngineView *mWebEngineNavigatorInterceptorView; }; WebEngineView::WebEngineView(QWidget *parent) @@ -193,7 +207,13 @@ bool WebEngineView::eventFilter(QObject *obj, QEvent *event) QWebEngineView *WebEngineView::createWindow(QWebEnginePage::WebWindowType type) { Q_UNUSED(type); - return Q_NULLPTR; + delete d->mWebEngineNavigatorInterceptor; + delete d->mWebEngineNavigatorInterceptorView; + d->mWebEngineNavigatorInterceptorView = new WebEngineView(); + + d->mWebEngineNavigatorInterceptor = new WebEngineNavigationRequestInterceptor(this->page()); + d->mWebEngineNavigatorInterceptorView->setPage(d->mWebEngineNavigatorInterceptor); + return d->mWebEngineNavigatorInterceptorView; } void WebEngineView::clearRelativePosition() -- cgit v0.11.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor