From 4d6de2ba36ff4fe17b0e1c8ee7de4f63e2778c9e Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 8 Nov 2018 12:55:10 +0100 Subject: Fix opened webviews closing when opener closes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We apparently can't not rely on getting a QEvent::ParentAboutToChange event before every QEvent::ParentChange event. Change-Id: Ie55b51f8c75623bc4f1a943367fb0070078df55b Fixes: QTBUG-71565 Reviewed-by: Jüri Valdmann --- .../render_widget_host_view_qt_delegate_widget.cpp | 22 +++++++++------------- .../render_widget_host_view_qt_delegate_widget.h | 2 +- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp index 7bbd85091..e735341cd 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp @@ -177,16 +177,15 @@ RenderWidgetHostViewQtDelegateWidget::~RenderWidgetHostViewQtDelegateWidget() void RenderWidgetHostViewQtDelegateWidget::connectRemoveParentBeforeParentDelete() { - if (QWidget *parent = parentWidget()) - connect(parent, &QObject::destroyed, - this, &RenderWidgetHostViewQtDelegateWidget::removeParentBeforeParentDelete); -} - -void RenderWidgetHostViewQtDelegateWidget::disconnectRemoveParentBeforeParentDelete() -{ - if (QWidget *parent = parentWidget()) - disconnect(parent, &QObject::destroyed, - this, &RenderWidgetHostViewQtDelegateWidget::removeParentBeforeParentDelete); + disconnect(m_parentDestroyedConnection); + + if (QWidget *parent = parentWidget()) { + m_parentDestroyedConnection = connect(parent, &QObject::destroyed, + this, + &RenderWidgetHostViewQtDelegateWidget::removeParentBeforeParentDelete); + } else { + m_parentDestroyedConnection = QMetaObject::Connection(); + } } void RenderWidgetHostViewQtDelegateWidget::removeParentBeforeParentDelete() @@ -417,9 +416,6 @@ bool RenderWidgetHostViewQtDelegateWidget::event(QEvent *event) // Track parent to make sure we don't get deleted. switch (event->type()) { - case QEvent::ParentAboutToChange: - disconnectRemoveParentBeforeParentDelete(); - break; case QEvent::ParentChange: connectRemoveParentBeforeParentDelete(); break; diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h index 74c9e3413..f65f4bbf3 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h @@ -101,7 +101,6 @@ protected: private slots: void onWindowPosChanged(); void connectRemoveParentBeforeParentDelete(); - void disconnectRemoveParentBeforeParentDelete(); void removeParentBeforeParentDelete(); private: @@ -115,6 +114,7 @@ private: QPoint m_lastGlobalPos; QList m_windowConnections; QWebEnginePage *m_page = nullptr; + QMetaObject::Connection m_parentDestroyedConnection; }; } // namespace QtWebEngineCore -- cgit v1.2.3