mirror of
https://github.com/nextcloud/desktop.git
synced 2025-10-26 11:17:43 +00:00
Make sure _profile and _page are deleted in the correct order
Inspired by https://github.com/electron/electron/pull/15028 Closes https://github.com/nextcloud/desktop/issues/941 Closes https://github.com/nextcloud/desktop/issues/950
This commit is contained in:
parent
24907acc2a
commit
09b0055dc3
@ -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);
|
||||
}
|
||||
|
||||
@ -21,6 +21,9 @@ public:
|
||||
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);
|
||||
|
||||
|
||||
@ -105,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) {
|
||||
|
||||
|
||||
@ -21,6 +21,7 @@ class WebView : public QWidget
|
||||
Q_OBJECT
|
||||
public:
|
||||
WebView(QWidget *parent = nullptr);
|
||||
virtual ~WebView();
|
||||
void setUrl(const QUrl &url);
|
||||
|
||||
signals:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user