From 2fbe10a115fb0f5f50efe192d554fb7d1c988884 Mon Sep 17 00:00:00 2001 From: Michal Klocek Date: Fri, 16 Oct 2020 12:15:51 +0200 Subject: Drop dependency on QWebEngineView in page Introduce temporarily PageView interface and DummyDelegate. Change-Id: I3a3d57435c98b31a15fb6d777045e141d007486f Reviewed-by: Allan Sandfeld Jensen --- src/webenginewidgets/api/qwebengineview.cpp | 83 +++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 4 deletions(-) (limited to 'src/webenginewidgets/api/qwebengineview.cpp') diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index 934991cbe..2b5b2414c 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -78,6 +78,7 @@ # include #endif #include +#include QT_BEGIN_NAMESPACE @@ -306,6 +307,26 @@ bool QWebEngineViewPrivate::javaScriptPrompt(const QUrl &url, const QString &msg #endif // QT_CONFIG(inputdialog) } +void QWebEngineViewPrivate::focusContainer() +{ + Q_Q(QWebEngineView); + q->activateWindow(); + q->setFocus(); +} + +void QWebEngineViewPrivate::unhandledKeyEvent(QKeyEvent *event) +{ + Q_Q(QWebEngineView); + if (q->parentWidget()) + QGuiApplication::sendEvent(q->parentWidget(), event); +} + +bool QWebEngineViewPrivate::passOnFocus(bool reverse) +{ + Q_Q(QWebEngineView); + return q->focusNextPrevChild(!reverse); +} + #ifndef QT_NO_ACCESSIBILITY static QAccessibleInterface *webAccessibleFactory(const QString &, QObject *object) { @@ -323,9 +344,13 @@ QWebEngineViewPrivate::QWebEngineViewPrivate() #endif // QT_NO_ACCESSIBILITY } +QWebEngineViewPrivate::~QWebEngineViewPrivate() = default; + void QWebEngineViewPrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView *view) { - auto oldView = page ? page->d_func()->view : nullptr; + QWebEngineViewPrivate *v = + page ? static_cast(page->d_func()->view) : nullptr; + auto oldView = v ? v->q_func() : nullptr; auto oldPage = view ? view->d_func()->page : nullptr; bool ownNewPage = false; @@ -339,7 +364,7 @@ void QWebEngineViewPrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView oldView->d_func()->page = nullptr; oldView->d_func()->m_ownsPage = false; } - page->d_func()->view = view; + page->d_func()->view = view ? view->d_func() : nullptr; } if (view && oldPage != page) { @@ -399,12 +424,12 @@ void QWebEngineViewPrivate::bindPageAndWidget( if (widget && oldPage != page && oldPage && oldPage->d_func()) { if (auto oldView = oldPage->d_func()->view) - oldView->d_func()->widgetChanged(widget, nullptr); + static_cast(oldView)->widgetChanged(widget, nullptr); } if (page && oldWidget != widget) { if (auto view = page->d_func()->view) - view->d_func()->widgetChanged(oldWidget, widget); + static_cast(view)->widgetChanged(oldWidget, widget); } } @@ -435,6 +460,56 @@ QIcon QWebEngineViewPrivate::webActionIcon(QWebEnginePage::WebAction action) } return icon; } + +QWebEnginePage *QWebEngineViewPrivate::createPageForWindow(QWebEnginePage::WebWindowType type) +{ + Q_Q(QWebEngineView); + QWebEngineView *newView = q->createWindow(type); + if (newView) + return newView->page(); + return nullptr; +} + +void QWebEngineViewPrivate::setToolTip(const QString &toolTipText) +{ + Q_Q(QWebEngineView); + q->setToolTip(toolTipText); +} + +bool QWebEngineViewPrivate::isEnabled() const +{ + Q_Q(const QWebEngineView); + return q->isEnabled(); +} + +QObject *QWebEngineViewPrivate::accessibilityParentObject() +{ + Q_Q(QWebEngineView); + return q; +} + +bool QWebEngineViewPrivate::isVisible() const +{ + Q_Q(const QWebEngineView); + return q->isVisible(); +} +QRect QWebEngineViewPrivate::viewportRect() const +{ + Q_Q(const QWebEngineView); + return q->rect(); +} +QtWebEngineCore::RenderWidgetHostViewQtDelegate * +QWebEngineViewPrivate::CreateRenderWidgetHostViewQtDelegate( + QtWebEngineCore::RenderWidgetHostViewQtDelegateClient *client) +{ + Q_Q(QWebEngineView); + return new QtWebEngineCore::RenderWidgetHostViewQtDelegateWidget(client, q); +} + +QWebEngineContextMenuRequest *QWebEngineViewPrivate::lastContextMenuRequest() const +{ + return m_contextRequest; +} /*! \fn QWebEngineView::renderProcessTerminated(QWebEnginePage::RenderProcessTerminationStatus terminationStatus, int exitCode) \since 5.6 -- cgit v1.2.1