diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2012-11-19 14:14:50 +0100 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2012-11-23 23:59:08 +0000 |
commit | a41b7953f8af0b1d62d111514cd4613f40842e60 (patch) | |
tree | 2e116a312d96b10b3a3f8e73049f8401ead565ca | |
parent | 13f85c24bd9e0d25af0dc1a4887d14449a8e5b55 (diff) |
fdo#57224: Preserve disabled-state across reinstallDeployedExtensions
(cherry picked from commit 6f9c3bc8edc93be07273d9de13dda19ea6c1da4a plus follow-
up a05e1e4967a21f3dd5a49215d97df99a7ec84f18 "fdo#57224: Fix logic of considering
optional/ambiguous value as 'disabled'")
Change-Id: Ic4f6cda4de758df4789e80b48b30f11ef810d2bd
Reviewed-on: https://gerrit.libreoffice.org/1120
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Fridrich Strba <fridrich@documentfoundation.org>
Reviewed-by: Norbert Thiebaud <nthiebaud@gmail.com>
Tested-by: Norbert Thiebaud <nthiebaud@gmail.com>
-rw-r--r-- | desktop/source/deployment/manager/dp_extensionmanager.cxx | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx index b3c21b4db52e..cd09a9e4fe76 100644 --- a/desktop/source/deployment/manager/dp_extensionmanager.cxx +++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx @@ -65,6 +65,7 @@ #include <list> #include <boost/unordered_map.hpp> #include <algorithm> +#include <set> namespace deploy = com::sun::star::deployment; namespace lang = com::sun::star::lang; @@ -1220,6 +1221,31 @@ void ExtensionManager::reinstallDeployedExtensions( Reference<deploy::XPackageManager> xPackageManager = getPackageManager(repository); + std::set< OUString > disabledExts; + { + const uno::Sequence< Reference<deploy::XPackage> > extensions( + xPackageManager->getDeployedPackages(xAbortChannel, xCmdEnv)); + for ( sal_Int32 pos = 0; pos < extensions.getLength(); ++pos ) + { + try + { + beans::Optional< beans::Ambiguous< sal_Bool > > registered( + extensions[pos]->isRegistered(xAbortChannel, xCmdEnv)); + if (registered.IsPresent && + !(registered.Value.IsAmbiguous || + registered.Value.Value)) + { + const OUString id = dp_misc::getIdentifier(extensions[ pos ]); + OSL_ASSERT(!id.isEmpty()); + disabledExts.insert(id); + } + } + catch (const lang::DisposedException &) + { + } + } + } + ::osl::MutexGuard guard(getMutex()); xPackageManager->reinstallDeployedPackages( force, xAbortChannel, xCmdEnv); @@ -1236,7 +1262,9 @@ void ExtensionManager::reinstallDeployedExtensions( const OUString id = dp_misc::getIdentifier(extensions[ pos ]); const OUString fileName = extensions[ pos ]->getName(); OSL_ASSERT(!id.isEmpty()); - activateExtension(id, fileName, false, true, xAbortChannel, xCmdEnv ); + activateExtension( + id, fileName, disabledExts.find(id) != disabledExts.end(), + true, xAbortChannel, xCmdEnv ); } catch (const lang::DisposedException &) { |