QTreeView: Reset the pressed index if the decoration was pressed on
We need to reset the pressed index when the decoration was pressed on otherwise if the mouse ends up over an already selected item that was previously clicked on. This prevents it from thinking that the mouse has been released on this item right after pressing on it. Fixes: QTBUG-59067 Change-Id: Iab372ae20db3682ab0812661f86533079ba4083c Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
This commit is contained in:
parent
67bbe28d67
commit
985f491024
@ -1892,6 +1892,8 @@ void QTreeView::mousePressEvent(QMouseEvent *event)
|
||||
handled = d->expandOrCollapseItemAtPos(event->pos());
|
||||
if (!handled && d->itemDecorationAt(event->pos()) == -1)
|
||||
QAbstractItemView::mousePressEvent(event);
|
||||
else
|
||||
d->pressedIndex = QModelIndex();
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -4875,13 +4875,27 @@ void tst_QTreeView::taskQTBUG_61476()
|
||||
const QPoint pos = rect.center();
|
||||
|
||||
QTest::mousePress(tv.viewport(), Qt::LeftButton, {}, pos);
|
||||
if (tv.style()->styleHint(QStyle::SH_ListViewExpand_SelectMouseType, nullptr, &tv) ==
|
||||
QEvent::MouseButtonPress)
|
||||
const bool expandsOnPress =
|
||||
(tv.style()->styleHint(QStyle::SH_ListViewExpand_SelectMouseType, nullptr, &tv) == QEvent::MouseButtonPress);
|
||||
if (expandsOnPress)
|
||||
QTRY_VERIFY(!tv.isExpanded(mi));
|
||||
|
||||
QTest::mouseRelease(tv.viewport(), Qt::LeftButton, nullptr, pos);
|
||||
QTRY_VERIFY(!tv.isExpanded(mi));
|
||||
QCOMPARE(lastTopLevel->checkState(), Qt::Checked);
|
||||
|
||||
// Test that it does not toggle the check state of a previously selected item when collapsing an
|
||||
// item causes it to position the item under the mouse to be the decoration for the selected item
|
||||
tv.expandAll();
|
||||
tv.verticalScrollBar()->setValue(tv.verticalScrollBar()->maximum());
|
||||
// It is not enough to programmatically select the item, we need to have it clicked on
|
||||
QTest::mouseClick(tv.viewport(), Qt::LeftButton, {}, tv.visualRect(lastTopLevel->index()).center());
|
||||
QTest::mousePress(tv.viewport(), Qt::LeftButton, {}, pos);
|
||||
if (expandsOnPress)
|
||||
QTRY_VERIFY(!tv.isExpanded(mi));
|
||||
QTest::mouseRelease(tv.viewport(), Qt::LeftButton, nullptr, pos);
|
||||
QTRY_VERIFY(!tv.isExpanded(mi));
|
||||
QCOMPARE(lastTopLevel->checkState(), Qt::Checked);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QTreeView)
|
||||
|
Loading…
x
Reference in New Issue
Block a user