diff options
author | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2021-08-06 11:35:25 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-08-09 17:14:16 +0000 |
commit | e7204f4658f6dee169481657ccda17c115ab2c7c (patch) | |
tree | 9f163fe0af177ece157c499cce604f9ea7ba39ba /src/quicktemplates2 | |
parent | dcce7e732d9182cd19d4fa8c3284762307f99ebd (diff) |
SelectionRectangle: ensure we track correctly which handle is being dragged
As it stood, we would check if the user dragged on the top-left handle
by checking which component was being used to instatiate the handle.
This goes wrong if both the top-left and the bottom-right handle
is instantiated from the same delegate component.
This patch will make it explicit which handle is being instatiated
instead.
Fixes: QTBUG-95622
Change-Id: I592a99bf0e3daf0b566e07494aa2de69e010749d
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
(cherry picked from commit 35f948a1add8a46d85c6383971e9ebff3e0dada7)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/quicktemplates2')
-rw-r--r-- | src/quicktemplates2/qquickselectionrectangle.cpp | 12 | ||||
-rw-r--r-- | src/quicktemplates2/qquickselectionrectangle_p_p.h | 2 |
2 files changed, 6 insertions, 8 deletions
diff --git a/src/quicktemplates2/qquickselectionrectangle.cpp b/src/quicktemplates2/qquickselectionrectangle.cpp index fbde94f46e..1f66184461 100644 --- a/src/quicktemplates2/qquickselectionrectangle.cpp +++ b/src/quicktemplates2/qquickselectionrectangle.cpp @@ -257,12 +257,10 @@ void QQuickSelectionRectanglePrivate::updateActiveState(bool active) emit q_func()->activeChanged(); } -QQuickItem *QQuickSelectionRectanglePrivate::createHandle(QQmlComponent *delegate) +QQuickItem *QQuickSelectionRectanglePrivate::createHandle(QQmlComponent *delegate, Qt::Corner corner) { Q_Q(QQuickSelectionRectangle); - const bool topLeft = (delegate == m_topLeftHandleDelegate); - // Incubate the handle const auto handlerTarget = m_selectable->selectionPointerHandlerTarget(); QObject *obj = delegate->beginCreate(QQmlEngine::contextForObject(q)); @@ -284,7 +282,7 @@ QQuickItem *QQuickSelectionRectanglePrivate::createHandle(QQmlComponent *delegat if (dragHandler->active()) { const QPointF localPos = dragHandler->centroid().position(); const QPointF pos = handleItem->mapToItem(handleItem->parentItem(), localPos); - if (topLeft) + if (corner == Qt::TopLeftCorner) m_selectable->setSelectionStartPos(pos); else m_selectable->setSelectionEndPos(pos); @@ -305,7 +303,7 @@ QQuickItem *QQuickSelectionRectanglePrivate::createHandle(QQmlComponent *delegat const QPointF localPos = dragHandler->centroid().position(); const QPointF pos = handleItem->mapToItem(handleItem->parentItem(), localPos); - if (topLeft) + if (corner == Qt::TopLeftCorner) m_selectable->setSelectionStartPos(pos); else m_selectable->setSelectionEndPos(pos); @@ -325,10 +323,10 @@ void QQuickSelectionRectanglePrivate::updateHandles() const QRectF rect = m_selectable->selectionRectangle().normalized(); if (!m_topLeftHandle && m_topLeftHandleDelegate) - m_topLeftHandle = createHandle(m_topLeftHandleDelegate); + m_topLeftHandle = createHandle(m_topLeftHandleDelegate, Qt::TopLeftCorner); if (!m_bottomRightHandle && m_bottomRightHandleDelegate) - m_bottomRightHandle = createHandle(m_bottomRightHandleDelegate); + m_bottomRightHandle = createHandle(m_bottomRightHandleDelegate, Qt::BottomRightCorner); if (m_topLeftHandle) { m_topLeftHandle->setX(rect.x() - (m_topLeftHandle->width() / 2)); diff --git a/src/quicktemplates2/qquickselectionrectangle_p_p.h b/src/quicktemplates2/qquickselectionrectangle_p_p.h index 2ed3e035b1..bd3c914d36 100644 --- a/src/quicktemplates2/qquickselectionrectangle_p_p.h +++ b/src/quicktemplates2/qquickselectionrectangle_p_p.h @@ -75,7 +75,7 @@ public: void connectToTarget(); void scrollTowardsPos(const QPointF &pos); - QQuickItem *createHandle(QQmlComponent *delegate); + QQuickItem *createHandle(QQmlComponent *delegate, Qt::Corner corner); QQuickSelectionRectangleAttached *getAttachedObject(const QObject *object) const; |