QTree/TableView: Don't emit clicked when releasing after double click
If an item is double clicked, then without this fix, the views emit the clicked() signal when the mousebutton is released after the double click event. This is unexpected and wrong. QAbstractItemView keeps track of the item the mouse was pressed on, to verify that the release occurred on the same item before emitting clicked, and to make sure we have a valid pressed item before initiating drag'n'drop. By resetting d->pressedItem when a double click has been handled, we can prevent the emission of a clicked signal in the next release event. [ChangeLog][QtWidgets][QTreeView] Don't emit clicked signal after a doubleClicked signal. Fixes: QTBUG-77771 Change-Id: I05988e9e2222157f4216cebc40c22507e8d83b82 Reviewed-by: André de la Rocha <andre.rocha@qt.io> Reviewed-by: Jesus Fernandez <jsfdez@gmail.com>
This commit is contained in:
parent
c28b881c98
commit
d6551fe125
@ -1966,6 +1966,7 @@ void QAbstractItemView::mouseDoubleClickEvent(QMouseEvent *event)
|
|||||||
if ((event->button() == Qt::LeftButton) && !edit(persistent, DoubleClicked, event)
|
if ((event->button() == Qt::LeftButton) && !edit(persistent, DoubleClicked, event)
|
||||||
&& !style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, 0, this))
|
&& !style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, 0, this))
|
||||||
emit activated(persistent);
|
emit activated(persistent);
|
||||||
|
d->pressedIndex = QModelIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if QT_CONFIG(draganddrop)
|
#if QT_CONFIG(draganddrop)
|
||||||
|
@ -1943,6 +1943,7 @@ void QTreeView::mouseDoubleClickEvent(QMouseEvent *event)
|
|||||||
if (!style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, 0, this))
|
if (!style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, 0, this))
|
||||||
emit activated(persistent);
|
emit activated(persistent);
|
||||||
|
|
||||||
|
d->pressedIndex = QModelIndex();
|
||||||
d->executePostedLayout(); // we need to make sure viewItems is updated
|
d->executePostedLayout(); // we need to make sure viewItems is updated
|
||||||
if (d->itemsExpandable
|
if (d->itemsExpandable
|
||||||
&& d->expandsOnDoubleClick
|
&& d->expandsOnDoubleClick
|
||||||
|
Loading…
Reference in New Issue
Block a user