diff options
author | Michal Klocek <michal.klocek@qt.io> | 2020-10-16 12:15:51 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2020-11-24 09:45:04 +0100 |
commit | 2fbe10a115fb0f5f50efe192d554fb7d1c988884 (patch) | |
tree | a8dc909c7457a9f0570b8f856c007db567dea25d /src/webenginewidgets/api/qwebenginepage.cpp | |
parent | e7d3d03a7540c2fa5ac1ba88eddec6135c4ab9ab (diff) |
Drop dependency on QWebEngineView in page
Introduce temporarily PageView interface and DummyDelegate.
Change-Id: I3a3d57435c98b31a15fb6d777045e141d007486f
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/webenginewidgets/api/qwebenginepage.cpp')
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 94 |
1 files changed, 63 insertions, 31 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index cc8e00796..8307977ee 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -63,14 +63,13 @@ #include "qwebengineregisterprotocolhandlerrequest.h" #include "qwebenginescriptcollection_p.h" #include "qwebenginesettings.h" -#include "qwebengineview.h" -#include "qwebengineview_p.h" #include "user_notification_controller.h" #include "render_widget_host_view_qt_delegate_widget.h" #include "web_contents_adapter.h" #include "web_engine_settings.h" #include "qwebenginescript.h" - +#include "render_view_context_menu_qt.h" +#include "render_widget_host_view_qt_delegate_client.h" #include <QAction> #include <QApplication> #include <QAuthenticator> @@ -93,6 +92,49 @@ using namespace QtWebEngineCore; static const int MaxTooltipLength = 1024; +// add temporary dummy code to cover the case when page is loading and there is no view +class DummyDelegate : public QObject, public QtWebEngineCore::RenderWidgetHostViewQtDelegate +{ +public: + DummyDelegate(RenderWidgetHostViewQtDelegateClient *client) : m_delegateClient(client) {}; + ~DummyDelegate() = default; + void initAsPopup(const QRect &) override { Q_UNREACHABLE(); } + QRectF viewGeometry() const override { return QRectF(m_pos, m_size); } + void setKeyboardFocus() override { } + bool hasKeyboardFocus() override { return false; } + void lockMouse() override { Q_UNREACHABLE(); } + void unlockMouse() override { Q_UNREACHABLE(); } + void show() override { m_delegateClient->notifyShown(); } + void hide() override { m_delegateClient->notifyHidden(); } + bool isVisible() const override { Q_UNREACHABLE(); } + QWindow *window() const override { return nullptr; } + void updateCursor(const QCursor &cursor) override + { /*setCursor(cursor);*/ + } + void resize(int width, int height) override + { + m_size = QSize(width, height); + m_delegateClient->visualPropertiesChanged(); + } + void move(const QPoint &) override { Q_UNREACHABLE(); } + void inputMethodStateChanged(bool, bool) override { } + void setInputMethodHints(Qt::InputMethodHints) override { } + void setClearColor(const QColor &) override { } + void adapterClientChanged(WebContentsAdapterClient *client) override { } + bool copySurface(const QRect &rect, const QSize &size, QImage &image) + { + Q_UNREACHABLE(); + return false; + } + QRect windowGeometry() const override { return QRect(m_pos, m_size); } + bool forwardEvent(QEvent *ev) { return m_delegateClient->forwardEvent(ev); } + +private: + RenderWidgetHostViewQtDelegateClient *m_delegateClient; + QPoint m_pos; + QSize m_size; +}; + static QWebEnginePage::WebWindowType toWindowType(WebContentsAdapterClient::WindowOpenDisposition disposition) { switch (disposition) { @@ -159,7 +201,7 @@ RenderWidgetHostViewQtDelegate *QWebEnginePagePrivate::CreateRenderWidgetHostVie // The new delegate will not be deleted by the parent view though, because we unset the parent // when the parent is destroyed. The delegate will be destroyed by Chromium when the popup is // dismissed. - return new RenderWidgetHostViewQtDelegateWidget(client, this->view); + return view ? view->CreateRenderWidgetHostViewQtDelegate(client) : new DummyDelegate(client); } void QWebEnginePagePrivate::initializationFinished() @@ -243,7 +285,7 @@ void QWebEnginePagePrivate::renderProcessPidChanged(qint64 pid) QRectF QWebEnginePagePrivate::viewportRect() const { - return view ? view->rect() : QRectF(); + return view ? view->viewportRect() : QRectF(); } QColor QWebEnginePagePrivate::backgroundColor() const @@ -298,15 +340,15 @@ void QWebEnginePagePrivate::didPrintPageToPdf(const QString &filePath, bool succ void QWebEnginePagePrivate::focusContainer() { if (view) { - view->activateWindow(); - view->setFocus(); + view->focusContainer(); } } void QWebEnginePagePrivate::unhandledKeyEvent(QKeyEvent *event) { - if (view && view->parentWidget()) - QGuiApplication::sendEvent(view->parentWidget(), event); + if (view) { + view->unhandledKeyEvent(event); + } } QSharedPointer<WebContentsAdapter> @@ -415,9 +457,7 @@ void QWebEnginePagePrivate::didPrintPage(quint64 requestId, QSharedPointer<QByte bool QWebEnginePagePrivate::passOnFocus(bool reverse) { - if (view) - return view->focusNextPrevChild(!reverse); - return false; + return view ? view->passOnFocus(reverse) : false; } void QWebEnginePagePrivate::authenticationRequired(QSharedPointer<AuthenticationDialogController> controller) @@ -450,7 +490,7 @@ void QWebEnginePagePrivate::releaseProfile() void QWebEnginePagePrivate::showColorDialog(QSharedPointer<ColorChooserController> controller) { if (view) - view->d_func()->showColorDialog(controller); + view->showColorDialog(controller); } void QWebEnginePagePrivate::runMediaAccessPermissionRequest(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags requestFlags) @@ -512,7 +552,7 @@ void QWebEnginePagePrivate::runRegisterProtocolHandlerRequest(QWebEngineRegister QObject *QWebEnginePagePrivate::accessibilityParentObject() { - return view; + return view ? view->accessibilityParentObject() : nullptr; } void QWebEnginePagePrivate::updateAction(QWebEnginePage::WebAction action) const @@ -1522,7 +1562,7 @@ bool QWebEnginePage::event(QEvent *e) void QWebEnginePagePrivate::contextMenuRequested(QWebEngineContextMenuRequest *data) { if (view) - view->d_ptr->contextMenuRequested(data); + view->contextMenuRequested(data); } void QWebEnginePagePrivate::navigationRequested(int navigationType, const QUrl &url, int &navigationRequestAction, bool isMainFrame) @@ -1568,8 +1608,7 @@ void QWebEnginePagePrivate::javascriptDialog(QSharedPointer<JavaScriptDialogCont accepted = q->javaScriptConfirm(controller->securityOrigin(), QCoreApplication::translate("QWebEnginePage", "Are you sure you want to leave this page? Changes that you made may not be saved.")); break; case InternalAuthorizationDialog: - accepted = view ? view->d_func()->showAuthorizationDialog(controller->title(), - controller->message()) + accepted = view ? view->showAuthorizationDialog(controller->title(), controller->message()) : false; break; } @@ -1641,9 +1680,8 @@ QObject *QWebEnginePagePrivate::dragSource() const bool QWebEnginePagePrivate::isEnabled() const { - const QWidget *widget = view; - if (widget) - return widget->isEnabled(); + if (view) + return view->isEnabled(); return true; } @@ -2003,12 +2041,7 @@ QWebEngineScriptCollection &QWebEnginePage::scripts() QWebEnginePage *QWebEnginePage::createWindow(WebWindowType type) { Q_D(QWebEnginePage); - if (d->view) { - QWebEngineView *newView = d->view->createWindow(type); - if (newView) - return newView->page(); - } - return 0; + return d->view ? d->view->createPageForWindow(type) : nullptr; } /*! @@ -2107,8 +2140,7 @@ ASSERT_ENUMS_MATCH(FilePickerController::OpenMultiple, QWebEnginePage::FileSelec QStringList QWebEnginePage::chooseFiles(FileSelectionMode mode, const QStringList &oldFiles, const QStringList &acceptedMimeTypes) { Q_D(const QWebEnginePage); - return d->view ? d->view->d_func()->chooseFiles(mode, oldFiles, acceptedMimeTypes) - : QStringList(); + return d->view ? d->view->chooseFiles(mode, oldFiles, acceptedMimeTypes) : QStringList(); } void QWebEnginePage::javaScriptAlert(const QUrl &securityOrigin, const QString &msg) @@ -2116,21 +2148,21 @@ void QWebEnginePage::javaScriptAlert(const QUrl &securityOrigin, const QString & Q_UNUSED(securityOrigin); Q_D(const QWebEnginePage); if (d->view) - d->view->d_func()->javaScriptAlert(url(), msg); + d->view->javaScriptAlert(url(), msg); } bool QWebEnginePage::javaScriptConfirm(const QUrl &securityOrigin, const QString &msg) { Q_UNUSED(securityOrigin); Q_D(const QWebEnginePage); - return d->view ? d->view->d_func()->javaScriptConfirm(url(), msg) : false; + return d->view ? d->view->javaScriptConfirm(url(), msg) : false; } bool QWebEnginePage::javaScriptPrompt(const QUrl &securityOrigin, const QString &msg, const QString &defaultValue, QString *result) { Q_UNUSED(securityOrigin); Q_D(const QWebEnginePage); - return d->view ? d->view->d_func()->javaScriptPrompt(url(), msg, defaultValue, result) : false; + return d->view ? d->view->javaScriptPrompt(url(), msg, defaultValue, result) : false; } void QWebEnginePage::javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString &message, int lineNumber, const QString &sourceID) |