summaryrefslogtreecommitdiffstats
path: root/src/webengine
diff options
context:
space:
mode:
Diffstat (limited to 'src/webengine')
-rw-r--r--src/webengine/api/qquickwebengineview.cpp5
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quick.cpp168
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quick.h221
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp1
4 files changed, 206 insertions, 189 deletions
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 93cc1c9a1..2b71d1f45 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -52,15 +52,14 @@
#include "web_contents_adapter.h"
#include "web_engine_error.h"
-#include <QQmlEngine>
+#include <QGuiApplication>
#include <QQmlComponent>
#include <QQmlContext>
+#include <QQmlEngine>
#include <QQmlProperty>
#include <QScreen>
#include <QStringBuilder>
#include <QUrl>
-#include <QQmlEngine>
-
#include <private/qqmlmetatype_p.h>
#include <private/qguiapplication_p.h>
#include <qpa/qplatformintegration.h>
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
index c755619e8..4dc9031ad 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
+++ b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
@@ -41,10 +41,83 @@
#include "render_widget_host_view_qt_delegate_quick.h"
+#include "qquickwebengineview_p.h"
+#include "qquickwebengineview_p_p.h"
+#include <QGuiApplication>
+#include <QQuickPaintedItem>
+#include <QQuickWindow>
+#include <QVariant>
+#include <QWindow>
+
RenderWidgetHostViewQtDelegateQuick::RenderWidgetHostViewQtDelegateQuick(RenderWidgetHostViewQtDelegateClient *client, bool isPopup)
- : RenderWidgetHostViewQtDelegateQuickBase<QQuickItem>(client, isPopup)
+ : m_client(client)
+ , m_isPopup(isPopup)
+ , m_initialized(false)
{
setFlag(ItemHasContents);
+ setAcceptedMouseButtons(Qt::AllButtons);
+ setAcceptHoverEvents(true);
+ if (isPopup)
+ return;
+ setFocus(true);
+ setActiveFocusOnTab(true);
+ setFlag(QQuickItem::ItemIsFocusScope);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::initAsChild(WebContentsAdapterClient* container)
+{
+ QQuickWebEngineViewPrivate *viewPrivate = static_cast<QQuickWebEngineViewPrivate *>(container);
+ setParentItem(viewPrivate->q_func());
+ setSize(viewPrivate->q_func()->boundingRect().size());
+ m_initialized = true;
+}
+
+void RenderWidgetHostViewQtDelegateQuick::initAsPopup(const QRect &r)
+{
+ Q_ASSERT(m_isPopup && parentItem());
+ QRectF rect(parentItem()->mapRectFromScene(r));
+ setX(rect.x());
+ setY(rect.y());
+ setWidth(rect.width());
+ setHeight(rect.height());
+ setVisible(true);
+ m_initialized = true;
+}
+
+QRectF RenderWidgetHostViewQtDelegateQuick::screenRect() const
+{
+ QPointF pos = mapToScene(QPointF(0,0));
+ return QRectF(pos.x(), pos.y(), width(), height());
+}
+
+void RenderWidgetHostViewQtDelegateQuick::setKeyboardFocus()
+{
+ setFocus(true);
+}
+
+bool RenderWidgetHostViewQtDelegateQuick::hasKeyboardFocus()
+{
+ return hasFocus();
+}
+
+void RenderWidgetHostViewQtDelegateQuick::show()
+{
+ setVisible(true);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::hide()
+{
+ setVisible(false);
+}
+
+bool RenderWidgetHostViewQtDelegateQuick::isVisible() const
+{
+ return QQuickItem::isVisible();
+}
+
+QWindow* RenderWidgetHostViewQtDelegateQuick::window() const
+{
+ return QQuickItem::window();
}
void RenderWidgetHostViewQtDelegateQuick::update()
@@ -52,6 +125,99 @@ void RenderWidgetHostViewQtDelegateQuick::update()
QQuickItem::update();
}
+void RenderWidgetHostViewQtDelegateQuick::updateCursor(const QCursor &cursor)
+{
+ setCursor(cursor);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::resize(int width, int height)
+{
+ setSize(QSizeF(width, height));
+}
+
+void RenderWidgetHostViewQtDelegateQuick::inputMethodStateChanged(bool editorVisible)
+{
+ if (qApp->inputMethod()->isVisible() == editorVisible)
+ return;
+
+ setFlag(QQuickItem::ItemAcceptsInputMethod, editorVisible);
+ qApp->inputMethod()->update(Qt::ImQueryInput | Qt::ImEnabled | Qt::ImHints);
+ qApp->inputMethod()->setVisible(editorVisible);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::focusInEvent(QFocusEvent *event)
+{
+ m_client->forwardEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::focusOutEvent(QFocusEvent *event)
+{
+ m_client->forwardEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::mousePressEvent(QMouseEvent *event)
+{
+ if (!m_isPopup)
+ forceActiveFocus();
+ m_client->forwardEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::mouseMoveEvent(QMouseEvent *event)
+{
+ m_client->forwardEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::mouseReleaseEvent(QMouseEvent *event)
+{
+ m_client->forwardEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::mouseDoubleClickEvent(QMouseEvent *event)
+{
+ m_client->forwardEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::keyPressEvent(QKeyEvent *event)
+{
+ m_client->forwardEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::keyReleaseEvent(QKeyEvent *event)
+{
+ m_client->forwardEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::wheelEvent(QWheelEvent *event)
+{
+ m_client->forwardEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::touchEvent(QTouchEvent *event)
+{
+ m_client->forwardEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::hoverMoveEvent(QHoverEvent *event)
+{
+ m_client->forwardEvent(event);
+}
+
+QVariant RenderWidgetHostViewQtDelegateQuick::inputMethodQuery(Qt::InputMethodQuery query) const
+{
+ return m_client->inputMethodQuery(query);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::inputMethodEvent(QInputMethodEvent *event)
+{
+ m_client->forwardEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+{
+ QQuickItem::geometryChanged(newGeometry, oldGeometry);
+ m_client->notifyResize();
+}
+
void RenderWidgetHostViewQtDelegateQuick::itemChange(ItemChange change, const ItemChangeData &value)
{
QQuickItem::itemChange(change, value);
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.h b/src/webengine/render_widget_host_view_qt_delegate_quick.h
index 03e39a8d2..71a2de013 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quick.h
+++ b/src/webengine/render_widget_host_view_qt_delegate_quick.h
@@ -44,200 +44,51 @@
#include "render_widget_host_view_qt_delegate.h"
-#include "qquickwebengineview_p.h"
-#include "qquickwebengineview_p_p.h"
-#include <QGuiApplication>
-#include <QQuickPaintedItem>
-#include <QQuickWindow>
-#include <QVariant>
-#include <QWindow>
+#include <QQuickItem>
-template<typename ItemBaseT>
-class RenderWidgetHostViewQtDelegateQuickBase : public ItemBaseT, public RenderWidgetHostViewQtDelegate
-{
-public:
- RenderWidgetHostViewQtDelegateQuickBase(RenderWidgetHostViewQtDelegateClient *client, bool isPopup)
- : m_client(client)
- , m_isPopup(isPopup)
- , m_initialized(false)
- {
- this->setAcceptedMouseButtons(Qt::AllButtons);
- this->setAcceptHoverEvents(true);
- if (isPopup)
- return;
- this->setFocus(true);
- this->setActiveFocusOnTab(true);
- this->setFlag(QQuickItem::ItemIsFocusScope);
- }
-
- virtual void initAsChild(WebContentsAdapterClient* container) Q_DECL_OVERRIDE
- {
- QQuickWebEngineViewPrivate *viewPrivate = static_cast<QQuickWebEngineViewPrivate *>(container);
- this->setParentItem(viewPrivate->q_func());
- this->setSize(viewPrivate->q_func()->boundingRect().size());
- m_initialized = true;
- }
-
- virtual void initAsPopup(const QRect &r) Q_DECL_OVERRIDE
- {
- Q_ASSERT(m_isPopup && this->parentItem());
- QRectF rect(this->parentItem()->mapRectFromScene(r));
- this->setX(rect.x());
- this->setY(rect.y());
- this->setWidth(rect.width());
- this->setHeight(rect.height());
- this->setVisible(true);
- m_initialized = true;
- }
-
- virtual QRectF screenRect() const Q_DECL_OVERRIDE
- {
- QPointF pos = this->mapToScene(QPointF(0,0));
- return QRectF(pos.x(), pos.y(), this->width(), this->height());
- }
-
- virtual void setKeyboardFocus() Q_DECL_OVERRIDE
- {
- this->setFocus(true);
- }
-
- virtual bool hasKeyboardFocus() Q_DECL_OVERRIDE
- {
- return this->hasFocus();
- }
-
- virtual void show() Q_DECL_OVERRIDE
- {
- this->setVisible(true);
- }
-
- virtual void hide() Q_DECL_OVERRIDE
- {
- this->setVisible(false);
- }
-
- virtual bool isVisible() const Q_DECL_OVERRIDE
- {
- return ItemBaseT::isVisible();
- }
-
- virtual QWindow* window() const Q_DECL_OVERRIDE
- {
- return ItemBaseT::window();
- }
-
- virtual void updateCursor(const QCursor &cursor) Q_DECL_OVERRIDE
- {
- this->setCursor(cursor);
- }
-
- virtual void resize(int width, int height) Q_DECL_OVERRIDE
- {
- this->setSize(QSizeF(width, height));
- }
-
- virtual void move(const QPoint&) Q_DECL_OVERRIDE {}
-
- void focusInEvent(QFocusEvent *event)
- {
- m_client->forwardEvent(event);
- }
-
- void focusOutEvent(QFocusEvent *event)
- {
- m_client->forwardEvent(event);
- }
-
- void mousePressEvent(QMouseEvent *event)
- {
- if (!m_isPopup)
- this->forceActiveFocus();
- m_client->forwardEvent(event);
- }
-
- void mouseMoveEvent(QMouseEvent *event)
- {
- m_client->forwardEvent(event);
- }
-
- void mouseReleaseEvent(QMouseEvent *event)
- {
- m_client->forwardEvent(event);
- }
-
- void mouseDoubleClickEvent(QMouseEvent *event)
- {
- m_client->forwardEvent(event);
- }
-
- void keyPressEvent(QKeyEvent *event)
- {
- m_client->forwardEvent(event);
- }
-
- void keyReleaseEvent(QKeyEvent *event)
- {
- m_client->forwardEvent(event);
- }
-
- void wheelEvent(QWheelEvent *event)
- {
- m_client->forwardEvent(event);
- }
-
- void touchEvent(QTouchEvent *event)
- {
- m_client->forwardEvent(event);
- }
-
- void hoverMoveEvent(QHoverEvent *event)
- {
- m_client->forwardEvent(event);
- }
-
- void inputMethodStateChanged(bool editorVisible)
- {
- if (qApp->inputMethod()->isVisible() == editorVisible)
- return;
-
- this->setFlag(QQuickItem::ItemAcceptsInputMethod, editorVisible);
- qApp->inputMethod()->update(Qt::ImQueryInput | Qt::ImEnabled | Qt::ImHints);
- qApp->inputMethod()->setVisible(editorVisible);
- }
-
- void setTooltip(const QString &) Q_DECL_OVERRIDE {}
-
- QVariant inputMethodQuery(Qt::InputMethodQuery query) const
- {
- return m_client->inputMethodQuery(query);
- }
-
- virtual void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE
- {
- m_client->forwardEvent(event);
- }
-
-protected:
- void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
- {
- ItemBaseT::geometryChanged(newGeometry, oldGeometry);
- m_client->notifyResize();
- }
-
- RenderWidgetHostViewQtDelegateClient *m_client;
- bool m_isPopup;
- bool m_initialized;
-};
-
-class RenderWidgetHostViewQtDelegateQuick : public RenderWidgetHostViewQtDelegateQuickBase<QQuickItem>
+class RenderWidgetHostViewQtDelegateQuick : public QQuickItem, public RenderWidgetHostViewQtDelegate
{
Q_OBJECT
public:
RenderWidgetHostViewQtDelegateQuick(RenderWidgetHostViewQtDelegateClient *client, bool isPopup);
+ virtual void initAsChild(WebContentsAdapterClient* container) Q_DECL_OVERRIDE;
+ virtual void initAsPopup(const QRect&) Q_DECL_OVERRIDE;
+ virtual QRectF screenRect() const Q_DECL_OVERRIDE;
+ virtual void setKeyboardFocus() Q_DECL_OVERRIDE;
+ virtual bool hasKeyboardFocus() Q_DECL_OVERRIDE;
+ virtual void show() Q_DECL_OVERRIDE;
+ virtual void hide() Q_DECL_OVERRIDE;
+ virtual bool isVisible() const Q_DECL_OVERRIDE;
+ virtual QWindow* window() const Q_DECL_OVERRIDE;
virtual void update() Q_DECL_OVERRIDE;
+ virtual void updateCursor(const QCursor &) Q_DECL_OVERRIDE;
+ virtual void resize(int width, int height) Q_DECL_OVERRIDE;
+ virtual void move(const QPoint&) Q_DECL_OVERRIDE { }
+ virtual void inputMethodStateChanged(bool editorVisible) Q_DECL_OVERRIDE;
+ virtual void setTooltip(const QString&) Q_DECL_OVERRIDE { }
+protected:
+ virtual void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ virtual void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ virtual void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ virtual void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ virtual void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
+ virtual void touchEvent(QTouchEvent *event) Q_DECL_OVERRIDE;
+ virtual void hoverMoveEvent(QHoverEvent *event) Q_DECL_OVERRIDE;
+ virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE;
+ virtual void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE;
+ virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE;
virtual void itemChange(ItemChange change, const ItemChangeData &value) Q_DECL_OVERRIDE;
virtual QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) Q_DECL_OVERRIDE;
+
+private:
+ RenderWidgetHostViewQtDelegateClient *m_client;
+ bool m_isPopup;
+ bool m_initialized;
};
#endif
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
index 04b75bd6b..b2e461450 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
+++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
@@ -41,6 +41,7 @@
#include "render_widget_host_view_qt_delegate_quickwindow.h"
+#include "qquickwebengineview_p_p.h"
#include <QQuickItem>