summaryrefslogtreecommitdiffstats
path: root/src/widgets/itemviews/qlistwidget.cpp
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2014-09-17 18:08:51 +0200
committerGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2014-10-31 14:06:25 +0100
commitee17adebd23528e541e76d1f422b6ce498ab83bb (patch)
treefeed18525f98fd05fd186a5a91b1b09df3ed58b8 /src/widgets/itemviews/qlistwidget.cpp
parent0678d7c43c1658d2d2ec984be5844054031649a2 (diff)
Implement QTableWidget/QListWidget::mimeData()
For some reasons lost in history, those methods simply ignore the list of items passed to them, and always return NULL. Of course, that's totally broken. Fix that by doing the same thing that the respective (hidden) models did when calling mimeData(). Surprisingly enough, QTreeWidget has a proper implementation. Task-number: QTBUG-25900 Change-Id: I99ca7b4d4f87f096fd9ff0b0cb4e58282aa9c26e Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: David Faure <david.faure@kdab.com>
Diffstat (limited to 'src/widgets/itemviews/qlistwidget.cpp')
-rw-r--r--src/widgets/itemviews/qlistwidget.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/widgets/itemviews/qlistwidget.cpp b/src/widgets/itemviews/qlistwidget.cpp
index 51561ac23b..aae75e5651 100644
--- a/src/widgets/itemviews/qlistwidget.cpp
+++ b/src/widgets/itemviews/qlistwidget.cpp
@@ -1783,9 +1783,24 @@ QStringList QListWidget::mimeTypes() const
If the list of items is empty, 0 is returned instead of a serialized empty
list.
*/
-QMimeData *QListWidget::mimeData(const QList<QListWidgetItem*>) const
+QMimeData *QListWidget::mimeData(const QList<QListWidgetItem*> items) const
{
- return d_func()->listModel()->internalMimeData();
+ Q_D(const QListWidget);
+
+ QModelIndexList &cachedIndexes = d->listModel()->cachedIndexes;
+
+ // if non empty, it's called from the model's own mimeData
+ if (cachedIndexes.isEmpty()) {
+ foreach (QListWidgetItem *item, items)
+ cachedIndexes << indexFromItem(item);
+
+ QMimeData *result = d->listModel()->internalMimeData();
+
+ cachedIndexes.clear();
+ return result;
+ }
+
+ return d->listModel()->internalMimeData();
}
#ifndef QT_NO_DRAGANDDROP