summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/quick/qquickwebcontentsview.cpp5
-rw-r--r--lib/quick/qquickwebcontentsview_p_p.h1
-rw-r--r--lib/quick/render_widget_host_view_qt_delegate_quick.cpp8
-rw-r--r--lib/quick/render_widget_host_view_qt_delegate_quick.h3
-rw-r--r--lib/render_widget_host_view_qt.cpp1
-rw-r--r--lib/render_widget_host_view_qt_delegate.h2
-rw-r--r--lib/web_contents_view_qt.cpp4
-rw-r--r--lib/widgets/Api/qwebcontentsview.cpp6
-rw-r--r--lib/widgets/Api/qwebcontentsview_p.h1
-rw-r--r--lib/widgets/render_widget_host_view_qt_delegate_widget.cpp9
-rw-r--r--lib/widgets/render_widget_host_view_qt_delegate_widget.h1
-rw-r--r--lib/widgets/widgets.pro2
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\