diff options
author | Katja Marttila <katja.marttila@qt.io> | 2022-05-02 13:20:12 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2022-05-05 13:48:40 +0300 |
commit | 829d69e671de8293d6f0192f67f4b9496c8ea7b2 (patch) | |
tree | 4c689e102071b1368da4c8b211ac015860a12351 | |
parent | dae54c30a9f8c6e15de2f5daf3b0806fbbf63cbd (diff) |
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 <arttu.tarkiainen@qt.io>
-rw-r--r-- | src/libs/installer/componentmodel.cpp | 21 |
1 files changed, 6 insertions, 15 deletions
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<Component *> 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<QModelIndex> 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); } |