QListView: Fix item movement in icon mode

Since b13aa15e10 the event must not be
accepted when calling "canDrop()" method. Inside it "dropOn()" method
is called which requires not accepted event. Otherwise the event will
be ignored later in "QListView::dragMoveEvent()". On next movement it
will be accepted again - the event is now ignored, so "dropOn() method
will work properly.

If "filterDragMoveEvent()" returns false for any reason, the event
acceptance is not changed - the same behavior as before.

Task-number: QTBUG-61951
Change-Id: I2d49ce5b15300c42e2efc745e8e32d3d17f34a2f
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
bb10
Błażej Szczygieł 2017-07-13 22:19:31 +02:00
parent d819d6864a
commit f9afae9e08
1 changed files with 8 additions and 2 deletions

View File

@ -2814,11 +2814,17 @@ bool QIconModeViewBase::filterDragLeaveEvent(QDragLeaveEvent *e)
bool QIconModeViewBase::filterDragMoveEvent(QDragMoveEvent *e)
{
if (e->source() != qq || !dd->canDrop(e))
return false;
const bool wasAccepted = e->isAccepted();
// ignore by default
e->ignore();
if (e->source() != qq || !dd->canDrop(e)) {
// restore previous acceptance on failure
e->setAccepted(wasAccepted);
return false;
}
// get old dragged items rect
QRect itemsRect = this->itemsRect(draggedItems);
viewport()->update(itemsRect.translated(draggedItemsDelta()));