diff options
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/itemviews/qtreewidget.cpp | 20 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreewidget_p.h | 8 |
2 files changed, 9 insertions, 19 deletions
diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp index 08b1137c5c..b684282e9d 100644 --- a/src/widgets/itemviews/qtreewidget.cpp +++ b/src/widgets/itemviews/qtreewidget.cpp @@ -112,8 +112,7 @@ public: */ QTreeModel::QTreeModel(int columns, QTreeWidget *parent) - : QAbstractItemModel(parent), rootItem(new QTreeWidgetItem), - headerItem(new QTreeWidgetItem), skipPendingSort(false) + : QAbstractItemModel(parent), rootItem(new QTreeWidgetItem), headerItem(new QTreeWidgetItem) { rootItem->view = parent; rootItem->itemFlags = Qt::ItemIsDropEnabled; @@ -127,8 +126,7 @@ QTreeModel::QTreeModel(int columns, QTreeWidget *parent) */ QTreeModel::QTreeModel(QTreeModelPrivate &dd, QTreeWidget *parent) - : QAbstractItemModel(dd, parent), rootItem(new QTreeWidgetItem), - headerItem(new QTreeWidgetItem), skipPendingSort(false) + : QAbstractItemModel(dd, parent), rootItem(new QTreeWidgetItem), headerItem(new QTreeWidgetItem) { rootItem->view = parent; rootItem->itemFlags = Qt::ItemIsDropEnabled; @@ -1563,11 +1561,8 @@ QTreeWidgetItem::QTreeWidgetItem(QTreeWidgetItem *parent, QTreeWidgetItem *after QTreeWidgetItem::~QTreeWidgetItem() { QTreeModel *model = treeModel(); - bool wasSkipSort = false; - if (model) { - wasSkipSort = model->skipPendingSort; - model->skipPendingSort = true; - } + QTreeModel::SkipSorting skipSorting(model); + if (par) { int i = par->children.indexOf(this); if (i >= 0) { @@ -1606,9 +1601,6 @@ QTreeWidgetItem::~QTreeWidgetItem() children.clear(); delete d; - if (model) { - model->skipPendingSort = wasSkipSort; - } } /*! @@ -2008,8 +2000,7 @@ void QTreeWidgetItem::insertChild(int index, QTreeWidgetItem *child) return; if (QTreeModel *model = treeModel()) { - const bool wasSkipSort = model->skipPendingSort; - model->skipPendingSort = true; + QTreeModel::SkipSorting skipSorting(model); if (model->rootItem == this) child->par = nullptr; else @@ -2033,7 +2024,6 @@ void QTreeWidgetItem::insertChild(int index, QTreeWidgetItem *child) children.insert(index, child); d->updateHiddenStatus(child, true); model->endInsertItems(); - model->skipPendingSort = wasSkipSort; } else { child->par = this; children.insert(index, child); diff --git a/src/widgets/itemviews/qtreewidget_p.h b/src/widgets/itemviews/qtreewidget_p.h index be9ee1cfbd..1f10b06358 100644 --- a/src/widgets/itemviews/qtreewidget_p.h +++ b/src/widgets/itemviews/qtreewidget_p.h @@ -155,7 +155,7 @@ private: QList<QTreeWidgetItemIterator*> iterators; mutable QBasicTimer sortPendingTimer; - mutable bool skipPendingSort; //while doing internal operation we don't care about sorting + mutable bool skipPendingSort = false; // no sorting during internal operations bool inline executePendingSort() const; bool isChanging() const; @@ -167,9 +167,9 @@ public: { const QTreeModel * const model; const bool previous; - SkipSorting(const QTreeModel *m) : model(m), previous(model->skipPendingSort) - { model->skipPendingSort = true; } - ~SkipSorting() { model->skipPendingSort = previous; } + SkipSorting(const QTreeModel *m) : model(m), previous(model ? model->skipPendingSort : false) + { if (model) model->skipPendingSort = true; } + ~SkipSorting() { if (model) model->skipPendingSort = previous; } }; friend struct SkipSorting; }; |