From 6ef1700d42114acc472a312184894f383d26afde Mon Sep 17 00:00:00 2001 From: kh1 Date: Tue, 13 Aug 2013 15:35:03 +0200 Subject: Fix broken "Next" button behavior after uncheck/check of a component. Change-Id: I7cc36df32594a57442bc316e7c271fc00c0ad4a2 Reviewed-by: Niels Weber Reviewed-by: Tim Jenssen --- src/libs/installer/componentmodel.cpp | 10 ++++++++-- src/libs/installer/packagemanagergui.cpp | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'src/libs') diff --git a/src/libs/installer/componentmodel.cpp b/src/libs/installer/componentmodel.cpp index 5285154f6..080e84d85 100644 --- a/src/libs/installer/componentmodel.cpp +++ b/src/libs/installer/componentmodel.cpp @@ -325,10 +325,16 @@ void ComponentModel::setRootComponents(QList rootCompone m_uncheckable.clear(); m_indexByNameCache.clear(); m_rootComponentList.clear(); - m_initialCheckedState.clear(); - m_currentCheckedState.clear(); m_modelState = DefaultChecked; + // Initialize these with an empty set for every possible state, cause we compare the hashes later in + // updateAndEmitModelState(). The comparison than might lead to wrong results if one of the checked + // states is absent initially. + m_initialCheckedState[Qt::Checked] = ComponentSet(); + m_initialCheckedState[Qt::Unchecked] = ComponentSet(); + m_initialCheckedState[Qt::PartiallyChecked] = ComponentSet(); + m_currentCheckedState = m_initialCheckedState; // both should be equal + // show virtual components only in case we run as updater or if the core engine is set to show them const bool showVirtuals = m_core->isUpdater() || m_core->virtualComponentsVisible(); foreach (Component *const component, rootComponents) { diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index 0ff96b954..8509dc259 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -1112,7 +1112,7 @@ public slots: void onModelStateChanged(QInstaller::ComponentModel::ModelState state) { - q->setModified(state != ComponentModel::DefaultChecked); + q->setModified(state.testFlag(ComponentModel::DefaultChecked) == false); // If all components in the checked list are only checkable when run without forced installation, set // ComponentModel::AllUnchecked as well, as we cannot uncheck anything. Helps to keep the UI correct. if ((!m_core->noForceInstallation()) && (m_currentModel->checked() == m_currentModel->uncheckable())) @@ -1236,7 +1236,7 @@ bool ComponentSelectionPage::isComplete() const { if (packageManagerCore()->isInstaller() || packageManagerCore()->isUpdater()) return d->m_currentModel->checked().count(); - return d->m_currentModel->checkedState() != ComponentModel::DefaultChecked; + return d->m_currentModel->checkedState().testFlag(ComponentModel::DefaultChecked) == false; } -- cgit v1.2.3