diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-08-16 17:15:00 +0300 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2022-09-07 13:09:57 +0300 |
commit | 1b702ac2801de72c67224c42e6456db235ee6b8c (patch) | |
tree | ceb5c63330b77badf3d90dac1653fb58e5850949 /src/libs/installer | |
parent | 9d21873aa89f943cccd3f7711004621f4f9764f1 (diff) |
Disable package manager and updater for offline maintenance tool
For a maintenance tool that has no configured repositories, we can
disable the selection of package manager and updater options, that
require at least one repository to be useful.
Also show the settings button for offline maintenance tool that is run
in uninstaller mode, because the user may want to add a new repository
which then enables the disabled options.
Task-number: QTIFW-2627
Change-Id: I4db7f6526c37bbadeaf680fe9cb6130058ca5ffd
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/libs/installer')
-rw-r--r-- | src/libs/installer/packagemanagergui.cpp | 46 | ||||
-rw-r--r-- | src/libs/installer/packagemanagergui.h | 2 |
2 files changed, 40 insertions, 8 deletions
diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index 0d6ab35ba..f4d76f10f 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -1470,6 +1470,7 @@ IntroductionPage::IntroductionPage(PackageManagerCore *core) , m_updatesFetched(false) , m_allPackagesFetched(false) , m_forceUpdate(false) + , m_offlineMaintenanceTool(false) , m_label(nullptr) , m_msgLabel(nullptr) , m_errorLabel(nullptr) @@ -1540,7 +1541,7 @@ IntroductionPage::IntroductionPage(PackageManagerCore *core) connect(core, &PackageManagerCore::coreNetworkSettingsChanged, this, &IntroductionPage::onCoreNetworkSettingsChanged); - m_updateComponents->setEnabled(ProductKeyCheck::instance()->hasValidKey()); + m_updateComponents->setEnabled(!m_offlineMaintenanceTool && ProductKeyCheck::instance()->hasValidKey()); #ifdef Q_OS_WIN if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7) { @@ -1715,15 +1716,30 @@ void IntroductionPage::showMaintenanceTools() /*! Sets \a enable to \c true to enable the options to install, add, and - uninstall components on the page. + uninstall components on the page. For a maintenance tool without any enabled + repositories, the package manager and updater stay disabled regardless of + the value of \a enable. */ void IntroductionPage::setMaintenanceToolsEnabled(bool enable) { - m_packageManager->setEnabled(enable); - m_updateComponents->setEnabled(enable && ProductKeyCheck::instance()->hasValidKey()); + m_packageManager->setEnabled(enable && !m_offlineMaintenanceTool); + m_updateComponents->setEnabled(enable && !m_offlineMaintenanceTool + && ProductKeyCheck::instance()->hasValidKey()); m_removeAllComponents->setEnabled(enable); } +/*! + Enables or disables the options to add or update components based on the + value of \a enable. For a maintenance tool without any enabled repositories, + the package manager and updater stay disabled regardless of the value of \a enable. +*/ +void IntroductionPage::setMaintainerToolsEnabled(bool enable) +{ + m_packageManager->setEnabled(enable && !m_offlineMaintenanceTool); + m_updateComponents->setEnabled(enable && !m_offlineMaintenanceTool + && ProductKeyCheck::instance()->hasValidKey()); +} + // -- public slots /*! @@ -1810,7 +1826,7 @@ void IntroductionPage::setUninstaller(bool value) { if (value) { entering(); - gui()->showSettingsButton(false); + gui()->showSettingsButton(true); packageManagerCore()->setUninstaller(); emit packageManagerCoreTypeChanged(); @@ -1834,6 +1850,8 @@ void IntroductionPage::setPackageManager(bool value) */ void IntroductionPage::initializePage() { + const bool repositoriesAvailable = validRepositoriesAvailable(); + PackageManagerCore *core = packageManagerCore(); if (core->isPackageManager()) { m_packageManager->setChecked(true); @@ -1843,25 +1861,37 @@ void IntroductionPage::initializePage() // If we are running maintenance tool and the default uninstaller // marker is not overridden, set the default checked radio button // based on if we have valid repositories available. - if (!core->isUserSetBinaryMarker() && validRepositoriesAvailable()) { + if (!core->isUserSetBinaryMarker() && repositoriesAvailable) { m_packageManager->setChecked(true); } else { // No repositories available, default to complete uninstallation. m_removeAllComponents->setChecked(true); core->setCompleteUninstallation(true); } + // Disable options that are unusable without repositories + m_offlineMaintenanceTool = !repositoriesAvailable; + setMaintainerToolsEnabled(repositoriesAvailable); } } /*! Resets the internal page state, so that on clicking \uicontrol Next the metadata needs to be - fetched again. + fetched again. For maintenance tool, enables or disables options requiring enabled repositories + based on the current repository settings. */ void IntroductionPage::onCoreNetworkSettingsChanged() { m_updatesFetched = false; m_allPackagesFetched = false; m_forceUpdate = false; + + PackageManagerCore *core = packageManagerCore(); + if (core->isUninstaller() || core->isMaintainer()) { + m_offlineMaintenanceTool = !validRepositoriesAvailable(); + + setMaintainerToolsEnabled(!m_offlineMaintenanceTool); + m_removeAllComponents->setChecked(m_offlineMaintenanceTool); + } } // -- private @@ -1887,7 +1917,7 @@ void IntroductionPage::entering() if (m_forceUpdate) m_packageManager->setEnabled(false); - setSettingsButtonRequested((!core->isOfflineOnly()) && (!core->isUninstaller())); + setSettingsButtonRequested((!core->isOfflineOnly())); } /*! diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h index 21c885284..5f4bd6157 100644 --- a/src/libs/installer/packagemanagergui.h +++ b/src/libs/installer/packagemanagergui.h @@ -234,6 +234,7 @@ public: void showMetaInfoUpdate(); void showMaintenanceTools(); void setMaintenanceToolsEnabled(bool enable); + void setMaintainerToolsEnabled(bool enable); public Q_SLOTS: void onCoreNetworkSettingsChanged(); @@ -263,6 +264,7 @@ private: bool m_updatesFetched; bool m_allPackagesFetched; bool m_forceUpdate; + bool m_offlineMaintenanceTool; QLabel *m_label; QLabel *m_msgLabel; |