From 6f9c3bc8edc93be07273d9de13dda19ea6c1da4a Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Mon, 19 Nov 2012 14:14:50 +0100 Subject: fdo#57224: Preserve disabled-state across reinstallDeployedExtensions Change-Id: I8d65b76fd93b63b51db88b7b09902ba64732dd97 --- .../deployment/manager/dp_extensionmanager.cxx | 30 +++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'desktop') diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx index 4ba55848494d..b0c65e026330 100644 --- a/desktop/source/deployment/manager/dp_extensionmanager.cxx +++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx @@ -65,6 +65,7 @@ #include #include #include +#include namespace deploy = com::sun::star::deployment; namespace lang = com::sun::star::lang; @@ -1234,6 +1235,31 @@ void ExtensionManager::reinstallDeployedExtensions( Reference xPackageManager = getPackageManager(repository); + std::set< OUString > disabledExts; + { + const uno::Sequence< Reference > 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); @@ -1250,7 +1276,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 &) { -- cgit