Skip to content

Commit

Permalink
Remove stale parent connection when initializing delegate as a child
Browse files Browse the repository at this point in the history
When clicking on a blank link target, the constructor of the
RenderWidgetHostViewQtDelegateWidget instance for the newly created
view is called with the originating QWebEngineView as its parent
and will connect its removeParentBeforeParentDelete slot to the
originating view's destroyed signal.

This leads to the situation where the delegate's parent will be set to
null when the originating view is closed, causing the view to display
only an empty widget with the actual web contents remaining live in
the background.

This patch removes the connection to the old view when initializing
the delegate as a child of the QWebEnginePagePrivate instance. The
addition to the layout updates the parent and child relationship
between the view and the delegate internally.

Task-number: QTBUG-58381
Change-Id: I448380478c2bcfcfbddaee8a35caf46010e57972
Reviewed-by: Florian Bruhin <qt-project.org@the-compiler.org>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
  • Loading branch information
mibrunin committed Mar 15, 2017
1 parent 315e656 commit 8e147ed
Showing 1 changed file with 3 additions and 0 deletions.
Expand Up @@ -163,6 +163,9 @@ void RenderWidgetHostViewQtDelegateWidget::initAsChild(WebContentsAdapterClient*

QWebEnginePagePrivate *pagePrivate = static_cast<QWebEnginePagePrivate *>(container);
if (pagePrivate->view) {
if (parentWidget())
disconnect(parentWidget(), &QObject::destroyed,
this, &RenderWidgetHostViewQtDelegateWidget::removeParentBeforeParentDelete);
pagePrivate->view->layout()->addWidget(this);
pagePrivate->view->setFocusProxy(this);
show();
Expand Down

0 comments on commit 8e147ed

Please sign in to comment.