summaryrefslogtreecommitdiffstats
path: root/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp')
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp50
1 files changed, 19 insertions, 31 deletions
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 75c660086..c6d866033 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
+++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.cpp
@@ -44,9 +44,19 @@
namespace QtWebEngineCore {
-RenderWidgetHostViewQtDelegateQuickWindow::RenderWidgetHostViewQtDelegateQuickWindow(RenderWidgetHostViewQtDelegateQuick *realDelegate)
- : m_realDelegate(realDelegate)
- , m_virtualParent(nullptr)
+static inline QPoint getOffset(QQuickItem *item)
+{
+ // get parent window (scene) offset
+ QPointF offset = item->mapFromScene(QPoint(0, 0));
+ offset = item->mapToGlobal(offset);
+ // get local offset
+ offset -= item->mapToScene(QPoint(0, 0));
+ return offset.toPoint();
+}
+
+RenderWidgetHostViewQtDelegateQuickWindow::RenderWidgetHostViewQtDelegateQuickWindow(
+ RenderWidgetHostViewQtDelegateQuick *realDelegate, QWindow *parent)
+ : QQuickWindow(parent), m_realDelegate(realDelegate), m_virtualParent(nullptr)
{
setFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
}
@@ -61,29 +71,12 @@ void RenderWidgetHostViewQtDelegateQuickWindow::setVirtualParent(QQuickItem *vir
m_virtualParent = virtualParent;
}
-static inline QRectF mapRectToGlobal(const QQuickItem *item, const QRectF &rect)
-{
- const QPointF p1 = item->mapToGlobal(rect.topLeft());
- const QPointF p2 = item->mapToGlobal(rect.bottomRight());
- return QRectF(p1, p2).normalized();
-}
-
-static inline QRectF mapRectFromGlobal(const QQuickItem *item, const QRectF &rect)
+void RenderWidgetHostViewQtDelegateQuickWindow::initAsPopup(const QRect &rect)
{
- const QPointF p1 = item->mapFromGlobal(rect.topLeft());
- const QPointF p2 = item->mapFromGlobal(rect.bottomRight());
- return QRectF(p1, p2).normalized();
-}
-
-void RenderWidgetHostViewQtDelegateQuickWindow::initAsPopup(const QRect &screenRect)
-{
- QRectF popupRect(screenRect);
- popupRect = mapRectFromGlobal(m_virtualParent, popupRect);
- popupRect = m_virtualParent->mapRectToScene(popupRect);
- popupRect = mapRectToGlobal(m_virtualParent, popupRect);
- m_realDelegate->setSize(popupRect.size());
- popupRect.setSize(screenRect.size());
- setGeometry(popupRect.toAlignedRect());
+ m_realDelegate->setSize(rect.size());
+ QRect geometry(rect);
+ geometry.moveTo(rect.topLeft() - getOffset(m_virtualParent));
+ setGeometry(geometry);
raise();
show();
}
@@ -133,12 +126,7 @@ void RenderWidgetHostViewQtDelegateQuickWindow::resize(int width, int height)
void RenderWidgetHostViewQtDelegateQuickWindow::move(const QPoint &screenPos)
{
- QRectF popupRect(screenPos, size());
- popupRect = mapRectFromGlobal(m_virtualParent, popupRect);
- popupRect = m_virtualParent->mapRectToScene(popupRect);
- popupRect = mapRectToGlobal(m_virtualParent, popupRect);
-
- QQuickWindow::setPosition(popupRect.topLeft().toPoint());
+ QQuickWindow::setPosition(screenPos - getOffset(m_virtualParent));
}
} // namespace QtWebEngineCore