diff options
author | Thorbjørn Lund Martsum <tmartsum@gmail.com> | 2012-11-07 15:55:08 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-02-02 08:11:00 +0100 |
commit | 6a5c6b3ce60f8714824f3ce0224885cb694c1aa4 (patch) | |
tree | f243f5c6ecbd9ae1d35415820238344fc8d39acb /src | |
parent | 08a632ac1ac48eebdb60d9b87b221e7dbd3c22c4 (diff) |
QTreeView - optimize. Do not do signals-work if signals are blocked
There is no need to do any kind of work with emitting signals if
signals are blocked.
Change-Id: Ic352ba157fd89bbd36c650edd809a2ea91bcdd5f
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index fb26343af2..2e9148e590 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -55,6 +55,7 @@ #ifndef QT_NO_ACCESSIBILITY #include <qaccessible.h> #include <qaccessible2.h> +#include <QMetaMethod> #endif #include <private/qtreeview_p.h> @@ -2649,11 +2650,13 @@ void QTreeView::collapseAll() QSet<QPersistentModelIndex> old_expandedIndexes; old_expandedIndexes = d->expandedIndexes; d->expandedIndexes.clear(); - QSet<QPersistentModelIndex>::const_iterator i = old_expandedIndexes.constBegin(); - for (; i != old_expandedIndexes.constEnd(); ++i) { - const QPersistentModelIndex &mi = (*i); - if (mi.isValid() && !(mi.flags() & Qt::ItemNeverHasChildren)) - emit collapsed(mi); + if (!signalsBlocked() && isSignalConnected(QMetaMethod::fromSignal(&QTreeView::collapsed))) { + QSet<QPersistentModelIndex>::const_iterator i = old_expandedIndexes.constBegin(); + for (; i != old_expandedIndexes.constEnd(); ++i) { + const QPersistentModelIndex &mi = (*i); + if (mi.isValid() && !(mi.flags() & Qt::ItemNeverHasChildren)) + emit collapsed(mi); + } } doItemsLayout(); } @@ -2681,21 +2684,26 @@ void QTreeView::expandToDepth(int depth) } } - // emit signals - QSet<QPersistentModelIndex> collapsedIndexes = old_expandedIndexes - d->expandedIndexes; - QSet<QPersistentModelIndex>::const_iterator i = collapsedIndexes.constBegin(); - for (; i != collapsedIndexes.constEnd(); ++i) { - const QPersistentModelIndex &mi = (*i); - if (mi.isValid() && !(mi.flags() & Qt::ItemNeverHasChildren)) - emit collapsed(mi); - } + bool someSignalEnabled = isSignalConnected(QMetaMethod::fromSignal(&QTreeView::collapsed)); + someSignalEnabled |= isSignalConnected(QMetaMethod::fromSignal(&QTreeView::expanded)); - QSet<QPersistentModelIndex> expandedIndexs = d->expandedIndexes - old_expandedIndexes; - i = expandedIndexs.constBegin(); - for (; i != expandedIndexs.constEnd(); ++i) { - const QPersistentModelIndex &mi = (*i); - if (mi.isValid() && !(mi.flags() & Qt::ItemNeverHasChildren)) - emit expanded(mi); + if (!signalsBlocked() && someSignalEnabled) { + // emit signals + QSet<QPersistentModelIndex> collapsedIndexes = old_expandedIndexes - d->expandedIndexes; + QSet<QPersistentModelIndex>::const_iterator i = collapsedIndexes.constBegin(); + for (; i != collapsedIndexes.constEnd(); ++i) { + const QPersistentModelIndex &mi = (*i); + if (mi.isValid() && !(mi.flags() & Qt::ItemNeverHasChildren)) + emit collapsed(mi); + } + + QSet<QPersistentModelIndex> expandedIndexs = d->expandedIndexes - old_expandedIndexes; + i = expandedIndexs.constBegin(); + for (; i != expandedIndexs.constEnd(); ++i) { + const QPersistentModelIndex &mi = (*i); + if (mi.isValid() && !(mi.flags() & Qt::ItemNeverHasChildren)) + emit expanded(mi); + } } updateGeometries(); @@ -3222,7 +3230,7 @@ void QTreeViewPrivate::layout(int i, bool recursiveExpanding, bool afterIsUninit item->total = 0; item->hasMoreSiblings = false; if ((recursiveExpanding && !(current.flags() & Qt::ItemNeverHasChildren)) || isIndexExpanded(current)) { - if (recursiveExpanding && storeExpanded(current)) + if (recursiveExpanding && storeExpanded(current) && !q->signalsBlocked()) emit q->expanded(current); item->expanded = true; layout(last, recursiveExpanding, afterIsUninitialized); |