- 
    Bug 
- 
    Resolution: Done
- 
    P2: Important 
- 
    4.6.0
- 
    None
- 
        c6f1e91c114eaf331fd40c909553b173136ffe99
Steps to reproduce.
1. Create model with d'n'd support, and 3 rows.
2. Create QListView in IconMode.
3. Drag last item to the first place, drop it, last item will be deleted, but not inserted, dropMimeData is not called.
This is because QIconModeViewBase::filterDropEvent(QDropEvent *e) returns false, only if draggin from another widget.
QListView.cpp
bool QIconModeViewBase::filterDropEvent(QDropEvent *e)
{
    if (e->source() != qq)
        return false;
    const QSize contents = contentsSize;
    QPoint offset(horizontalOffset(), verticalOffset());
    QPoint end = e->pos() + offset;
    QPoint start = dd->pressedPosition;
    QPoint delta = (dd->movement == QListView::Snap ? snapToGrid(end) - snapToGrid(start) : end - start);
    QList<QModelIndex> indexes = dd->selectionModel->selectedIndexes();
    for (int i = 0; i < indexes.count(); ++i) {
        QModelIndex index = indexes.at(i);
        QRect rect = dd->rectForIndex(index);
        viewport()->update(dd->mapToViewport(rect, false));
        QPoint dest = rect.topLeft() + delta;
        if (qq->isRightToLeft())
            dest.setX(dd->flipX(dest.x()) - rect.width());
        moveItem(index.row(), dest);
        qq->update(index);
    }
    dd->stopAutoScroll();
    draggedItems.clear();
    dd->emitIndexesMoved(indexes);
    e->accept(); // we have handled the event
    // if the size has not grown, we need to check if it has shrinked
    if (contentsSize != contents) {
        if ((contentsSize.width() <= contents.width()
            || contentsSize.height() <= contents.height())) {
                updateContentsSize();
        }
        dd->viewUpdateGeometries();
    }
    return true;
}