diff options
-rw-r--r-- | lib/quick/qquickwebcontentsview.cpp | 5 | ||||
-rw-r--r-- | lib/quick/qquickwebcontentsview_p_p.h | 1 | ||||
-rw-r--r-- | lib/quick/render_widget_host_view_qt_delegate_quick.cpp | 8 | ||||
-rw-r--r-- | lib/quick/render_widget_host_view_qt_delegate_quick.h | 3 | ||||
-rw-r--r-- | lib/render_widget_host_view_qt.cpp | 1 | ||||
-rw-r--r-- | lib/render_widget_host_view_qt_delegate.h | 2 | ||||
-rw-r--r-- | lib/web_contents_view_qt.cpp | 4 | ||||
-rw-r--r-- | lib/widgets/Api/qwebcontentsview.cpp | 6 | ||||
-rw-r--r-- | lib/widgets/Api/qwebcontentsview_p.h | 1 | ||||
-rw-r--r-- | lib/widgets/render_widget_host_view_qt_delegate_widget.cpp | 9 | ||||
-rw-r--r-- | lib/widgets/render_widget_host_view_qt_delegate_widget.h | 1 | ||||
-rw-r--r-- | lib/widgets/widgets.pro | 2 |
12 files changed, 32 insertions, 11 deletions
diff --git a/lib/quick/qquickwebcontentsview.cpp b/lib/quick/qquickwebcontentsview.cpp index 18bccd107..48ba0fb60 100644 --- a/lib/quick/qquickwebcontentsview.cpp +++ b/lib/quick/qquickwebcontentsview.cpp @@ -55,10 +55,7 @@ QQuickWebContentsViewPrivate::QQuickWebContentsViewPrivate() RenderWidgetHostViewQtDelegate *QQuickWebContentsViewPrivate::CreateRenderWidgetHostViewQtDelegate() { - Q_Q(QQuickWebContentsView); - // Parent the RWHVQtDelegate directly, this might have to be changed to handle popups and fullscreen. - RenderWidgetHostViewQtDelegateQuick *viewDelegate = new RenderWidgetHostViewQtDelegateQuick(q); - return viewDelegate; + return new RenderWidgetHostViewQtDelegateQuick; } void QQuickWebContentsViewPrivate::titleChanged(const QString &title) diff --git a/lib/quick/qquickwebcontentsview_p_p.h b/lib/quick/qquickwebcontentsview_p_p.h index faf9d1ccf..51f805881 100644 --- a/lib/quick/qquickwebcontentsview_p_p.h +++ b/lib/quick/qquickwebcontentsview_p_p.h @@ -66,6 +66,7 @@ public: virtual void focusContainer() Q_DECL_OVERRIDE; QScopedPointer<WebContentsAdapter> adapter; + friend class RenderWidgetHostViewQtDelegateQuick; }; #endif // QQUICKWEBCONTENTSVIEW_P_P_H diff --git a/lib/quick/render_widget_host_view_qt_delegate_quick.cpp b/lib/quick/render_widget_host_view_qt_delegate_quick.cpp index 451d92044..5610beabb 100644 --- a/lib/quick/render_widget_host_view_qt_delegate_quick.cpp +++ b/lib/quick/render_widget_host_view_qt_delegate_quick.cpp @@ -41,6 +41,8 @@ #include "render_widget_host_view_qt_delegate_quick.h" +#include "qquickwebcontentsview_p.h" +#include "qquickwebcontentsview_p_p.h" #include <QQuickWindow> #include <QWindow> @@ -51,6 +53,12 @@ RenderWidgetHostViewQtDelegateQuick::RenderWidgetHostViewQtDelegateQuick(QQuickI setAcceptHoverEvents(true); } +void RenderWidgetHostViewQtDelegateQuick::initAsChild(WebContentsAdapterClient* container) +{ + QQuickWebContentsViewPrivate *viewPrivate = static_cast<QQuickWebContentsViewPrivate *>(container); + setParentItem(viewPrivate->q_func()); +} + QRectF RenderWidgetHostViewQtDelegateQuick::screenRect() const { QPointF pos = mapToScene(QPointF(0,0)); diff --git a/lib/quick/render_widget_host_view_qt_delegate_quick.h b/lib/quick/render_widget_host_view_qt_delegate_quick.h index 1bf8aa8da..b08ec3051 100644 --- a/lib/quick/render_widget_host_view_qt_delegate_quick.h +++ b/lib/quick/render_widget_host_view_qt_delegate_quick.h @@ -67,8 +67,9 @@ class RenderWidgetHostViewQtDelegateQuick : public QQuickPaintedItem, public Ren { Q_OBJECT public: - RenderWidgetHostViewQtDelegateQuick(QQuickItem *parent); + RenderWidgetHostViewQtDelegateQuick(QQuickItem *parent = 0); + virtual void initAsChild(WebContentsAdapterClient* container); virtual QRectF screenRect() const; virtual void setKeyboardFocus(); virtual bool hasKeyboardFocus(); diff --git a/lib/render_widget_host_view_qt.cpp b/lib/render_widget_host_view_qt.cpp index d3a22f5cc..922c0d57a 100644 --- a/lib/render_widget_host_view_qt.cpp +++ b/lib/render_widget_host_view_qt.cpp @@ -161,6 +161,7 @@ content::BackingStore *RenderWidgetHostViewQt::AllocBackingStore(const gfx::Size void RenderWidgetHostViewQt::InitAsChild(gfx::NativeView parent_view) { + m_delegate->initAsChild(reinterpret_cast<WebContentsAdapterClient*>(parent_view)); } void RenderWidgetHostViewQt::InitAsPopup(content::RenderWidgetHostView*, const gfx::Rect&) diff --git a/lib/render_widget_host_view_qt_delegate.h b/lib/render_widget_host_view_qt_delegate.h index a4ccca337..34f03d125 100644 --- a/lib/render_widget_host_view_qt_delegate.h +++ b/lib/render_widget_host_view_qt_delegate.h @@ -53,11 +53,13 @@ class QEvent; class QPainter; class QWindow; class RenderWidgetHostViewQt; +class WebContentsAdapterClient; class QWEBENGINE_EXPORT RenderWidgetHostViewQtDelegate { public: virtual ~RenderWidgetHostViewQtDelegate(); + virtual void initAsChild(WebContentsAdapterClient*) = 0; virtual QRectF screenRect() const = 0; virtual void setKeyboardFocus() = 0; virtual bool hasKeyboardFocus() = 0; diff --git a/lib/web_contents_view_qt.cpp b/lib/web_contents_view_qt.cpp index f447349a8..09863ca9e 100644 --- a/lib/web_contents_view_qt.cpp +++ b/lib/web_contents_view_qt.cpp @@ -52,6 +52,10 @@ content::RenderWidgetHostView* WebContentsViewQt::CreateViewForWidget(content::R RenderWidgetHostViewQt *view = new RenderWidgetHostViewQt(render_widget_host); RenderWidgetHostViewQtDelegate* viewDelegate = m_client->CreateRenderWidgetHostViewQtDelegate(); view->SetDelegate(viewDelegate); + // The delegate has been bound to its view, now initialize it. + // gfx::NativeView logically maps to our client here but the reinterpret_cast is still ugly. + // The alternative is be to have a duplicated method with the proper signature. + view->InitAsChild(reinterpret_cast<gfx::NativeView>(m_client)); return view; } diff --git a/lib/widgets/Api/qwebcontentsview.cpp b/lib/widgets/Api/qwebcontentsview.cpp index 2ef4c04d4..dff1ebf43 100644 --- a/lib/widgets/Api/qwebcontentsview.cpp +++ b/lib/widgets/Api/qwebcontentsview.cpp @@ -96,11 +96,7 @@ void QWebContentsViewPrivate::focusContainer() RenderWidgetHostViewQtDelegate *QWebContentsViewPrivate::CreateRenderWidgetHostViewQtDelegate() { - Q_Q(QWebContentsView); - RenderWidgetHostViewQtDelegateWidget *viewDelegate = new RenderWidgetHostViewQtDelegateWidget(q); - // Parent the RWHVQtDelegate directly, this might have to be changed to handle popups and fullscreen. - q->layout()->addWidget(viewDelegate); - return viewDelegate; + return new RenderWidgetHostViewQtDelegateWidget; } QWebContentsView::QWebContentsView() diff --git a/lib/widgets/Api/qwebcontentsview_p.h b/lib/widgets/Api/qwebcontentsview_p.h index d97a098d9..6fb60c33e 100644 --- a/lib/widgets/Api/qwebcontentsview_p.h +++ b/lib/widgets/Api/qwebcontentsview_p.h @@ -68,6 +68,7 @@ public: bool m_isLoading; QScopedPointer<WebContentsAdapter> adapter; + friend class RenderWidgetHostViewQtDelegateWidget; }; #endif diff --git a/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp b/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp index 1e696537e..05b8a16e8 100644 --- a/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp +++ b/lib/widgets/render_widget_host_view_qt_delegate_widget.cpp @@ -41,7 +41,10 @@ #include "render_widget_host_view_qt_delegate_widget.h" +#include "qwebcontentsview.h" +#include "qwebcontentsview_p.h" #include <QtGlobal> +#include <QLayout> #include <QResizeEvent> #include <QPainter> #include <QPaintEvent> @@ -70,6 +73,12 @@ RenderWidgetHostViewQtDelegateWidget::RenderWidgetHostViewQtDelegateWidget(QWidg #endif } +void RenderWidgetHostViewQtDelegateWidget::initAsChild(WebContentsAdapterClient* container) +{ + QWebContentsViewPrivate *viewPrivate = static_cast<QWebContentsViewPrivate *>(container); + viewPrivate->q_func()->layout()->addWidget(this); +} + QRectF RenderWidgetHostViewQtDelegateWidget::screenRect() const { return QRectF(x(), y(), width(), height()); diff --git a/lib/widgets/render_widget_host_view_qt_delegate_widget.h b/lib/widgets/render_widget_host_view_qt_delegate_widget.h index 240f29ba5..1eec64149 100644 --- a/lib/widgets/render_widget_host_view_qt_delegate_widget.h +++ b/lib/widgets/render_widget_host_view_qt_delegate_widget.h @@ -54,6 +54,7 @@ class RenderWidgetHostViewQtDelegateWidget : public QWidget, public RenderWidget public: RenderWidgetHostViewQtDelegateWidget(QWidget *parent = 0); + virtual void initAsChild(WebContentsAdapterClient* container); virtual QRectF screenRect() const; virtual void setKeyboardFocus(); virtual bool hasKeyboardFocus(); diff --git a/lib/widgets/widgets.pro b/lib/widgets/widgets.pro index 351264d57..3fd9b1f80 100644 --- a/lib/widgets/widgets.pro +++ b/lib/widgets/widgets.pro @@ -19,7 +19,7 @@ QMAKE_RPATHDIR += $$LIBPATH DESTDIR = $$LIBPATH -INCLUDEPATH += ../ +INCLUDEPATH += Api ../ SOURCES = \ Api/qwebcontentsview.cpp\ |