summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorAndreas Buhr <andreas.buhr@qt.io>2021-07-07 18:01:36 +0200
committerAndreas Buhr <andreas.buhr@qt.io>2021-07-12 22:51:12 +0200
commitc0b7d834b066d93bb3314f4bcaec0ab42a661055 (patch)
tree3effe2ef142519b87e173af68207a0c15039e22f /src/widgets
parentff6156204d2cc33771540ef71500605817dc4911 (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.cpp20
-rw-r--r--src/widgets/itemviews/qtreewidget_p.h8
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;
};