commit:     a8e77815125e73f7baf630855845a5f4bb041e51
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Sat Jun  1 08:38:46 2019 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Sat Jun  1 08:42:37 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a8e77815

kde-apps/messagelib: Fix messagewindow crash with Qt 5.12.3

Reported-by: Erik Quaeghebeur <gentoobugzilla <AT> equaeghe.nospammail.net>
Thanks-to: Giuseppe Vitillaro <giuseppe <AT> vitillaro.org>
Closes: https://bugs.gentoo.org/686842
Package-Manager: Portage-2.3.67, Repoman-2.3.13
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 .../messagelib-18.12.3-qtwebengine-5.12.3.patch    | 172 +++++++++++++++++++++
 kde-apps/messagelib/messagelib-18.12.3-r2.ebuild   |  71 +++++++++
 2 files changed, 243 insertions(+)

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 00000000000..3fdc1527951
--- /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 <[email protected]>
+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 00000000000..6dd0db1af4a
--- /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

Reply via email to