From ee17adebd23528e541e76d1f422b6ce498ab83bb Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Wed, 17 Sep 2014 18:08:51 +0200 Subject: 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 Reviewed-by: Friedemann Kleint Reviewed-by: David Faure --- src/widgets/itemviews/qtablewidget.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/widgets/itemviews/qtablewidget.cpp') diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp index 7c24819c0e..eb239f8025 100644 --- a/src/widgets/itemviews/qtablewidget.cpp +++ b/src/widgets/itemviews/qtablewidget.cpp @@ -2553,9 +2553,24 @@ QStringList QTableWidget::mimeTypes() const If the list of items is empty, 0 is returned rather than a serialized empty list. */ -QMimeData *QTableWidget::mimeData(const QList) const +QMimeData *QTableWidget::mimeData(const QList items) const { - return d_func()->tableModel()->internalMimeData(); + Q_D(const QTableWidget); + + QModelIndexList &cachedIndexes = d->tableModel()->cachedIndexes; + + // if non empty, it's called from the model's own mimeData + if (cachedIndexes.isEmpty()) { + foreach (QTableWidgetItem *item, items) + cachedIndexes << indexFromItem(item); + + QMimeData *result = d->tableModel()->internalMimeData(); + + cachedIndexes.clear(); + return result; + } + + return d->tableModel()->internalMimeData(); } /*! -- cgit v1.2.3