diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2016-01-07 15:21:42 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2016-01-07 15:22:10 +0100 |
commit | 3fe3c36039a68df52ce072af034ada6b4b946cb4 (patch) | |
tree | 5d94f3ae084b30baff037f92446aee29cae21a3d /src/webenginewidgets/api/qwebenginepage.cpp | |
parent | d18b3e7c3b3cb1baa20c8fcc53038a91c8fa40af (diff) | |
parent | 7a39d2c3082822b9d4b2417d41f08b5def41b1db (diff) |
Merge remote-tracking branch 'origin/5.5' into 5.6
Conflicts:
src/3rdparty
src/webenginewidgets/api/qwebenginepage.cpp
src/webenginewidgets/api/qwebenginepage_p.h
Change-Id: I050b4c7691a070e04cace2663ad633903f6d96a9
Diffstat (limited to 'src/webenginewidgets/api/qwebenginepage.cpp')
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 49c0cf5dd..f8f96af6a 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -90,6 +90,7 @@ QWebEnginePagePrivate::QWebEnginePagePrivate(QWebEngineProfile *_profile) , view(0) , isLoading(false) , scriptCollection(new QWebEngineScriptCollectionPrivate(browserContextAdapter()->userScriptController(), adapter.data())) + , m_isBeingAdopted(false) , m_backgroundColor(Qt::white) , fullscreenMode(false) { @@ -210,7 +211,20 @@ void QWebEnginePagePrivate::adoptNewWindow(WebContentsAdapter *newWebContents, W { Q_Q(QWebEnginePage); Q_UNUSED(userGesture); + QWebEnginePage *newPage = q->createWindow(toWindowType(disposition)); + + // Mark the new page as being in the process of being adopted, so that a second mouse move event + // sent by newWebContents->initialize() gets filtered in RenderWidgetHostViewQt::forwardEvent. + // The first mouse move event is being sent by q->createWindow(). This is necessary because + // Chromium does not get a mouse move acknowledgment message between the two events, and + // InputRouterImpl::ProcessMouseAck is not executed, thus all subsequent mouse move events + // get coalesced together, and don't get processed at all. + // The mouse move events are actually sent as a result of show() being called on + // RenderWidgetHostViewQtDelegateWidget, both when creating the window and when initialize is + // called. + newPage->d_func()->m_isBeingAdopted = true; + // Overwrite the new page's WebContents with ours. if (newPage && newPage->d_func() != this) { newPage->d_func()->adapter = newWebContents; @@ -218,6 +232,14 @@ void QWebEnginePagePrivate::adoptNewWindow(WebContentsAdapter *newWebContents, W if (!initialGeometry.isEmpty()) emit newPage->geometryChangeRequested(initialGeometry); } + + // Page has finished the adoption process. + newPage->d_func()->m_isBeingAdopted = false; +} + +bool QWebEnginePagePrivate::isBeingAdopted() +{ + return m_isBeingAdopted; } void QWebEnginePagePrivate::close() |