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>
bb10
Thorbjørn Lund Martsum 2012-11-07 15:55:08 +01:00 committed by The Qt Project
parent 08a632ac1a
commit 6a5c6b3ce6
1 changed files with 28 additions and 20 deletions

View File

@ -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);