summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Shaw <qt-info@nokia.com>2009-09-22 12:38:09 (GMT)
committerAndy Shaw <qt-info@nokia.com>2009-09-22 12:38:09 (GMT)
commite410d2711ae2aba15b9da7b07a4f8e40a50ab9c5 (patch)
treed5e52504c64fd55543857d9993d32027078ddc5c
parent1053d8564ca33e18a813e0f0fa1ec1f381e4a937 (diff)
downloadQt-e410d2711ae2aba15b9da7b07a4f8e40a50ab9c5.zip
Qt-e410d2711ae2aba15b9da7b07a4f8e40a50ab9c5.tar.gz
Qt-e410d2711ae2aba15b9da7b07a4f8e40a50ab9c5.tar.bz2
Ensure that QStandardItem::clone() is used when a prototype is set
This fixes a regression introduced in Qt 4.5.0, when dragging an item within a QTreeView it would not call clone() when it was dropped even if a prototype was set on the QStandardItemModel. Reviewed-by: Marius Bugge Monsen
-rw-r--r--src/gui/itemviews/qstandarditemmodel.cpp9
-rw-r--r--src/gui/itemviews/qstandarditemmodel_p.h2
2 files changed, 7 insertions, 4 deletions
diff --git a/src/gui/itemviews/qstandarditemmodel.cpp b/src/gui/itemviews/qstandarditemmodel.cpp
index bc25edd..8c9a2fd 100644
--- a/src/gui/itemviews/qstandarditemmodel.cpp
+++ b/src/gui/itemviews/qstandarditemmodel.cpp
@@ -2965,7 +2965,7 @@ QMimeData *QStandardItemModel::mimeData(const QModelIndexList &indexes) const
Used by QStandardItemModel::dropMimeData
stream out an item and his children
*/
-static void decodeDataRecursive(QDataStream &stream, QStandardItem *item)
+void QStandardItemModelPrivate::decodeDataRecursive(QDataStream &stream, QStandardItem *item)
{
int colCount, childCount;
stream >> *item;
@@ -2976,7 +2976,7 @@ static void decodeDataRecursive(QDataStream &stream, QStandardItem *item)
while(childPos > 0) {
childPos--;
- QStandardItem *child = new QStandardItem;
+ QStandardItem *child = createItem();
decodeDataRecursive(stream, child);
item->setChild( childPos / colCount, childPos % colCount, child);
}
@@ -2989,6 +2989,7 @@ static void decodeDataRecursive(QDataStream &stream, QStandardItem *item)
bool QStandardItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action,
int row, int column, const QModelIndex &parent)
{
+ Q_D(QStandardItemModel);
// check if the action is supported
if (!data || !(action == Qt::CopyAction || action == Qt::MoveAction))
return false;
@@ -3020,9 +3021,9 @@ bool QStandardItemModel::dropMimeData(const QMimeData *data, Qt::DropAction acti
while (!stream.atEnd()) {
int r, c;
- QStandardItem *item = new QStandardItem;
+ QStandardItem *item = d->createItem();
stream >> r >> c;
- decodeDataRecursive(stream, item);
+ d->decodeDataRecursive(stream, item);
rows.append(r);
columns.append(c);
diff --git a/src/gui/itemviews/qstandarditemmodel_p.h b/src/gui/itemviews/qstandarditemmodel_p.h
index 3d842f3..430fcb6 100644
--- a/src/gui/itemviews/qstandarditemmodel_p.h
+++ b/src/gui/itemviews/qstandarditemmodel_p.h
@@ -175,6 +175,8 @@ public:
void _q_emitItemChanged(const QModelIndex &topLeft,
const QModelIndex &bottomRight);
+ void decodeDataRecursive(QDataStream &stream, QStandardItem *item);
+
QVector<QStandardItem*> columnHeaderItems;
QVector<QStandardItem*> rowHeaderItems;
QStandardItem *root;