summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets
diff options
context:
space:
mode:
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-01-08 14:37:40 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-17 14:58:55 +0100
commit13416b2db167dc1849e4af94391d3c6ae602ec76 (patch)
treeb0adcf4565663bc43a262ec2e535b6f3c4505a18 /src/webenginewidgets
parentdb2c0781218b7dfa03f7bc39b1e2115dbf4a0fb0 (diff)
Fix QWebEngineView to page reattachment.
This fixes the crash in tst_QWebEngineView::reusePage. Also add a test to check the case where show() would react incorrectly. Change-Id: I40247c7c225d74b26675b6a7fa5ff1f06d3bb3e6 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
Diffstat (limited to 'src/webenginewidgets')
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp2
-rw-r--r--src/webenginewidgets/api/qwebengineview.cpp4
-rw-r--r--src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp10
3 files changed, 13 insertions, 3 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 0178c1118..74a1692b2 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -207,6 +207,8 @@ QWebEnginePage::QWebEnginePage(QObject* parent)
QWebEnginePage::~QWebEnginePage()
{
+ Q_D(QWebEnginePage);
+ QWebEngineViewPrivate::bind(d->view, 0);
}
QWebEngineHistory *QWebEnginePage::history() const
diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp
index 4dea036b1..054925e83 100644
--- a/src/webenginewidgets/api/qwebengineview.cpp
+++ b/src/webenginewidgets/api/qwebengineview.cpp
@@ -43,6 +43,7 @@
#include "qwebengineview_p.h"
#include "qwebenginepage_p.h"
+#include "web_contents_adapter.h"
#include <QAction>
#include <QMenu>
@@ -63,6 +64,7 @@ void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page)
oldView->d_func()->page = 0;
}
page->d_func()->view = view;
+ page->d_func()->adapter->reattachRWHV();
}
if (view) {
@@ -98,6 +100,8 @@ QWebEngineView::QWebEngineView(QWidget *parent)
QWebEngineView::~QWebEngineView()
{
+ Q_D(QWebEngineView);
+ QWebEngineViewPrivate::bind(0, d->page);
}
QWebEnginePage* QWebEngineView::page() const
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 0d84a0f46..c7b831853 100644
--- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
+++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
@@ -64,9 +64,11 @@ RenderWidgetHostViewQtDelegateWidget::RenderWidgetHostViewQtDelegateWidget(Rende
void RenderWidgetHostViewQtDelegateWidget::initAsChild(WebContentsAdapterClient* container)
{
QWebEnginePagePrivate *pagePrivate = static_cast<QWebEnginePagePrivate *>(container);
- // FIXME: What is going to trigger this if the page is attached later to the view?
- if (pagePrivate->view)
+ if (pagePrivate->view) {
pagePrivate->view->layout()->addWidget(this);
+ QWidget::show();
+ } else
+ setParent(0);
}
void RenderWidgetHostViewQtDelegateWidget::initAsPopup(const QRect& rect)
@@ -94,7 +96,9 @@ bool RenderWidgetHostViewQtDelegateWidget::hasKeyboardFocus()
void RenderWidgetHostViewQtDelegateWidget::show()
{
- QWidget::show();
+ // Check if we're attached to a QWebEngineView, we don't want to show as top-level.
+ if (parent())
+ QWidget::show();
}
void RenderWidgetHostViewQtDelegateWidget::hide()