From 829d69e671de8293d6f0192f67f4b9496c8ea7b2 Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Mon, 2 May 2022 13:20:12 +0300 Subject: Do not emit dataChanged when model check state changes Single items check state is not tracked anywhere else but in the model, so we do not need to send dataChanged -signal to every item when the model check state changes. The correct check state is already set to every item above, so this emit seems unnecessary. This has significant effect on 'Select All', 'Deselect All' and 'Default' -buttons. If there are hundreds of items in the tree, this speeds up the button press in best case over 50 percent. Task-number: QTIFW-2623 Change-Id: If3c2aaebcc0dd6619179c31a51c8a57fdcec5c66 Reviewed-by: Arttu Tarkiainen --- src/libs/installer/componentmodel.cpp | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/libs/installer/componentmodel.cpp b/src/libs/installer/componentmodel.cpp index 3bb9bc72e..e60ba92ae 100644 --- a/src/libs/installer/componentmodel.cpp +++ b/src/libs/installer/componentmodel.cpp @@ -426,35 +426,26 @@ void ComponentModel::reset(QList rootComponents) Sets the checked state of every component in the model to be \a state. The ComponentModel::PartiallyChecked flag is ignored by this function. Note that components - are not changed if they are not checkable. The dataChanged() and componentsCheckStateChanged() signals - are emitted. + are not changed if they are not checkable. The modelCheckStateChanged() signal + is emitted. */ void ComponentModel::setCheckedState(QInstaller::ComponentModel::ModelStateFlag state) { - QList changed; switch (state) { case AllChecked: - changed = updateCheckedState(m_currentCheckedState[Qt::Unchecked], Qt::Checked); + updateCheckedState(m_currentCheckedState[Qt::Unchecked], Qt::Checked); break; case AllUnchecked: - changed = updateCheckedState(m_currentCheckedState[Qt::Checked], Qt::Unchecked); + updateCheckedState(m_currentCheckedState[Qt::Checked], Qt::Unchecked); break; case DefaultChecked: // record all changes, to be able to update the UI properly - changed = updateCheckedState(m_currentCheckedState[Qt::Checked], Qt::Unchecked); - changed += updateCheckedState(m_initialCheckedState[Qt::Checked], Qt::Checked); + updateCheckedState(m_currentCheckedState[Qt::Checked], Qt::Unchecked); + updateCheckedState(m_initialCheckedState[Qt::Checked], Qt::Checked); break; default: break; } - - if (changed.isEmpty()) - return; - - // notify about changes done to the model - foreach (const QModelIndex &index, changed) { - emit dataChanged(index, index); - } updateModelState(); emit modelCheckStateChanged(m_modelState); } -- cgit v1.2.3