File nextcloud-client-fix-qt-5.12.patch of Package nextcloud-client

--- a/src/gui/creds/webflowcredentialsdialog.cpp
+++ b/src/gui/creds/webflowcredentialsdialog.cpp
@@ -29,6 +29,14 @@ WebFlowCredentialsDialog::WebFlowCredentialsDialog(QWidget *parent)
     connect(_webView, &WebView::urlCatched, this, &WebFlowCredentialsDialog::urlCatched);
 }
 
+void WebFlowCredentialsDialog::closeEvent(QCloseEvent *e) {
+    Q_UNUSED(e);
+
+    // Force calling WebView::~WebView() earlier so that _profile and _page are
+    // deleted in the correct order.
+    delete _webView;
+}
+
 void WebFlowCredentialsDialog::setUrl(const QUrl &url) {
     _webView->setUrl(url);
 }
--- a/src/gui/creds/webflowcredentialsdialog.h
+++ b/src/gui/creds/webflowcredentialsdialog.h
@@ -21,6 +21,9 @@ class WebFlowCredentialsDialog : public QDialog
     void setInfo(const QString &msg);
     void setError(const QString &error);
 
+protected:
+    void closeEvent(QCloseEvent *e) override;
+
 signals:
     void urlCatched(const QString user, const QString pass, const QString host);
 
--- a/src/gui/wizard/webview.cpp
+++ b/src/gui/wizard/webview.cpp
@@ -10,6 +10,7 @@
 #include <QProgressBar>
 #include <QLoggingCategory>
 #include <QLocale>
+#include <QWebEngineCertificateError>
 
 #include "common/utility.h"
 
@@ -104,6 +105,19 @@ void WebView::setUrl(const QUrl &url) {
     _page->setUrl(url);
 }
 
+WebView::~WebView() {
+    /*
+     * The Qt implmentation deletes children in the order they are added to the
+     * object tree, so in this case _page is deleted after _profile, which
+     * violates the assumption that _profile should exist longer than
+     * _page [1]. Here I delete _page manually so that _profile can be safely
+     * deleted later.
+     *
+     * [1] https://doc.qt.io/qt-5/qwebenginepage.html#QWebEnginePage-1
+     */
+    delete _page;
+}
+
 WebViewPageUrlRequestInterceptor::WebViewPageUrlRequestInterceptor(QObject *parent)
     : QWebEngineUrlRequestInterceptor(parent) {
 
--- a/src/gui/wizard/webview.h
+++ b/src/gui/wizard/webview.h
@@ -21,6 +21,7 @@ class WebView : public QWidget
     Q_OBJECT
 public:
     WebView(QWidget *parent = nullptr);
+    virtual ~WebView();
     void setUrl(const QUrl &url);
 
 signals:
openSUSE Build Service is sponsored by