summaryrefslogtreecommitdiffstats
path: root/src/webengine/render_widget_host_view_qt_delegate_quick.h
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@digia.com>2014-02-12 19:25:57 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-04-02 00:07:52 +0200
commitc5431da0b11b2b73abee62751565a7d20757040f (patch)
treee4caffcc91a361d937f6dfa2720f4979e0cee33b /src/webengine/render_widget_host_view_qt_delegate_quick.h
parentd13d953feceb2e72959f7b9aaf45720dcae49e8a (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.h27
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;