Kaydet (Commit) ed6b4dc7 authored tarafından Michael Meeks's avatar Michael Meeks

package: avoid un-necessary modification event work.

Change-Id: Ia4b4e3edccf661b8c5f474c5c7474b5f9e497fcc
üst 02db0f95
...@@ -1861,7 +1861,7 @@ void OWriteStream::ModifyParentUnlockMutex_Impl( ::osl::ResettableMutexGuard& aG ...@@ -1861,7 +1861,7 @@ void OWriteStream::ModifyParentUnlockMutex_Impl( ::osl::ResettableMutexGuard& aG
{ {
if ( m_pImpl->m_pParent ) if ( m_pImpl->m_pParent )
{ {
if ( m_pImpl->m_pParent->m_pAntiImpl ) if ( m_pImpl->m_pParent->HasModifiedListener() )
{ {
uno::Reference< util::XModifiable > xParentModif( (util::XModifiable*)(m_pImpl->m_pParent->m_pAntiImpl) ); uno::Reference< util::XModifiable > xParentModif( (util::XModifiable*)(m_pImpl->m_pParent->m_pAntiImpl) );
aGuard.clear(); aGuard.clear();
......
...@@ -191,6 +191,7 @@ OStorage_Impl::OStorage_Impl( uno::Reference< io::XInputStream > xInputStream, ...@@ -191,6 +191,7 @@ OStorage_Impl::OStorage_Impl( uno::Reference< io::XInputStream > xInputStream,
, m_bCommited( sal_False ) , m_bCommited( sal_False )
, m_bIsRoot( sal_True ) , m_bIsRoot( sal_True )
, m_bListCreated( sal_False ) , m_bListCreated( sal_False )
, m_nModifiedListenerCount( 0 )
, m_xContext( xContext ) , m_xContext( xContext )
, m_xProperties( xProperties ) , m_xProperties( xProperties )
, m_bHasCommonEncryptionData( sal_False ) , m_bHasCommonEncryptionData( sal_False )
...@@ -230,6 +231,7 @@ OStorage_Impl::OStorage_Impl( uno::Reference< io::XStream > xStream, ...@@ -230,6 +231,7 @@ OStorage_Impl::OStorage_Impl( uno::Reference< io::XStream > xStream,
, m_bCommited( sal_False ) , m_bCommited( sal_False )
, m_bIsRoot( sal_True ) , m_bIsRoot( sal_True )
, m_bListCreated( sal_False ) , m_bListCreated( sal_False )
, m_nModifiedListenerCount( 0 )
, m_xContext( xContext ) , m_xContext( xContext )
, m_xProperties( xProperties ) , m_xProperties( xProperties )
, m_bHasCommonEncryptionData( sal_False ) , m_bHasCommonEncryptionData( sal_False )
...@@ -272,6 +274,7 @@ OStorage_Impl::OStorage_Impl( OStorage_Impl* pParent, ...@@ -272,6 +274,7 @@ OStorage_Impl::OStorage_Impl( OStorage_Impl* pParent,
, m_bCommited( sal_False ) , m_bCommited( sal_False )
, m_bIsRoot( sal_False ) , m_bIsRoot( sal_False )
, m_bListCreated( sal_False ) , m_bListCreated( sal_False )
, m_nModifiedListenerCount( 0 )
, m_xPackageFolder( xPackageFolder ) , m_xPackageFolder( xPackageFolder )
, m_xPackage( xPackage ) , m_xPackage( xPackage )
, m_xContext( xContext ) , m_xContext( xContext )
...@@ -1959,6 +1962,7 @@ void SAL_CALL OStorage::InternalDispose( sal_Bool bNotifyImpl ) ...@@ -1959,6 +1962,7 @@ void SAL_CALL OStorage::InternalDispose( sal_Bool bNotifyImpl )
// since the listeners could dispose the object while being notified // since the listeners could dispose the object while being notified
lang::EventObject aSource( static_cast< ::cppu::OWeakObject* >(this) ); lang::EventObject aSource( static_cast< ::cppu::OWeakObject* >(this) );
m_pData->m_aListenersContainer.disposeAndClear( aSource ); m_pData->m_aListenersContainer.disposeAndClear( aSource );
m_pImpl->m_nModifiedListenerCount = 0;
if ( m_pData->m_bReadOnlyWrap ) if ( m_pData->m_bReadOnlyWrap )
{ {
...@@ -4203,6 +4207,7 @@ void SAL_CALL OStorage::addModifyListener( ...@@ -4203,6 +4207,7 @@ void SAL_CALL OStorage::addModifyListener(
throw lang::DisposedException( OSL_LOG_PREFIX, uno::Reference< uno::XInterface >() ); throw lang::DisposedException( OSL_LOG_PREFIX, uno::Reference< uno::XInterface >() );
} }
osl_atomic_increment( &m_pImpl->m_nModifiedListenerCount );
m_pData->m_aListenersContainer.addInterface( m_pData->m_aListenersContainer.addInterface(
::getCppuType( ( const uno::Reference< util::XModifyListener >* )0 ), aListener ); ::getCppuType( ( const uno::Reference< util::XModifyListener >* )0 ), aListener );
} }
...@@ -4219,6 +4224,7 @@ void SAL_CALL OStorage::removeModifyListener( ...@@ -4219,6 +4224,7 @@ void SAL_CALL OStorage::removeModifyListener(
throw lang::DisposedException( OSL_LOG_PREFIX, uno::Reference< uno::XInterface >() ); throw lang::DisposedException( OSL_LOG_PREFIX, uno::Reference< uno::XInterface >() );
} }
osl_atomic_decrement( &m_pImpl->m_nModifiedListenerCount );
m_pData->m_aListenersContainer.removeInterface( m_pData->m_aListenersContainer.removeInterface(
::getCppuType( ( const uno::Reference< util::XModifyListener >* )0 ), aListener ); ::getCppuType( ( const uno::Reference< util::XModifyListener >* )0 ), aListener );
} }
......
...@@ -128,11 +128,19 @@ struct OStorage_Impl ...@@ -128,11 +128,19 @@ struct OStorage_Impl
sal_Int32 m_nStorageMode; // open mode ( read/write/trunc/nocreate ) sal_Int32 m_nStorageMode; // open mode ( read/write/trunc/nocreate )
sal_Bool m_bIsModified; // only modified elements will be sent to the original content sal_Bool m_bIsModified; // only modified elements will be sent to the original content
sal_Bool m_bBroadcastModified; // will be set if notification is required sal_Bool m_bBroadcastModified; // will be set if notification is required
sal_Bool m_bCommited; // sending the streams is coordinated by the root storage of the package sal_Bool m_bCommited; // sending the streams is coordinated by the root storage of the package
sal_Bool m_bIsRoot; // marks this storage as root storages that manages all commits and reverts sal_Bool m_bIsRoot; // marks this storage as root storages that manages all commits and reverts
sal_Bool m_bListCreated; sal_Bool m_bListCreated;
/// Count of registered modification listeners
oslInterlockedCount m_nModifiedListenerCount;
bool HasModifiedListener()
{
return m_nModifiedListenerCount > 0 && m_pAntiImpl != NULL;
}
SotElementList_Impl m_aChildrenList; SotElementList_Impl m_aChildrenList;
SotElementList_Impl m_aDeletedList; SotElementList_Impl m_aDeletedList;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment