diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2019-06-01 10:38:46 +0200 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2019-06-01 10:42:37 +0200 |
commit | a8e77815125e73f7baf630855845a5f4bb041e51 (patch) | |
tree | 5ae8c29b28a917cb1e0857851ec5aed797c1e799 /kde-apps | |
parent | sci-chemistry/pymol: Change deps (diff) | |
download | gentoo-a8e77815125e73f7baf630855845a5f4bb041e51.tar.gz gentoo-a8e77815125e73f7baf630855845a5f4bb041e51.tar.bz2 gentoo-a8e77815125e73f7baf630855845a5f4bb041e51.zip |
kde-apps/messagelib: Fix messagewindow crash with Qt 5.12.3
Reported-by: Erik Quaeghebeur <gentoobugzilla@equaeghe.nospammail.net>
Thanks-to: Giuseppe Vitillaro <giuseppe@vitillaro.org>
Closes: https://bugs.gentoo.org/686842
Package-Manager: Portage-2.3.67, Repoman-2.3.13
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
Diffstat (limited to 'kde-apps')
-rw-r--r-- | kde-apps/messagelib/files/messagelib-18.12.3-qtwebengine-5.12.3.patch | 172 | ||||
-rw-r--r-- | kde-apps/messagelib/messagelib-18.12.3-r2.ebuild | 71 |
2 files changed, 243 insertions, 0 deletions
diff --git a/kde-apps/messagelib/files/messagelib-18.12.3-qtwebengine-5.12.3.patch b/kde-apps/messagelib/files/messagelib-18.12.3-qtwebengine-5.12.3.patch new file mode 100644 index 000000000000..3fdc1527951a --- /dev/null +++ b/kde-apps/messagelib/files/messagelib-18.12.3-qtwebengine-5.12.3.patch @@ -0,0 +1,172 @@ +From 9f0ce086c6a4e487cee1f01acb15290ebff19ac3 Mon Sep 17 00:00:00 2001 +From: Jonathan Marten <jjm@keelhaul.me.uk> +Date: Tue, 12 Mar 2019 08:47:43 +0000 +Subject: Move management of QWebEngineProfile to WebEnginePage + +To avoid a crash on KMail quit or viewer window close, caused by the +MailWebEnginePage being deleted while its QWebEngineProfile is still +active. Simplified management of the profile by handling its creation +and deletion within WebEnginePage. + +Deprecate the 2-argument WebEnginePage constructor which allows an +already allocated profile to be used. This constructor is used by +Akregator which specifies the global profile; it will be changed to +use a private profile instead. + +Differential Revision: https://phabricator.kde.org/D19559 +--- + .../src/viewer/webengine/mailwebenginepage.cpp | 10 ------- + .../src/viewer/webengine/mailwebenginepage.h | 3 +- + .../src/viewer/webengine/mailwebengineview.cpp | 3 +- + webengineviewer/src/webenginepage.cpp | 22 ++++++++++---- + webengineviewer/src/webenginepage.h | 35 ++++++++++++++++++++-- + 5 files changed, 52 insertions(+), 21 deletions(-) + +diff --git a/messageviewer/src/viewer/webengine/mailwebenginepage.cpp b/messageviewer/src/viewer/webengine/mailwebenginepage.cpp +index cd91494..f3790b9 100644 +--- a/messageviewer/src/viewer/webengine/mailwebenginepage.cpp ++++ b/messageviewer/src/viewer/webengine/mailwebenginepage.cpp +@@ -29,16 +29,6 @@ MailWebEnginePage::MailWebEnginePage(QObject *parent) + initialize(); + } + +-MailWebEnginePage::MailWebEnginePage(QWebEngineProfile *profile, QObject *parent) +- : WebEngineViewer::WebEnginePage(profile, parent) +-{ +- initialize(); +-} +- +-MailWebEnginePage::~MailWebEnginePage() +-{ +-} +- + void MailWebEnginePage::initialize() + { + settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, false); +diff --git a/messageviewer/src/viewer/webengine/mailwebenginepage.h b/messageviewer/src/viewer/webengine/mailwebenginepage.h +index 7f8e6eb..d581efd 100644 +--- a/messageviewer/src/viewer/webengine/mailwebenginepage.h ++++ b/messageviewer/src/viewer/webengine/mailwebenginepage.h +@@ -28,8 +28,7 @@ class MESSAGEVIEWER_EXPORT MailWebEnginePage : public WebEngineViewer::WebEngine + Q_OBJECT + public: + explicit MailWebEnginePage(QObject *parent = nullptr); +- explicit MailWebEnginePage(QWebEngineProfile *profile, QObject *parent = nullptr); +- ~MailWebEnginePage(); ++ virtual ~MailWebEnginePage() = default; + + void setPrintElementBackground(bool printElementBackground); + +diff --git a/messageviewer/src/viewer/webengine/mailwebengineview.cpp b/messageviewer/src/viewer/webengine/mailwebengineview.cpp +index 0685a8d..09224cf 100644 +--- a/messageviewer/src/viewer/webengine/mailwebengineview.cpp ++++ b/messageviewer/src/viewer/webengine/mailwebengineview.cpp +@@ -34,7 +34,6 @@ + #include <QContextMenuEvent> + #include <WebEngineViewer/WebHitTest> + +-#include <QWebEngineProfile> + #include <QPrinter> + + #include <WebEngineViewer/WebHitTestResult> +@@ -81,7 +80,7 @@ MailWebEngineView::MailWebEngineView(KActionCollection *ac, QWidget *parent) + : WebEngineViewer::WebEngineView(parent) + , d(new MessageViewer::MailWebEngineViewPrivate) + { +- d->mPageEngine = new MailWebEnginePage(new QWebEngineProfile(this), this); ++ d->mPageEngine = new MailWebEnginePage(this); + setPage(d->mPageEngine); + d->mWebViewAccessKey = new WebEngineViewer::WebEngineAccessKey(this, this); + d->mWebViewAccessKey->setActionCollection(ac); +diff --git a/webengineviewer/src/webenginepage.cpp b/webengineviewer/src/webenginepage.cpp +index 447ac26..2fcb6c2 100644 +--- a/webengineviewer/src/webenginepage.cpp ++++ b/webengineviewer/src/webenginepage.cpp +@@ -33,8 +33,24 @@ + using namespace WebEngineViewer; + + WebEnginePage::WebEnginePage(QObject *parent) +- : QWebEnginePage(parent) ++ : QWebEnginePage(new QWebEngineProfile, parent) + { ++ // Create a private (off the record) QWebEngineProfile here to isolate the ++ // browsing settings, and adopt it as a child so that it will be deleted ++ // when we are destroyed. The profile must remain active for as long as ++ // any QWebEnginePage's belonging to it exist, see the API documentation ++ // of QWebEnginePage::QWebEnginePage(QWebEngineProfile *, QObject *). ++ // Deleting it as our child on destruction is safe. ++ // ++ // Do not try to save a line of code by setting the parent on construction: ++ // ++ // WebEnginePage::WebEnginePage(QObject *parent) ++ // : QWebEnginePage(new QWebEngineProfile(this), parent) ++ // ++ // because the QWebEngineProfile constructor will call out to the QWebEnginePage ++ // and crash because the QWebEnginePage is not fully constructed yet. ++ profile()->setParent(this); ++ + init(); + } + +@@ -44,10 +60,6 @@ WebEnginePage::WebEnginePage(QWebEngineProfile *profile, QObject *parent) + init(); + } + +-WebEnginePage::~WebEnginePage() +-{ +-} +- + void WebEnginePage::init() + { + connect(profile(), &QWebEngineProfile::downloadRequested, this, &WebEnginePage::saveHtml); +diff --git a/webengineviewer/src/webenginepage.h b/webengineviewer/src/webenginepage.h +index be38368..95c7c76 100644 +--- a/webengineviewer/src/webenginepage.h ++++ b/webengineviewer/src/webenginepage.h +@@ -31,10 +31,41 @@ class WEBENGINEVIEWER_EXPORT WebEnginePage : public QWebEnginePage + { + Q_OBJECT + public: ++ /** ++ * Constructor. ++ * ++ * A private QWebEngineProfile, only applying to this QWebEnginePage, ++ * will be created to implement browser settings. It can be accessed via ++ * @c profile(), but it should not be shared or reused unless care is ++ * taken that the profile is not deleted until all of the QWebEnginePage's ++ * belonging to it are deleted first. ++ * ++ * @param parent The parent object ++ **/ + explicit WebEnginePage(QObject *parent = nullptr); +- explicit WebEnginePage(QWebEngineProfile *profile, QObject *parent = nullptr); + +- ~WebEnginePage() override; ++ /** ++ * Constructor. ++ * ++ * The specified QWebEngineProfile will be used. See the description of ++ * @c WebEnginePage(QObject *) and the API documentation of QWebEnginePage ++ * for caution regarding the lifetime of the profile. ++ * ++ * @param profile The profile to be used ++ * @param parent The parent object ++ * @deprecated Use the single argument constructor, which creates and uses ++ * a private profile. ++ **/ ++#ifndef WEBENGINEVIEWER_NO_DEPRECATED ++ explicit WEBENGINEVIEWER_DEPRECATED WebEnginePage(QWebEngineProfile *profile, QObject *parent = nullptr); ++#endif ++ ++ /** ++ * Destructor. If there is a private QWebEngineProfile then it will also ++ * be destroyed. ++ **/ ++ virtual ~WebEnginePage() override = default; ++ + WebEngineViewer::WebHitTest *hitTestContent(const QPoint &pos); + + void saveHtml(QWebEngineDownloadItem *download); +-- +cgit v1.1 + diff --git a/kde-apps/messagelib/messagelib-18.12.3-r2.ebuild b/kde-apps/messagelib/messagelib-18.12.3-r2.ebuild new file mode 100644 index 000000000000..6dd0db1af4af --- /dev/null +++ b/kde-apps/messagelib/messagelib-18.12.3-r2.ebuild @@ -0,0 +1,71 @@ +# Copyright 1999-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +KDE_TEST="forceoptional-recursive" +VIRTUALX_REQUIRED="test" +inherit kde5 + +DESCRIPTION="Libraries for messaging functions" +LICENSE="GPL-2+ LGPL-2.1+" +KEYWORDS="amd64 ~arm64 x86" +IUSE="" + +DEPEND=" + $(add_frameworks_dep karchive) + $(add_frameworks_dep kcodecs) + $(add_frameworks_dep kcompletion) + $(add_frameworks_dep kconfig) + $(add_frameworks_dep kconfigwidgets) + $(add_frameworks_dep kcoreaddons) + $(add_frameworks_dep kdbusaddons) + $(add_frameworks_dep ki18n) + $(add_frameworks_dep kiconthemes) + $(add_frameworks_dep kio) + $(add_frameworks_dep kitemmodels) + $(add_frameworks_dep kitemviews) + $(add_frameworks_dep kjobwidgets) + $(add_frameworks_dep knotifications) + $(add_frameworks_dep kservice) + $(add_frameworks_dep ktextwidgets) + $(add_frameworks_dep kwidgetsaddons) + $(add_frameworks_dep kwindowsystem) + $(add_frameworks_dep kxmlgui) + $(add_frameworks_dep sonnet) + $(add_frameworks_dep syntax-highlighting) + $(add_kdeapps_dep akonadi '' 18.12.3-r1) + $(add_kdeapps_dep akonadi-contacts) + $(add_kdeapps_dep akonadi-mime) + $(add_kdeapps_dep grantleetheme) + $(add_kdeapps_dep incidenceeditor) + $(add_kdeapps_dep kcalcore) + $(add_kdeapps_dep kcontacts) + $(add_kdeapps_dep kdepim-apps-libs) + $(add_kdeapps_dep kidentitymanagement) + $(add_kdeapps_dep kldap) + $(add_kdeapps_dep kmailtransport) + $(add_kdeapps_dep kmbox) + $(add_kdeapps_dep kmime) + $(add_kdeapps_dep kpimtextedit) + $(add_kdeapps_dep libgravatar) + $(add_kdeapps_dep libkdepim) + $(add_kdeapps_dep libkleo) + $(add_qt_dep qtgui) + $(add_qt_dep qtnetwork) + $(add_qt_dep qtprintsupport) + $(add_qt_dep qtwebengine 'widgets') + $(add_qt_dep qtwidgets) + >=app-crypt/gpgme-1.8.0-r1[cxx,qt5] + >=dev-libs/grantlee-5.1.0:5 +" +RDEPEND="${DEPEND} + !kde-apps/kdepim-common-libs:4 + !kde-apps/kdepim-l10n + !=kde-apps/kmail-4.4*:4 +" + +# bug 579630 +RESTRICT+=" test" + +PATCHES=( "${FILESDIR}/${P}-qtwebengine-5.12.3.patch" ) # bug 686842 |