summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-11-08 12:55:10 +0100
committerJani Heikkinen <jani.heikkinen@qt.io>2018-11-08 14:24:16 +0000
commit4d6de2ba36ff4fe17b0e1c8ee7de4f63e2778c9e (patch)
treebfb13e74c0b5f1fe741cf1f0792ca3618dc2d62c
parentce0335c0b6c892bfdb06cd52830a705aa6d71d9b (diff)
Fix opened webviews closing when opener closes
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 <juri.valdmann@qt.io>
-rw-r--r--src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp22
-rw-r--r--src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h2
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<QMetaObject::Connection> m_windowConnections;
QWebEnginePage *m_page = nullptr;
+ QMetaObject::Connection m_parentDestroyedConnection;
};
} // namespace QtWebEngineCore