basic/inc/sbxbase.hxx | 9 ++-- basic/source/basmgr/basmgr.cxx | 82 +++++++++++++++++++-------------------- basic/source/classes/propacc.cxx | 6 +- basic/source/comp/symtbl.cxx | 32 ++++++++------- basic/source/inc/propacc.hxx | 5 +- basic/source/inc/symtbl.hxx | 7 +-- basic/source/sbx/sbxbase.cxx | 26 ++++++------ 7 files changed, 87 insertions(+), 80 deletions(-)
New commits: commit 51eb04a158a89cc2260d40e844ac7b9eca0cee0a Author: Michael Stahl <mst...@redhat.com> Date: Sun Oct 25 17:23:27 2015 +0100 basic: replace boost::ptr_vector with std::vector<std::unique_ptr> Change-Id: I98c4ac860fbdb55a61f9be0e9d2d5f29fb849e05 diff --git a/basic/source/comp/symtbl.cxx b/basic/source/comp/symtbl.cxx index db6b150..a0390af 100644 --- a/basic/source/comp/symtbl.cxx +++ b/basic/source/comp/symtbl.cxx @@ -107,33 +107,33 @@ SbiSymDef* SbiSymPool::First() SbiSymDef* SbiSymPool::Next() { - if( ++nCur >= aData.size() ) + if (m_Data.size() <= ++nCur) return NULL; else - return &aData[ nCur ]; + return m_Data[ nCur ].get(); } SbiSymDef* SbiSymPool::AddSym( const OUString& rName ) { SbiSymDef* p = new SbiSymDef( rName ); - p->nPos = aData.size(); + p->nPos = m_Data.size(); p->nId = rStrings.Add( rName ); p->nProcId = nProcId; p->pIn = this; - aData.insert( aData.begin() + p->nPos, p ); + m_Data.insert( m_Data.begin() + p->nPos, std::unique_ptr<SbiSymDef>(p) ); return p; } SbiProcDef* SbiSymPool::AddProc( const OUString& rName ) { SbiProcDef* p = new SbiProcDef( pParser, rName ); - p->nPos = aData.size(); + p->nPos = m_Data.size(); p->nId = rStrings.Add( rName ); // procs are always local p->nProcId = 0; p->pIn = this; - aData.insert( aData.begin() + p->nPos, p ); + m_Data.insert( m_Data.begin() + p->nPos, std::unique_ptr<SbiProcDef>(p) ); return p; } @@ -152,7 +152,7 @@ void SbiSymPool::Add( SbiSymDef* pDef ) return; } - pDef->nPos = aData.size(); + pDef->nPos = m_Data.size(); if( !pDef->nId ) { // A unique name must be created in the string pool @@ -172,17 +172,17 @@ void SbiSymPool::Add( SbiSymDef* pDef ) pDef->nProcId = nProcId; } pDef->pIn = this; - aData.insert( aData.begin() + pDef->nPos, pDef ); + m_Data.insert( m_Data.begin() + pDef->nPos, std::unique_ptr<SbiSymDef>(pDef) ); } } SbiSymDef* SbiSymPool::Find( const OUString& rName ) { - sal_uInt16 nCount = aData.size(); + sal_uInt16 nCount = m_Data.size(); for( sal_uInt16 i = 0; i < nCount; i++ ) { - SbiSymDef &r = aData[ nCount - i - 1 ]; + SbiSymDef &r = *m_Data[ nCount - i - 1 ]; if( ( !r.nProcId || ( r.nProcId == nProcId)) && ( r.aName.equalsIgnoreAsciiCase(rName))) { @@ -204,13 +204,13 @@ SbiSymDef* SbiSymPool::Find( const OUString& rName ) SbiSymDef* SbiSymPool::Get( sal_uInt16 n ) { - if( n >= aData.size() ) + if (m_Data.size() <= n) { return NULL; } else { - return &aData[ n ]; + return m_Data[ n ].get(); } } @@ -246,9 +246,9 @@ sal_uInt32 SbiSymPool::Reference( const OUString& rName ) void SbiSymPool::CheckRefs() { - for( size_t i = 0; i < aData.size(); i++ ) + for (size_t i = 0; i < m_Data.size(); ++i) { - SbiSymDef &r = aData[ i ]; + SbiSymDef &r = *m_Data[ i ]; if( !r.IsDefined() ) { pParser->Error( ERRCODE_BASIC_UNDEF_LABEL, r.GetName() ); @@ -459,7 +459,9 @@ void SbiProcDef::Match( SbiProcDef* pOld ) nPos = pOld->nPos; nId = pOld->nId; pIn = pOld->pIn; - pIn->aData.replace( nPos, this ).release(); + std::unique_ptr<SbiSymDef> tmp(this); + std::swap(pIn->m_Data[nPos], tmp); + tmp.release(); } delete pOld; } diff --git a/basic/source/inc/symtbl.hxx b/basic/source/inc/symtbl.hxx index d9e279d..2f75fa8 100644 --- a/basic/source/inc/symtbl.hxx +++ b/basic/source/inc/symtbl.hxx @@ -20,8 +20,8 @@ #ifndef INCLUDED_BASIC_SOURCE_INC_SYMTBL_HXX #define INCLUDED_BASIC_SOURCE_INC_SYMTBL_HXX +#include <memory> #include <vector> -#include <boost/ptr_container/ptr_vector.hpp> class SbiConstDef; class SbiParser; @@ -54,8 +54,7 @@ class SbiSymPool { friend class SbiProcDef; protected: SbiStringPool& rStrings; - boost::ptr_vector<SbiSymDef> - aData; + std::vector<std::unique_ptr<SbiSymDef>> m_Data; SbiSymPool* pParent; SbiParser* pParser; SbiSymScope eScope; @@ -67,7 +66,7 @@ public: void SetParent( SbiSymPool* p ) { pParent = p; } void SetProcId( short n ) { nProcId = n; } - sal_uInt16 GetSize() const { return aData.size(); } + sal_uInt16 GetSize() const { return m_Data.size(); } SbiSymScope GetScope() const { return eScope; } void SetScope( SbiSymScope s ) { eScope = s; } SbiParser* GetParser() { return pParser; } commit 71f6aab077f30f8b0eb6c7458cb0646dea892148 Author: Michael Stahl <mst...@redhat.com> Date: Sun Oct 25 16:54:21 2015 +0100 basic: replace boot::ptr_vector with std::vector Change-Id: I4967ad8345cd74c39edbea1df513978b62996b90 diff --git a/basic/source/classes/propacc.cxx b/basic/source/classes/propacc.cxx index dac042e..2a0b49a 100644 --- a/basic/source/classes/propacc.cxx +++ b/basic/source/classes/propacc.cxx @@ -26,6 +26,7 @@ #include <comphelper/propertysetinfo.hxx> +#include <algorithm> #include <limits.h> using com::sun::star::uno::Reference; @@ -178,14 +179,13 @@ void SbPropertyValues::setPropertyValues(const Sequence< PropertyValue >& rPrope css::lang::WrappedTargetException, css::uno::RuntimeException, std::exception) { - if ( !m_aPropVals.empty() ) + if (!m_aPropVals.empty()) throw IllegalArgumentException(); const PropertyValue *pPropVals = rPropertyValues.getConstArray(); for (sal_Int32 n = 0; n < rPropertyValues.getLength(); ++n) { - PropertyValue *pPropVal = new PropertyValue(pPropVals[n]); - m_aPropVals.push_back( pPropVal ); + m_aPropVals.push_back(pPropVals[n]); } } diff --git a/basic/source/inc/propacc.hxx b/basic/source/inc/propacc.hxx index 325976e..ec227a4 100644 --- a/basic/source/inc/propacc.hxx +++ b/basic/source/inc/propacc.hxx @@ -25,9 +25,10 @@ #include <com/sun/star/beans/XPropertyAccess.hpp> #include <com/sun/star/beans/XPropertyContainer.hpp> #include <cppuhelper/implbase.hxx> -#include <boost/ptr_container/ptr_vector.hpp> -typedef ::boost::ptr_vector< css::beans::PropertyValue > SbPropertyValueArr_Impl; +#include <vector> + +typedef ::std::vector<css::beans::PropertyValue> SbPropertyValueArr_Impl; typedef ::cppu::WeakImplHelper< css::beans::XPropertySet, css::beans::XPropertyAccess > SbPropertyValuesHelper; commit 79a7cf54244ffd112bea4d754e494d261ce3f061 Author: Michael Stahl <mst...@redhat.com> Date: Sun Oct 25 11:23:39 2015 +0100 basic: replace boost::ptr_vector with std::vector<std::unique_ptr> Change-Id: I0bd3a5182d62432a8f0caf4bbae11bbce56a363c diff --git a/basic/source/basmgr/basmgr.cxx b/basic/source/basmgr/basmgr.cxx index f6b9f14..46e43eb 100644 --- a/basic/source/basmgr/basmgr.cxx +++ b/basic/source/basmgr/basmgr.cxx @@ -43,8 +43,8 @@ #include "sbintern.hxx" #include <sb.hrc> +#include <memory> #include <vector> -#include <boost/ptr_container/ptr_vector.hpp> #define LIB_SEP 0x01 #define LIBINFO_SEP 0x02 @@ -111,7 +111,7 @@ struct BasicManagerImpl SvMemoryStream** mppLibStreams; sal_Int32 mnLibStreamCount; - boost::ptr_vector<BasicLibInfo> aLibs; + std::vector<std::unique_ptr<BasicLibInfo>> aLibs; OUString aBasicLibPath; BasicManagerImpl() @@ -510,7 +510,7 @@ BasicManager::BasicManager( SotStorage& rStorage, const OUString& rBaseURL, Star if (mpImpl->aLibs.empty()) CreateLibInfo(); - BasicLibInfo& rStdLibInfo = mpImpl->aLibs.front(); + BasicLibInfo& rStdLibInfo = *mpImpl->aLibs.front(); rStdLibInfo.SetLib( pStdLib ); StarBASICRef xStdLib = rStdLibInfo.GetLib(); @@ -550,7 +550,7 @@ BasicManager::BasicManager( SotStorage& rStorage, const OUString& rBaseURL, Star mpImpl->mppLibStreams = new SvMemoryStream*[ nLibs ]; for( sal_uInt16 nL = 0; nL < nLibs; nL++ ) { - BasicLibInfo& rInfo = mpImpl->aLibs[nL]; + BasicLibInfo& rInfo = *mpImpl->aLibs[nL]; tools::SvRef<SotStorageStream> xBasicStream = xBasicStorage->OpenSotStream( rInfo.GetLibName(), eStreamReadMode ); mpImpl->mppLibStreams[nL] = new SvMemoryStream(); static_cast<SvStream*>(&xBasicStream)->ReadStream( *( mpImpl->mppLibStreams[nL] ) ); @@ -644,27 +644,27 @@ void BasicManager::SetLibraryContainerInfo( const LibraryContainerInfo& rInfo ) else { // No libs? Maybe an 5.2 document already loaded - for( BasicLibInfo& rBasLibInfo: mpImpl->aLibs ) + for (auto const& rpBasLibInfo : mpImpl->aLibs) { - StarBASIC* pLib = rBasLibInfo.GetLib(); + StarBASIC* pLib = rpBasLibInfo->GetLib(); if( !pLib ) { - bool bLoaded = ImpLoadLibrary( &rBasLibInfo, NULL ); + bool bLoaded = ImpLoadLibrary( rpBasLibInfo.get(), NULL ); if( bLoaded ) - pLib = rBasLibInfo.GetLib(); + pLib = rpBasLibInfo->GetLib(); } if( pLib ) { copyToLibraryContainer( pLib, mpImpl->maContainerInfo ); - if( rBasLibInfo.HasPassword() ) + if (rpBasLibInfo->HasPassword()) { OldBasicPassword* pOldBasicPassword = mpImpl->maContainerInfo.mpOldBasicPassword; if( pOldBasicPassword ) { - pOldBasicPassword->setLibraryPassword - ( pLib->GetName(), rBasLibInfo.GetPassword() ); - rBasLibInfo.SetPasswordVerified(); + pOldBasicPassword->setLibraryPassword( + pLib->GetName(), rpBasLibInfo->GetPassword() ); + rpBasLibInfo->SetPasswordVerified(); } } } @@ -801,7 +801,7 @@ void BasicManager::LoadBasicManager( SotStorage& rStorage, const OUString& rBase } } - mpImpl->aLibs.push_back( pInfo ); + mpImpl->aLibs.push_back(std::unique_ptr<BasicLibInfo>(pInfo)); // Libs from external files should be loaded only when necessary. // But references are loaded at once, otherwise some big customers get into trouble if ( bLoadLibs && pInfo->DoLoad() && @@ -838,7 +838,7 @@ void BasicManager::LoadOldBasicManager( SotStorage& rStorage ) DBG_ASSERT( !xManagerStream->GetError(), "Invalid Manager-Stream!" ); xManagerStream->Seek( nBasicStartOff ); - if( !ImplLoadBasic( *xManagerStream, mpImpl->aLibs.front().GetLibRef() ) ) + if (!ImplLoadBasic( *xManagerStream, mpImpl->aLibs.front()->GetLibRef() )) { StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_MGROPEN, aStorName, ERRCODE_BUTTON_OK ); aErrors.push_back(BasicError(*pErrInf, BasicErrorReason::OPENMGRSTREAM, aStorName)); @@ -938,8 +938,8 @@ void BasicManager::Init() BasicLibInfo* BasicManager::CreateLibInfo() { - BasicLibInfo* pInf = new BasicLibInfo; - mpImpl->aLibs.push_back( pInf ); + BasicLibInfo* pInf(new BasicLibInfo); + mpImpl->aLibs.push_back(std::unique_ptr<BasicLibInfo>(pInf)); return pInf; } @@ -1190,7 +1190,7 @@ bool BasicManager::IsReference( sal_uInt16 nLib ) DBG_ASSERT( nLib < mpImpl->aLibs.size(), "Lib does not exist!" ); if ( nLib < mpImpl->aLibs.size() ) { - return mpImpl->aLibs[nLib].IsReference(); + return mpImpl->aLibs[nLib]->IsReference(); } return false; } @@ -1214,23 +1214,23 @@ bool BasicManager::RemoveLib( sal_uInt16 nLib, bool bDelBasicFromStorage ) return false; } - boost::ptr_vector<BasicLibInfo>::iterator itLibInfo = mpImpl->aLibs.begin() + nLib; + auto const itLibInfo = mpImpl->aLibs.begin() + nLib; // If one of the streams cannot be opened, this is not an error, // because BASIC was never written before... - if ( bDelBasicFromStorage && !itLibInfo->IsReference() && - ( !itLibInfo->IsExtern() || SotStorage::IsStorageFile( itLibInfo->GetStorageName() ) ) ) + if (bDelBasicFromStorage && !(*itLibInfo)->IsReference() && + (!(*itLibInfo)->IsExtern() || SotStorage::IsStorageFile((*itLibInfo)->GetStorageName()))) { tools::SvRef<SotStorage> xStorage; try { - if (!itLibInfo->IsExtern()) + if (!(*itLibInfo)->IsExtern()) { xStorage = new SotStorage(false, GetStorageName()); } else { - xStorage = new SotStorage(false, itLibInfo->GetStorageName()); + xStorage = new SotStorage(false, (*itLibInfo)->GetStorageName()); } } catch (const css::ucb::ContentCreationException& e) @@ -1246,11 +1246,11 @@ bool BasicManager::RemoveLib( sal_uInt16 nLib, bool bDelBasicFromStorage ) if ( !xBasicStorage.Is() || xBasicStorage->GetError() ) { StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_REMOVELIB, OUString(), ERRCODE_BUTTON_OK ); - aErrors.push_back(BasicError(*pErrInf, BasicErrorReason::OPENLIBSTORAGE, itLibInfo->GetLibName())); + aErrors.push_back(BasicError(*pErrInf, BasicErrorReason::OPENLIBSTORAGE, (*itLibInfo)->GetLibName())); } - else if ( xBasicStorage->IsStream( itLibInfo->GetLibName() ) ) + else if (xBasicStorage->IsStream((*itLibInfo)->GetLibName())) { - xBasicStorage->Remove( itLibInfo->GetLibName() ); + xBasicStorage->Remove((*itLibInfo)->GetLibName()); xBasicStorage->Commit(); // If no further stream available, @@ -1278,9 +1278,9 @@ bool BasicManager::RemoveLib( sal_uInt16 nLib, bool bDelBasicFromStorage ) } } } - if ( itLibInfo->GetLib().Is() ) + if ((*itLibInfo)->GetLib().Is()) { - GetStdLib()->Remove( itLibInfo->GetLib() ); + GetStdLib()->Remove( (*itLibInfo)->GetLib() ); } mpImpl->aLibs.erase(itLibInfo); return true; // Remove was successful, del unimportant @@ -1296,7 +1296,7 @@ StarBASIC* BasicManager::GetLib( sal_uInt16 nLib ) const DBG_ASSERT( nLib < mpImpl->aLibs.size(), "Lib does not exist!" ); if ( nLib < mpImpl->aLibs.size() ) { - return mpImpl->aLibs[nLib].GetLib(); + return mpImpl->aLibs[nLib]->GetLib(); } return 0; } @@ -1309,11 +1309,11 @@ StarBASIC* BasicManager::GetStdLib() const StarBASIC* BasicManager::GetLib( const OUString& rName ) const { - for(const BasicLibInfo& rLib: mpImpl->aLibs) + for (auto const& rpLib : mpImpl->aLibs) { - if ( rLib.GetLibName().equalsIgnoreAsciiCase( rName ))// Check if available... + if (rpLib->GetLibName().equalsIgnoreAsciiCase(rName)) // Check if available... { - return rLib.GetLib(); + return rpLib->GetLib(); } } return 0; @@ -1323,7 +1323,7 @@ sal_uInt16 BasicManager::GetLibId( const OUString& rName ) const { for (size_t i = 0; i < mpImpl->aLibs.size(); i++) { - if ( mpImpl->aLibs[i].GetLibName().equalsIgnoreAsciiCase( rName )) + if (mpImpl->aLibs[i]->GetLibName().equalsIgnoreAsciiCase( rName )) { return (sal_uInt16)i; } @@ -1333,9 +1333,9 @@ sal_uInt16 BasicManager::GetLibId( const OUString& rName ) const bool BasicManager::HasLib( const OUString& rName ) const { - for(const BasicLibInfo& rLib: mpImpl->aLibs) + for (const auto& rpLib : mpImpl->aLibs) { - if ( rLib.GetLibName().equalsIgnoreAsciiCase( rName ))// Check if available... + if (rpLib->GetLibName().equalsIgnoreAsciiCase(rName)) // Check if available... { return true; } @@ -1348,7 +1348,7 @@ OUString BasicManager::GetLibName( sal_uInt16 nLib ) DBG_ASSERT( nLib < mpImpl->aLibs.size(), "Lib?!" ); if ( nLib < mpImpl->aLibs.size() ) { - return mpImpl->aLibs[nLib].GetLibName(); + return mpImpl->aLibs[nLib]->GetLibName(); } return OUString(); } @@ -1359,7 +1359,7 @@ bool BasicManager::LoadLib( sal_uInt16 nLib ) DBG_ASSERT( nLib < mpImpl->aLibs.size() , "Lib?!" ); if ( nLib < mpImpl->aLibs.size() ) { - BasicLibInfo& rLibInfo = mpImpl->aLibs[nLib]; + BasicLibInfo& rLibInfo = *mpImpl->aLibs[nLib]; uno::Reference< script::XLibraryContainer > xLibContainer = rLibInfo.GetLibraryContainer(); if( xLibContainer.is() ) { @@ -1461,11 +1461,11 @@ StarBASIC* BasicManager::CreateLibForLibContainer( const OUString& rLibName, BasicLibInfo* BasicManager::FindLibInfo( StarBASIC* pBasic ) { - for(BasicLibInfo& rLib: mpImpl->aLibs) + for (auto const& rpLib : mpImpl->aLibs) { - if ( rLib.GetLib() == pBasic ) + if (rpLib->GetLib() == pBasic) { - return &rLib; + return rpLib.get(); } } return NULL; @@ -1474,9 +1474,9 @@ BasicLibInfo* BasicManager::FindLibInfo( StarBASIC* pBasic ) bool BasicManager::IsBasicModified() const { - for(const BasicLibInfo& rLib: mpImpl->aLibs) + for (auto const& rpLib : mpImpl->aLibs) { - if ( rLib.GetLib().Is() && rLib.GetLib()->IsModified() ) + if (rpLib->GetLib().Is() && rpLib->GetLib()->IsModified()) { return true; } commit 192ca71f07390af6528531c0c4c9254c97a98cfc Author: Michael Stahl <mst...@redhat.com> Date: Sun Oct 25 10:02:24 2015 +0100 basic: replace boost::ptr_vector with std::vector<std::unqiue_ptr> Change-Id: Ieba2fb34e0279871d36b4fe80d9de76e614b5cde diff --git a/basic/inc/sbxbase.hxx b/basic/inc/sbxbase.hxx index 21bb7d4..8177643 100644 --- a/basic/inc/sbxbase.hxx +++ b/basic/inc/sbxbase.hxx @@ -23,21 +23,24 @@ #include <i18nlangtag/lang.h> #include <basic/sbxdef.hxx> #include <basic/basicdllapi.h> -#include <boost/ptr_container/ptr_vector.hpp> + #include <boost/noncopyable.hpp> +#include <memory> +#include <vector> + class SbxFactory; class SbxVariable; class SbxBasicFormater; -typedef boost::ptr_vector<SbxFactory> SbxFacs; +typedef std::vector<std::unique_ptr<SbxFactory>> SbxFactories; // AppData structure for SBX: struct SbxAppData : private ::boost::noncopyable { SbxError eSbxError; // Error code - SbxFacs aFacs; // Factories + SbxFactories m_Factories; SbxBasicFormater *pBasicFormater; // Pointer to Format()-Command helper class LanguageType eBasicFormaterLangType; diff --git a/basic/source/sbx/sbxbase.cxx b/basic/source/sbx/sbxbase.cxx index 086d399..80b56c3 100644 --- a/basic/source/sbx/sbxbase.cxx +++ b/basic/source/sbx/sbxbase.cxx @@ -44,7 +44,7 @@ SbxAppData::~SbxAppData() SolarMutexGuard g; delete pBasicFormater; - aFacs.clear(); + m_Factories.clear(); } SbxBase::SbxBase() @@ -124,25 +124,27 @@ void SbxBase::AddFactory( SbxFactory* pFac ) SbxAppData& r = GetSbxData_Impl(); // From 1996-03-06: take the HandleLast-Flag into account - sal_uInt16 nPos = r.aFacs.size(); // Insert position + sal_uInt16 nPos = r.m_Factories.size(); // Insert position if( !pFac->IsHandleLast() ) // Only if not self HandleLast { // Rank new factory in front of factories with HandleLast - while( nPos > 0 && - r.aFacs[ nPos-1 ].IsHandleLast() ) + while (nPos > 0 && r.m_Factories[ nPos-1 ]->IsHandleLast()) nPos--; } - r.aFacs.insert( r.aFacs.begin() + nPos, pFac ); + r.m_Factories.insert(r.m_Factories.begin() + nPos, std::unique_ptr<SbxFactory>(pFac)); } void SbxBase::RemoveFactory( SbxFactory* pFac ) { SbxAppData& r = GetSbxData_Impl(); - for(SbxFacs::iterator it = r.aFacs.begin(); it != r.aFacs.end(); ++it) + for (auto it = r.m_Factories.begin(); it != r.m_Factories.end(); ++it) { - if( &(*it) == pFac ) + if ((*it).get() == pFac) { - r.aFacs.release( it ).release(); break; + std::unique_ptr<SbxFactory> tmp(std::move(*it)); + r.m_Factories.erase( it ); + tmp.release(); + break; } } } @@ -173,9 +175,9 @@ SbxBase* SbxBase::Create( sal_uInt16 nSbxId, sal_uInt32 nCreator ) // Unknown type: go over the factories! SbxAppData& r = GetSbxData_Impl(); SbxBase* pNew = NULL; - for( SbxFactory& rFac : r.aFacs ) + for (auto const& rpFac : r.m_Factories) { - pNew = rFac.Create( nSbxId, nCreator ); + pNew = rpFac->Create( nSbxId, nCreator ); if( pNew ) break; } @@ -187,9 +189,9 @@ SbxObject* SbxBase::CreateObject( const OUString& rClass ) { SbxAppData& r = GetSbxData_Impl(); SbxObject* pNew = NULL; - for( SbxFactory& rFac : r.aFacs ) + for (auto const& rpFac : r.m_Factories) { - pNew = rFac.CreateObject( rClass ); + pNew = rpFac->CreateObject( rClass ); if( pNew ) break; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits