aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2
diff options
context:
space:
mode:
authorRichard Moe Gustavsen <richard.gustavsen@qt.io>2021-08-06 11:35:25 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-08-09 17:14:16 +0000
commite7204f4658f6dee169481657ccda17c115ab2c7c (patch)
tree9f163fe0af177ece157c499cce604f9ea7ba39ba /src/quicktemplates2
parentdcce7e732d9182cd19d4fa8c3284762307f99ebd (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.cpp12
-rw-r--r--src/quicktemplates2/qquickselectionrectangle_p_p.h2
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;