summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/widgets/itemviews/qlistwidget.cpp19
-rw-r--r--src/widgets/itemviews/qlistwidget_p.h2
-rw-r--r--src/widgets/itemviews/qtablewidget.cpp19
-rw-r--r--src/widgets/itemviews/qtablewidget_p.h2
4 files changed, 38 insertions, 4 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
diff --git a/src/widgets/itemviews/qlistwidget_p.h b/src/widgets/itemviews/qlistwidget_p.h
index b019cd5eaf..1f2e9e8819 100644
--- a/src/widgets/itemviews/qlistwidget_p.h
+++ b/src/widgets/itemviews/qlistwidget_p.h
@@ -72,6 +72,8 @@ public:
class Q_AUTOTEST_EXPORT QListModel : public QAbstractListModel
{
Q_OBJECT
+ friend class QListWidget;
+
public:
QListModel(QListWidget *parent);
~QListModel();
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<QTableWidgetItem*>) const
+QMimeData *QTableWidget::mimeData(const QList<QTableWidgetItem*> 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();
}
/*!
diff --git a/src/widgets/itemviews/qtablewidget_p.h b/src/widgets/itemviews/qtablewidget_p.h
index 50b5a66eb5..92a8f5f305 100644
--- a/src/widgets/itemviews/qtablewidget_p.h
+++ b/src/widgets/itemviews/qtablewidget_p.h
@@ -82,6 +82,8 @@ public:
class QTableModel : public QAbstractTableModel
{
Q_OBJECT
+ friend class QTableWidget;
+
public:
enum ItemFlagsExtension {
ItemIsHeaderItem = 128