diff options
Diffstat (limited to 'lib/widgets/Api/qwebenginepage.cpp')
-rw-r--r-- | lib/widgets/Api/qwebenginepage.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/lib/widgets/Api/qwebenginepage.cpp b/lib/widgets/Api/qwebenginepage.cpp index 0bc6d85e1..f3f046675 100644 --- a/lib/widgets/Api/qwebenginepage.cpp +++ b/lib/widgets/Api/qwebenginepage.cpp @@ -36,11 +36,12 @@ QWebEnginePagePrivate::QWebEnginePagePrivate() : QObjectPrivate(QObjectPrivateVersion) - , adapter(new WebContentsAdapter(this)) + , adapter(new WebContentsAdapter) , history(new QWebEngineHistory(new QWebEngineHistoryPrivate(adapter.data()))) , view(0) , m_isLoading(false) { + adapter->initialize(this); memset(actions, 0, sizeof(actions)); } @@ -96,6 +97,17 @@ void QWebEnginePagePrivate::focusContainer() view->setFocus(); } +void QWebEnginePagePrivate::adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition) +{ + Q_Q(QWebEnginePage); + QWebEnginePage *newPage = q->createWindow(disposition == WebContentsAdapterClient::NewPopupDisposition ? QWebEnginePage::WebModalDialog : QWebEnginePage::WebBrowserWindow); + // Overwrite the new page's WebContents with ours. + if (newPage) { + newPage->d_func()->adapter = newWebContents; + newWebContents->initialize(newPage->d_func()); + } +} + void QWebEnginePagePrivate::updateAction(QWebEnginePage::WebAction action) const { #ifdef QT_NO_ACTION @@ -267,4 +279,15 @@ QUrl QWebEnginePage::url() const return d->adapter->activeUrl(); } +QWebEnginePage *QWebEnginePage::createWindow(WebWindowType type) +{ + Q_D(const QWebEnginePage); + if (d->view) { + QWebEngineView *newView = d->view->createWindow(type); + if (newView) + return newView->page(); + } + return 0; +} + #include "moc_qwebenginepage.cpp" |