diff options
author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2014-04-01 10:27:13 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-08 14:00:06 +0200 |
commit | 84f31c11b77a62212451cb77adae63219e06de96 (patch) | |
tree | 97d252eee0ee8716d1a7165cd714b0d5b9552ebb /src/webenginewidgets/api | |
parent | 3cb5203cb7a4bee9a867e8616c23ce635d6a8506 (diff) |
Revert part of the RenderWidgetHostViewQtDelegate refactoring
This reverts parts of commit 9c198939be1ef064d1a2430a4b9991f2fe16f359.
This does keeps the popup fixes and removes support for
QWebEnginePage::setViewportSize and QWebEnginePage::render until
we can evaluate the needs vs the cost of such feature.
Change-Id: I1b55b751d463717b1462393ea8cd353422f8fdbb
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/webenginewidgets/api')
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 81 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage_p.h | 5 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.cpp | 37 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.h | 2 |
4 files changed, 18 insertions, 107 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 0ed9d0135..a5e5f8320 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -28,8 +28,7 @@ #include "qwebenginehistory_p.h" #include "qwebengineview.h" #include "qwebengineview_p.h" -#include "render_widget_host_view_qt_delegate_popup.h" -#include "render_widget_host_view_qt_delegate_webpage.h" +#include "render_widget_host_view_qt_delegate_widget.h" #include "web_contents_adapter.h" #include <QAction> @@ -38,6 +37,7 @@ #include <QFileDialog> #include <QIcon> #include <QInputDialog> +#include <QLayout> #include <QMenu> #include <QMessageBox> #include <QStandardPaths> @@ -152,6 +152,7 @@ QWebEnginePagePrivate::QWebEnginePagePrivate() , history(new QWebEngineHistory(new QWebEngineHistoryPrivate(this))) , view(0) { + adapter->initialize(this); memset(actions, 0, sizeof(actions)); } @@ -163,13 +164,7 @@ QWebEnginePagePrivate::~QWebEnginePagePrivate() RenderWidgetHostViewQtDelegate *QWebEnginePagePrivate::CreateRenderWidgetHostViewQtDelegate(RenderWidgetHostViewQtDelegateClient *client, RenderingMode mode) { Q_UNUSED(mode); - return new RenderWidgetHostViewQtDelegateWebPage(client); -} - -RenderWidgetHostViewQtDelegate *QWebEnginePagePrivate::CreateRenderWidgetHostViewQtDelegateForPopup(RenderWidgetHostViewQtDelegateClient *client, WebContentsAdapterClient::RenderingMode) -{ - Q_ASSERT(m_rwhvDelegate); - return new RenderWidgetHostViewQtDelegatePopup(client, view); + return new RenderWidgetHostViewQtDelegateWidget(client); } void QWebEnginePagePrivate::titleChanged(const QString &title) @@ -204,10 +199,12 @@ void QWebEnginePagePrivate::selectionChanged() QRectF QWebEnginePagePrivate::viewportRect() const { - QRectF rect(QPointF(), viewportSize); - if (view) - rect.setTopLeft(view->rect().topLeft()); - return rect; + return view ? view->rect() : QRectF(); +} + +QPoint QWebEnginePagePrivate::mapToGlobal(const QPoint &posInView) const +{ + return view ? view->mapToGlobal(posInView) : QPoint(); } qreal QWebEnginePagePrivate::dpiScale() const @@ -366,8 +363,6 @@ void QWebEnginePagePrivate::recreateFromSerializedHistory(QDataStream &input) QWebEnginePage::QWebEnginePage(QObject* parent) : QObject(*new QWebEnginePagePrivate, parent) { - Q_D(QWebEnginePage); - d->adapter->initialize(d); } QWebEnginePage::~QWebEnginePage() @@ -528,32 +523,9 @@ void QWebEnginePage::findText(const QString &subString, FindFlags options, const } } -QSize QWebEnginePage::viewportSize() const -{ - Q_D(const QWebEnginePage); - return d->viewportSize; -} - -void QWebEnginePage::setViewportSize(const QSize &size) -{ - Q_D(QWebEnginePage); - d->viewportSize = size; - if (d->m_rwhvDelegate) - d->m_rwhvDelegate->notifyResize(); -} - bool QWebEnginePage::event(QEvent *e) { - Q_D(QWebEnginePage); - if (!d->m_rwhvDelegate) { - // FIXME: implement a signal when the render process crashes and keep track of it at this level - // Ideally, this should be Q_ASSERT(!d->m_renderProcessLive) or something along those lines - qWarning("%s: no render process running?\n", Q_FUNC_INFO); - return false; - } - if (!d->m_rwhvDelegate->forwardEvent(e)) - return QObject::event(e); - return true; + return QObject::event(e); } bool QWebEnginePagePrivate::contextMenuRequested(const WebEngineContextMenuData &data) @@ -759,22 +731,6 @@ QUrl QWebEnginePage::requestedUrl() const return d->adapter->requestedUrl(); } -void QWebEnginePage::render(QPainter *p, const QRegion &clip) -{ - Q_D(const QWebEnginePage); - if (!d->m_rwhvDelegate) { - // Most likely the render process crashed. See QWebEnginePage::event - return; - } - if (!clip.isNull()) { - p->save(); - p->setClipRegion(clip); - } - d->m_rwhvDelegate->paint(p, QRectF(clip.boundingRect())); - if (!clip.isNull()) - p->restore(); -} - qreal QWebEnginePage::zoomFactor() const { Q_D(const QWebEnginePage); @@ -787,21 +743,6 @@ void QWebEnginePage::setZoomFactor(qreal factor) d->adapter->setZoomFactor(factor); } -bool QWebEnginePage::hasFocus() const -{ - Q_D(const QWebEnginePage); - if (d->view) - return d->view->hasFocus(); - return false; -} - -void QWebEnginePage::setFocus() -{ - Q_D(QWebEnginePage); - if (d->view) - d->view->setFocus(); -} - void QWebEnginePage::runJavaScript(const QString &scriptSource, const QString &xPath) { Q_D(QWebEnginePage); diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h index 927519008..e487ff37c 100644 --- a/src/webenginewidgets/api/qwebenginepage_p.h +++ b/src/webenginewidgets/api/qwebenginepage_p.h @@ -45,7 +45,6 @@ #include "qwebenginepage.h" #include "web_contents_adapter_client.h" -#include "render_widget_host_view_qt_delegate_webpage.h" #include <QtCore/private/qobject_p.h> #include <QtCore/qcompilerdetection.h> #include <QSharedData> @@ -110,13 +109,14 @@ public: ~QWebEnginePagePrivate(); virtual RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegate(RenderWidgetHostViewQtDelegateClient *client, RenderingMode mode) Q_DECL_OVERRIDE; - virtual RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegateForPopup(RenderWidgetHostViewQtDelegateClient *client, RenderingMode) Q_DECL_OVERRIDE; + virtual RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegateForPopup(RenderWidgetHostViewQtDelegateClient *client, RenderingMode mode) Q_DECL_OVERRIDE { return CreateRenderWidgetHostViewQtDelegate(client, mode); } virtual void titleChanged(const QString&) Q_DECL_OVERRIDE; virtual void urlChanged(const QUrl&) Q_DECL_OVERRIDE; virtual void iconChanged(const QUrl&) Q_DECL_OVERRIDE; virtual void loadProgressChanged(int progress) Q_DECL_OVERRIDE; virtual void selectionChanged() Q_DECL_OVERRIDE; virtual QRectF viewportRect() const Q_DECL_OVERRIDE; + virtual QPoint mapToGlobal(const QPoint &posInView) const Q_DECL_OVERRIDE; virtual qreal dpiScale() const Q_DECL_OVERRIDE; virtual void loadStarted(const QUrl &provisionalUrl) Q_DECL_OVERRIDE; virtual void loadCommitted() Q_DECL_OVERRIDE; @@ -150,7 +150,6 @@ public: QSize viewportSize; QUrl m_explicitUrl; WebEngineContextMenuData m_menuData; - QPointer<RenderWidgetHostViewQtDelegateWebPage> m_rwhvDelegate; mutable CallbackDirectory m_callbacks; mutable QAction *actions[QWebEnginePage::WebActionCount]; diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index 3f3fdd7cd..c8fe9c383 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -48,6 +48,7 @@ #include <QAction> #include <QMenu> #include <QContextMenuEvent> +#include <QStackedLayout> QT_BEGIN_NAMESPACE @@ -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) { @@ -81,7 +83,6 @@ void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page) QObject::connect(page, &QWebEnginePage::loadProgress, view, &QWebEngineView::loadProgress); QObject::connect(page, &QWebEnginePage::loadFinished, view, &QWebEngineView::loadFinished); QObject::connect(page, &QWebEnginePage::selectionChanged, view, &QWebEngineView::selectionChanged); - page->setViewportSize(view->size()); } } @@ -94,10 +95,8 @@ QWebEngineViewPrivate::QWebEngineViewPrivate() QWebEngineView::QWebEngineView(QWidget *parent) : QWidget(*(new QWebEngineViewPrivate), parent, 0) { - setFocusPolicy(Qt::ClickFocus); - setMouseTracking(true); - setAttribute(Qt::WA_AcceptTouchEvents); - setAttribute(Qt::WA_OpaquePaintEvent); + // This causes the child RenderWidgetHostViewQtDelegateWidgets to fill this widget. + setLayout(new QStackedLayout); } QWebEngineView::~QWebEngineView() @@ -222,41 +221,15 @@ void QWebEngineView::setZoomFactor(qreal factor) bool QWebEngineView::event(QEvent *ev) { - Q_D(QWebEngineView); // We swallow spontaneous contextMenu events and synthethize those back later on when we get the // HandleContextMenu callback from chromium if (ev->type() == QEvent::ContextMenu) { ev->accept(); return true; - - // Meta calls are not safe to forward to the page, as they could be widget specific (e.g. QWidgetPrivate::_q_showIfNotHidden) - // ToolTip events need to be processed at the widget level for the tooltip to show. - } else if (ev->type() == QEvent::MetaCall - || ev->type() == QEvent::ToolTip) - return QWidget::event(ev); - if (d->page && d->page->event(ev)) - return true; - + } return QWidget::event(ev); } -void QWebEngineView::paintEvent(QPaintEvent *ev) -{ - Q_D(QWebEngineView); - if (!d->page) - return; - QPainter painter(this); - d->page->render(&painter, QRegion(ev->rect())); -} - -void QWebEngineView::resizeEvent(QResizeEvent *ev) -{ - Q_D(QWebEngineView); - if (!d->page) - return; - d->page->setViewportSize(ev->size()); -} - void QWebEngineView::contextMenuEvent(QContextMenuEvent *event) { QMenu *menu = page()->createStandardContextMenu(); diff --git a/src/webenginewidgets/api/qwebengineview.h b/src/webenginewidgets/api/qwebengineview.h index 836e61be3..5e7dfa0e9 100644 --- a/src/webenginewidgets/api/qwebengineview.h +++ b/src/webenginewidgets/api/qwebengineview.h @@ -132,8 +132,6 @@ protected: virtual QWebEngineView *createWindow(QWebEnginePage::WebWindowType type); virtual void contextMenuEvent(QContextMenuEvent*) Q_DECL_OVERRIDE; virtual bool event(QEvent*) Q_DECL_OVERRIDE; - virtual void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE; - virtual void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE; private: Q_DECLARE_PRIVATE(QWebEngineView); |