diff options
author | Andreas Buhr <andreas.buhr@qt.io> | 2021-07-07 18:01:36 +0200 |
---|---|---|
committer | Andreas Buhr <andreas.buhr@qt.io> | 2021-07-12 22:51:12 +0200 |
commit | c0b7d834b066d93bb3314f4bcaec0ab42a661055 (patch) | |
tree | 3effe2ef142519b87e173af68207a0c15039e22f /src/widgets | |
parent | ff6156204d2cc33771540ef71500605817dc4911 (diff) |
Use RAII object to skip pending sorts in QTreeWidget
Cleanup: This patch does not change functionality.
In several places, sorting inside of the QTreeModel is disabled
and afterwards restored. There is a RAII class for this, which is
used in some places, but not in others. This patch introduces
more consistent usage of this RAII object.
Change-Id: I9802998ad31d0f9d4417824f72ff0abbb0c38a17
Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
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; }; |