diff options
author | Pierre Rossi <pierre.rossi@digia.com> | 2014-02-12 19:25:57 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-02 00:07:52 +0200 |
commit | c5431da0b11b2b73abee62751565a7d20757040f (patch) | |
tree | e4caffcc91a361d937f6dfa2720f4979e0cee33b /src/webengine/render_widget_host_view_qt_delegate_quick.h | |
parent | d13d953feceb2e72959f7b9aaf45720dcae49e8a (diff) |
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 <jocelyn.turcotte@digia.com>
Diffstat (limited to 'src/webengine/render_widget_host_view_qt_delegate_quick.h')
-rw-r--r-- | src/webengine/render_widget_host_view_qt_delegate_quick.h | 27 |
1 files changed, 20 insertions, 7 deletions
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<typename ItemBaseT> 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<QQuickWebEngineViewPrivate *>(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<QQuickItem> { 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; |