diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2013-02-05 13:01:05 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2013-02-05 13:08:22 +0100 |
commit | 3c71fa1e5ee6cd83f713c65a372006bc3aef0953 (patch) | |
tree | b61902a183a4a880734bfe11310722a10987b646 /desktop | |
parent | 3d23c626e685f8ab3ee1780f10f368ee8ede61d0 (diff) |
Cleanly remove an extension again that cannot be activated while installing it
...otherwise, it will needlessly be carried forward marked "broken."
Change-Id: I12fbd4430e1ecc11f1969ae5f49aed43668f2c27
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/source/deployment/manager/dp_extensionmanager.cxx | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx index 9add42544d8a..194dd875269f 100644 --- a/desktop/source/deployment/manager/dp_extensionmanager.cxx +++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx @@ -693,6 +693,10 @@ Reference<deploy::XPackage> ExtensionManager::addExtension( xOldExtension ); { + bool added = false; + OUString sNewExtensionIdentifier; + OUString sNewExtensionFileName; + // In this garded section (getMutex) we must not use the argument xCmdEnv // because it may bring up dialogs (XInteractionHandler::handle) this //may potententially deadlock. See issue @@ -737,6 +741,7 @@ Reference<deploy::XPackage> ExtensionManager::addExtension( xNewExtension = xPackageManager->addPackage( url, properties, OUString(), xAbortChannel, Reference<ucb::XCommandEnvironment>()); + added = true; //If we add a user extension and there is already one which was //disabled by a user, then the newly installed one is enabled. If we //add to another repository then the user extension remains @@ -745,9 +750,8 @@ Reference<deploy::XPackage> ExtensionManager::addExtension( if (repository == "user") bUserDisabled2 = false; - // pass the two values via variables to workaround gcc-4.3.4 specific bug (bnc#655912) - OUString sNewExtensionIdentifier = dp_misc::getIdentifier(xNewExtension); - OUString sNewExtensionFileName = xNewExtension->getName(); + sNewExtensionIdentifier = dp_misc::getIdentifier(xNewExtension); + sNewExtensionFileName = xNewExtension->getName(); activateExtension( sNewExtensionIdentifier, sNewExtensionFileName, @@ -792,6 +796,18 @@ Reference<deploy::XPackage> ExtensionManager::addExtension( //If the user aborted installation then a ucb::CommandAbortedException //is thrown. //Use a private AbortChannel so the user cannot interrupt. + if (added) { + try { + xPackageManager->removePackage( + sNewExtensionIdentifier, sNewExtensionFileName, + css::uno::Reference< css::task::XAbortChannel >(), + css::uno::Reference< css::ucb::XCommandEnvironment >()); + } catch (css::uno::Exception & e) { + SAL_WARN( + "desktop.deployment", + "ignoring Exception " << e.Message); + } + } try { if (xExtensionBackup.is()) |