diff options
-rw-r--r-- | configmgr/source/components.cxx | 45 | ||||
-rw-r--r-- | configmgr/source/components.hxx | 5 | ||||
-rw-r--r-- | desktop/source/deployment/gui/dp_gui_dialog2.cxx | 32 | ||||
-rw-r--r--[-rwxr-xr-x] | desktop/source/deployment/misc/dp_update.cxx | 84 | ||||
-rw-r--r-- | svx/source/items/svxitems.src | 2 |
5 files changed, 121 insertions, 47 deletions
diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx index 33b0eca3f65f..cc5ea1e1e739 100644 --- a/configmgr/source/components.cxx +++ b/configmgr/source/components.cxx @@ -334,12 +334,14 @@ void Components::insertModificationXcuFile( Modifications * modifications) { OSL_ASSERT(modifications != 0); + Partial part(includedPaths, excludedPaths); try { - Partial part(includedPaths, excludedPaths); - parseXcuFile(fileUri, Data::NO_LAYER, data_, &part, modifications, 0); - } catch (css::uno::Exception & e) { //TODO: more specific exception catching + parseFileLeniently( + &parseXcuFile, fileUri, Data::NO_LAYER, data_, &part, modifications, + 0); + } catch (css::container::NoSuchElementException & e) { OSL_TRACE( - "configmgr error inserting %s: %s", + "configmgr error inserting non-existing %s: %s", rtl::OUStringToOString(fileUri, RTL_TEXTENCODING_UTF8).getStr(), rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8).getStr()); } @@ -492,20 +494,32 @@ Components::Components( "com.sun.star.comp.deployment.configuration." "PackageRegistryBackend/configmgr.ini"))), true); + parseModificationLayer(); + RTL_LOGFILE_TRACE_AUTHOR("configmgr", "sb", "end parsing"); +} + +Components::~Components() {} + +void Components::parseFileLeniently( + FileParser * parseFile, rtl::OUString const & url, int layer, Data & data, + Partial const * partial, Modifications * modifications, + Additions * additions) +{ + OSL_ASSERT(parseFile != 0); try { - parseModificationLayer(); + (*parseFile)(url, layer, data, partial, modifications, additions); + } catch (css::container::NoSuchElementException &) { + throw; } catch (css::uno::Exception & e) { //TODO: more specific exception catching - // Silently ignore unreadable parts of a corrupted user modification - // layer, instead of completely preventing OOo from starting: + // Silently ignore invalid XML files, instead of completely preventing + // OOo from starting: OSL_TRACE( - "configmgr error reading user modification layer: %s", + "configmgr error reading %s: %s", + rtl::OUStringToOString(url, RTL_TEXTENCODING_UTF8).getStr(), rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8).getStr()); } - RTL_LOGFILE_TRACE_AUTHOR("configmgr", "sb", "end parsing"); } -Components::~Components() {} - void Components::parseFiles( int layer, rtl::OUString const & extension, FileParser * parseFile, rtl::OUString const & url, bool recursive) @@ -557,7 +571,8 @@ void Components::parseFiles( file.match(extension, file.getLength() - extension.getLength())) { try { - (*parseFile)(stat.getFileURL(), layer, data_, 0, 0, 0); + parseFileLeniently( + parseFile, stat.getFileURL(), layer, data_, 0, 0, 0); } catch (css::container::NoSuchElementException & e) { throw css::uno::RuntimeException( (rtl::OUString( @@ -584,7 +599,7 @@ void Components::parseFileList( adds = data_.addExtensionXcuAdditions(url, layer); } try { - (*parseFile)(url, layer, data_, 0, 0, adds); + parseFileLeniently(parseFile, url, layer, data_, 0, 0, adds); } catch (css::container::NoSuchElementException & e) { OSL_TRACE( "configmgr file does not exist: %s", @@ -746,7 +761,9 @@ rtl::OUString Components::getModificationFileUrl() const { void Components::parseModificationLayer() { try { - parseXcuFile(getModificationFileUrl(), Data::NO_LAYER, data_, 0, 0, 0); + parseFileLeniently( + &parseXcuFile, getModificationFileUrl(), Data::NO_LAYER, data_, 0, + 0, 0); } catch (css::container::NoSuchElementException &) { OSL_TRACE( "configmgr user registrymodifications.xcu does not (yet) exist"); diff --git a/configmgr/source/components.hxx b/configmgr/source/components.hxx index 880ac95d34a8..4fc47f791821 100644 --- a/configmgr/source/components.hxx +++ b/configmgr/source/components.hxx @@ -123,6 +123,11 @@ private: ~Components(); + void parseFileLeniently( + FileParser * parseFile, rtl::OUString const & url, int layer, + Data & data, Partial const * partial, Modifications * modifications, + Additions * additions); + void parseFiles( int layer, rtl::OUString const & extension, FileParser * parseFile, rtl::OUString const & url, bool recursive); diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.cxx b/desktop/source/deployment/gui/dp_gui_dialog2.cxx index 78b29624b16e..44d1e30f74b6 100644 --- a/desktop/source/deployment/gui/dp_gui_dialog2.cxx +++ b/desktop/source/deployment/gui/dp_gui_dialog2.cxx @@ -363,26 +363,28 @@ bool ExtBoxWithBtns_Impl::HandleTabKey( bool bReverse ) // ----------------------------------------------------------------------- MENU_COMMAND ExtBoxWithBtns_Impl::ShowPopupMenu( const Point & rPos, const long nPos ) { - if ( nPos >= (long) getItemCount() ) - return CMD_NONE; + if ( ( nPos >= 0 ) && ( nPos < (long) getItemCount() ) ) + { + if ( ! GetEntryData( nPos )->m_bLocked ) + { + PopupMenu aPopup; - PopupMenu aPopup; + aPopup.InsertItem( CMD_UPDATE, DialogHelper::getResourceString( RID_CTX_ITEM_CHECK_UPDATE ) ); - aPopup.InsertItem( CMD_UPDATE, DialogHelper::getResourceString( RID_CTX_ITEM_CHECK_UPDATE ) ); + if ( GetEntryData( nPos )->m_bUser ) + { + if ( GetEntryData( nPos )->m_eState == REGISTERED ) + aPopup.InsertItem( CMD_DISABLE, DialogHelper::getResourceString( RID_CTX_ITEM_DISABLE ) ); + else if ( GetEntryData( nPos )->m_eState != NOT_AVAILABLE ) + aPopup.InsertItem( CMD_ENABLE, DialogHelper::getResourceString( RID_CTX_ITEM_ENABLE ) ); + } - if ( ! GetEntryData( nPos )->m_bLocked ) - { - if ( GetEntryData( nPos )->m_bUser ) - { - if ( GetEntryData( nPos )->m_eState == REGISTERED ) - aPopup.InsertItem( CMD_DISABLE, DialogHelper::getResourceString( RID_CTX_ITEM_DISABLE ) ); - else if ( GetEntryData( nPos )->m_eState != NOT_AVAILABLE ) - aPopup.InsertItem( CMD_ENABLE, DialogHelper::getResourceString( RID_CTX_ITEM_ENABLE ) ); + aPopup.InsertItem( CMD_REMOVE, DialogHelper::getResourceString( RID_CTX_ITEM_REMOVE ) ); + + return (MENU_COMMAND) aPopup.Execute( this, rPos ); } - aPopup.InsertItem( CMD_REMOVE, DialogHelper::getResourceString( RID_CTX_ITEM_REMOVE ) ); } - - return (MENU_COMMAND) aPopup.Execute( this, rPos ); + return CMD_NONE; } //------------------------------------------------------------------------------ diff --git a/desktop/source/deployment/misc/dp_update.cxx b/desktop/source/deployment/misc/dp_update.cxx index 52011f1f0ca0..fb6efe0b79aa 100755..100644 --- a/desktop/source/deployment/misc/dp_update.cxx +++ b/desktop/source/deployment/misc/dp_update.cxx @@ -90,8 +90,6 @@ getUpdateInformation( Reference<deployment::XUpdateInformationProvider > const & Sequence<Reference< xml::dom::XElement > >(); } -//Put in anonymous namespace - void getOwnUpdateInfos( Reference<uno::XComponentContext> const & xContext, Reference<deployment::XUpdateInformationProvider > const & updateInformation, @@ -185,6 +183,56 @@ void getDefaultUpdateInfos( } } +bool containsBundledOnly(Sequence<Reference<deployment::XPackage> > const & sameIdExtensions) +{ + OSL_ASSERT(sameIdExtensions.getLength() == 3); + if (!sameIdExtensions[0].is() && !sameIdExtensions[1].is() && sameIdExtensions[2].is()) + return true; + else + return false; +} +/** Returns true if the list of extensions are bundled extensions and there are no + other extensions with the same identifier in the shared or user repository. + If extensionList is NULL, then it is checked if there are only bundled extensions. +*/ +bool onlyBundledExtensions( + Reference<deployment::XExtensionManager> const & xExtMgr, + std::vector< Reference<deployment::XPackage > > const * extensionList) +{ + OSL_ASSERT(xExtMgr.is()); + bool onlyBundled = true; + if (extensionList) + { + typedef std::vector<Reference<deployment::XPackage > >::const_iterator CIT; + for (CIT i = extensionList->begin(); i != extensionList->end(); i++) + { + Sequence<Reference<deployment::XPackage> > seqExt = xExtMgr->getExtensionsWithSameIdentifier( + dp_misc::getIdentifier(*i), (*i)->getName(), Reference<ucb::XCommandEnvironment>()); + + if (!containsBundledOnly(seqExt)) + { + onlyBundled = false; + break; + } + + } + } + else + { + const uno::Sequence< uno::Sequence< Reference<deployment::XPackage > > > seqAllExt = + xExtMgr->getAllExtensions(Reference<task::XAbortChannel>(), Reference<ucb::XCommandEnvironment>()); + + for (int pos = seqAllExt.getLength(); pos --; ) + { + if (!containsBundledOnly(seqAllExt[pos])) + { + onlyBundled = false; + break; + } + } + } + return onlyBundled; +} } // anon namespace @@ -233,13 +281,14 @@ UPDATE_SOURCE isUpdateUserExtension( retVal = UPDATE_SOURCE_ONLINE; } - else if (bundledVersion.getLength()) - { - int index = determineHighestVersion( - OUString(), OUString(), bundledVersion, onlineVersion); - if (index == 3) - retVal = UPDATE_SOURCE_ONLINE; - } + //No update for bundled extensions, they are updated only by the setup + //else if (bundledVersion.getLength()) + //{ + // int index = determineHighestVersion( + // OUString(), OUString(), bundledVersion, onlineVersion); + // if (index == 3) + // retVal = UPDATE_SOURCE_ONLINE; + //} } else { @@ -278,13 +327,14 @@ UPDATE_SOURCE isUpdateSharedExtension( else if (index == 3) retVal = UPDATE_SOURCE_ONLINE; } - else if (bundledVersion.getLength()) - { - int index = determineHighestVersion( - OUString(), OUString(), bundledVersion, onlineVersion); - if (index == 3) - retVal = UPDATE_SOURCE_ONLINE; - } + //No update for bundled extensions, they are updated only by the setup + //else if (bundledVersion.getLength()) + //{ + // int index = determineHighestVersion( + // OUString(), OUString(), bundledVersion, onlineVersion); + // if (index == 3) + // retVal = UPDATE_SOURCE_ONLINE; + //} return retVal; } @@ -332,7 +382,7 @@ UpdateInfoMap getOnlineUpdateInfos( { OSL_ASSERT(xExtMgr.is()); UpdateInfoMap infoMap; - if (!xExtMgr.is()) + if (!xExtMgr.is() || onlyBundledExtensions(xExtMgr, extensionList)) return infoMap; if (!extensionList) diff --git a/svx/source/items/svxitems.src b/svx/source/items/svxitems.src index e21ea8fc6e4b..d80f871d8b3c 100644 --- a/svx/source/items/svxitems.src +++ b/svx/source/items/svxitems.src @@ -32,7 +32,7 @@ StringArray RID_ATTR_NAMES { - ItemList = + ItemList [ en-US ] = { < "Scale" ; SID_ATTR_ZOOM ; > ; < "Brush" ; SID_ATTR_BRUSH ; > ; |