diff --git a/doc/installerfw.qdoc b/doc/installerfw.qdoc index af1089d1..c8a09445 100644 --- a/doc/installerfw.qdoc +++ b/doc/installerfw.qdoc @@ -321,6 +321,9 @@ \li Set to \c true if you want to add an extra column into component tree showing install actions. This extra column indicates whether a component is going to be installed or uninstalled, or just stay installed or uninstalled. + \row + \li SupportsModify + \li Set to \c false if the product does not support modifying an existing installation. \endtable diff --git a/src/libs/installer/constants.h b/src/libs/installer/constants.h index b871e620..012d0cc5 100644 --- a/src/libs/installer/constants.h +++ b/src/libs/installer/constants.h @@ -92,6 +92,7 @@ static const QLatin1String scWizardDefaultHeight("WizardDefaultHeight"); static const QLatin1String scUrlQueryString("UrlQueryString"); static const QLatin1String scProductUUID("ProductUUID"); static const QLatin1String scAllUsers("AllUsers"); +static const QLatin1String scSupportsModify("SupportsModify"); const char scRelocatable[] = "@RELOCATABLE_PATH@"; diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index 76294ec6..019bbfe7 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -2035,7 +2035,13 @@ void PackageManagerCorePrivate::registerMaintenanceTool() const quint64 limit = std::numeric_limits::max(); // maximum 32 bit value if (estimatedSizeKB <= limit) settings.setValue(QLatin1String("EstimatedSize"), static_cast(estimatedSizeKB)); - settings.setValue(QLatin1String("NoModify"), 0); + + const bool supportsModify = m_core->value(scSupportsModify, scTrue) == scTrue; + if (supportsModify) + settings.setValue(QLatin1String("NoModify"), 0); + else + settings.setValue(QLatin1String("NoModify"), 1); + settings.setValue(QLatin1String("NoRepair"), 1); #endif } diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp index 3e933574..f849404f 100644 --- a/src/libs/installer/settings.cpp +++ b/src/libs/installer/settings.cpp @@ -261,7 +261,7 @@ Settings Settings::fromFileAndPrefix(const QString &path, const QString &prefix, << scWizardDefaultWidth << scWizardDefaultHeight << scRepositorySettingsPageVisible << scTargetConfigurationFile << scRemoteRepositories << scTranslations << scUrlQueryString << QLatin1String(scControlScript) - << scCreateLocalRepository << scInstallActionColumnVisible; + << scCreateLocalRepository << scInstallActionColumnVisible << scSupportsModify; Settings s; s.d->m_data.insert(scPrefix, prefix); @@ -743,3 +743,8 @@ QString Settings::controlScript() const { return d->m_data.value(QLatin1String(scControlScript)).toString(); } + +bool Settings::supportsModify() const +{ + return d->m_data.value(scSupportsModify, true).toBool(); +} diff --git a/src/libs/installer/settings.h b/src/libs/installer/settings.h index 6c437a72..9c0920e6 100644 --- a/src/libs/installer/settings.h +++ b/src/libs/installer/settings.h @@ -157,6 +157,8 @@ public: QString controlScript() const; + bool supportsModify() const; + private: class Private; QSharedDataPointer d; diff --git a/tests/auto/installer/settings/data/full_config.xml b/tests/auto/installer/settings/data/full_config.xml index 1544961f..272a1b0d 100644 --- a/tests/auto/installer/settings/data/full_config.xml +++ b/tests/auto/installer/settings/data/full_config.xml @@ -57,4 +57,6 @@ File should contain all elements we allow in a config.xml controlscript.js + + true diff --git a/tests/auto/installer/settings/tst_settings.cpp b/tests/auto/installer/settings/tst_settings.cpp index 07ff374a..fc49f4ed 100644 --- a/tests/auto/installer/settings/tst_settings.cpp +++ b/tests/auto/installer/settings/tst_settings.cpp @@ -90,6 +90,8 @@ void tst_Settings::loadTutorialConfig() QCOMPARE(settings.translations(), QStringList()); QCOMPARE(settings.controlScript(), QString()); + + QCOMPARE(settings.supportsModify(), true); } void tst_Settings::loadFullConfig()