From c5431da0b11b2b73abee62751565a7d20757040f Mon Sep 17 00:00:00 2001 From: Pierre Rossi Date: Wed, 12 Feb 2014 19:25:57 +0100 Subject: Make WebUI popups work with QtQuick This is used by popups for select elements and date pickers among other things. We can keep using the same RenderWidgetHostViewQtDelegate implementations for that purpose, and query QPA to decide if they should be wrapped into their own QQuickWindow. Longer term, we might want to optionally delegate that functionality to QML. Change-Id: I88540ca32a9a707d380dfbf486b7f7806b5b65ff Reviewed-by: Jocelyn Turcotte --- .../render_widget_host_view_qt_delegate_quick.h | 27 ++++++++++++++++------ 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'src/webengine/render_widget_host_view_qt_delegate_quick.h') 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 f4d72117a..47884068e 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.h +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.h @@ -56,12 +56,18 @@ template class RenderWidgetHostViewQtDelegateQuickBase : public ItemBaseT, public RenderWidgetHostViewQtDelegate { public: - RenderWidgetHostViewQtDelegateQuickBase(RenderWidgetHostViewQtDelegateClient *client, QQuickItem *parent = 0) - : ItemBaseT(parent) - , m_client(client) + 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 @@ -69,15 +75,19 @@ public: QQuickWebEngineViewPrivate *viewPrivate = static_cast(container); this->setParentItem(viewPrivate->q_func()); this->setSize(viewPrivate->q_func()->boundingRect().size()); + m_initialized = true; } - virtual void initAsPopup(const QRect& rect) Q_DECL_OVERRIDE + 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 @@ -145,7 +155,8 @@ public: void mousePressEvent(QMouseEvent *event) { - this->forceActiveFocus(); + if (!m_isPopup) + this->forceActiveFocus(); m_client->forwardEvent(event); } @@ -219,13 +230,15 @@ protected: } RenderWidgetHostViewQtDelegateClient *m_client; + bool m_isPopup; + bool m_initialized; }; class RenderWidgetHostViewQtDelegateQuick : public RenderWidgetHostViewQtDelegateQuickBase { Q_OBJECT public: - RenderWidgetHostViewQtDelegateQuick(RenderWidgetHostViewQtDelegateClient *client, QQuickItem *parent = 0); + RenderWidgetHostViewQtDelegateQuick(RenderWidgetHostViewQtDelegateClient *client, bool isPopup); virtual void update(const QRect& rect = QRect()) Q_DECL_OVERRIDE; virtual bool supportsHardwareAcceleration() const Q_DECL_OVERRIDE; @@ -238,7 +251,7 @@ class RenderWidgetHostViewQtDelegateQuickPainted : public RenderWidgetHostViewQt { Q_OBJECT public: - RenderWidgetHostViewQtDelegateQuickPainted(RenderWidgetHostViewQtDelegateClient *client, QQuickItem *parent = 0); + RenderWidgetHostViewQtDelegateQuickPainted(RenderWidgetHostViewQtDelegateClient *client, bool isPopup); virtual void update(const QRect& rect = QRect()) Q_DECL_OVERRIDE; -- cgit v1.2.3