summaryrefslogtreecommitdiffstats
path: root/src/libs/installer
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2022-08-16 17:15:00 +0300
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2022-09-07 13:09:57 +0300
commit1b702ac2801de72c67224c42e6456db235ee6b8c (patch)
treeceb5c63330b77badf3d90dac1653fb58e5850949 /src/libs/installer
parent9d21873aa89f943cccd3f7711004621f4f9764f1 (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.cpp46
-rw-r--r--src/libs/installer/packagemanagergui.h2
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;