include/svl/hint.hxx | 4 +++- sw/inc/calbck.hxx | 3 ++- sw/inc/format.hxx | 2 +- sw/inc/frmfmt.hxx | 1 - sw/inc/section.hxx | 2 +- sw/inc/unochart.hxx | 14 +++++++------- sw/source/core/attr/format.cxx | 22 ++++++++++++++-------- sw/source/core/layout/sectfrm.cxx | 12 ++++++------ sw/source/core/unocore/unochart.cxx | 26 +++++++++++++++----------- sw/source/core/unocore/unosect.cxx | 7 ++----- 10 files changed, 51 insertions(+), 42 deletions(-)
New commits: commit 18bb85aa303c17b7705a9ccb0dd3d76673a1955e Author: Bjoern Michaelsen <bjoern.michael...@libreoffice.org> AuthorDate: Sat Jan 12 12:04:04 2019 +0100 Commit: Björn Michaelsen <bjoern.michael...@libreoffice.org> CommitDate: Sat Jan 12 13:09:01 2019 +0100 make SwFormat a ::sw::BroadcastingModify - clean up SwSection..Hint: Lazily reusing the Dying HintId is evil - switch the SwChartDataSequence to SvtListener - add some description to RuntimeException Change-Id: I897a63030f207cabe4d1ba7de0c25c6c581ffd1f Reviewed-on: https://gerrit.libreoffice.org/65816 Tested-by: Jenkins Reviewed-by: Björn Michaelsen <bjoern.michael...@libreoffice.org> diff --git a/include/svl/hint.hxx b/include/svl/hint.hxx index 9091e2de4336..98d0ca81de55 100644 --- a/include/svl/hint.hxx +++ b/include/svl/hint.hxx @@ -108,9 +108,10 @@ enum class SfxHintId { // STARMATH MathFormatChanged, -// SW +// Sw SwDrawViewsCreated, SwSplitNodeOperation, + SwSectionFrameMoveAndDelete, }; template< typename charT, typename traits > @@ -188,6 +189,7 @@ inline std::basic_ostream<charT, traits> & operator <<( case SfxHintId::MathFormatChanged: return stream << "MathFormatChanged"; case SfxHintId::SwDrawViewsCreated: return stream << "SwDrawViewsCreated"; case SfxHintId::SwSplitNodeOperation: return stream << "SwSplitNodeOperation"; + case SfxHintId::SwSectionFrameMoveAndDelete: return stream << "SwSectionFrameMoveAndDelete"; default: return stream << "unk(" << std::to_string(int(id)) << ")"; } } diff --git a/sw/inc/calbck.hxx b/sw/inc/calbck.hxx index 4d33243ed277..5cc590989c8a 100644 --- a/sw/inc/calbck.hxx +++ b/sw/inc/calbck.hxx @@ -237,7 +237,8 @@ namespace sw // used anymore, in which case a BroadcasterMixin should be enough instead // then. class SW_DLLPUBLIC BroadcastingModify : public SwModify, public BroadcasterMixin { - virtual void CallSwClientNotify(const SfxHint& rHint) const override; + public: + virtual void CallSwClientNotify(const SfxHint& rHint) const override; }; // this should be hidden but sadly SwIterator template needs it... class ListenerEntry final : public SwClient diff --git a/sw/inc/format.hxx b/sw/inc/format.hxx index 870cfff0367e..cbeda7237f66 100644 --- a/sw/inc/format.hxx +++ b/sw/inc/format.hxx @@ -40,7 +40,7 @@ namespace drawinglayer { namespace attribute { }} /// Base class for various Writer styles. -class SW_DLLPUBLIC SwFormat : public SwModify +class SW_DLLPUBLIC SwFormat : public sw::BroadcastingModify { friend class SwFrameFormat; diff --git a/sw/inc/frmfmt.hxx b/sw/inc/frmfmt.hxx index 4469a2c8b4c0..bb8a9622d2be 100644 --- a/sw/inc/frmfmt.hxx +++ b/sw/inc/frmfmt.hxx @@ -56,7 +56,6 @@ class SwFrameFormats; /// Style of a layout element. class SW_DLLPUBLIC SwFrameFormat : public SwFormat - , public sw::BroadcasterMixin { friend class SwDoc; friend class SwPageDesc; ///< Is allowed to call protected CTor. diff --git a/sw/inc/section.hxx b/sw/inc/section.hxx index 30b582b89a80..d0fcff0078bd 100644 --- a/sw/inc/section.hxx +++ b/sw/inc/section.hxx @@ -252,7 +252,7 @@ class SwSectionFrameMoveAndDeleteHint : public SfxHint { public: SwSectionFrameMoveAndDeleteHint( const bool bSaveContent ) - : SfxHint( SfxHintId::Dying ) + : SfxHint( SfxHintId::SwSectionFrameMoveAndDelete ) , mbSaveContent( bSaveContent ) {} diff --git a/sw/inc/unochart.hxx b/sw/inc/unochart.hxx index 0b4e9c73e752..bb5b8fa7afc4 100644 --- a/sw/inc/unochart.hxx +++ b/sw/inc/unochart.hxx @@ -44,6 +44,7 @@ #include <cppuhelper/weakref.hxx> #include <rtl/ref.hxx> +#include <svl/listener.hxx> #include <tools/link.hxx> #include <vcl/timer.hxx> @@ -229,8 +230,9 @@ SwChartDataSequenceBaseClass; class SwChartDataSequence : public SwChartDataSequenceBaseClass, - public SwClient + public SvtListener { + SwFrameFormat* m_pFormat; ::comphelper::OInterfaceContainerHelper2 m_aEvtListeners; ::comphelper::OInterfaceContainerHelper2 m_aModifyListeners; css::chart2::data::DataSequenceRole m_aRole; @@ -249,10 +251,6 @@ class SwChartDataSequence : SwChartDataSequence( const SwChartDataSequence &rObj ); SwChartDataSequence & operator = ( const SwChartDataSequence & ) = delete; -protected: - //SwClient - virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew) override; - public: SwChartDataSequence( SwChartDataProvider &rProvider, SwFrameFormat &rTableFormat, @@ -309,12 +307,14 @@ public: virtual void SAL_CALL addEventListener( const css::uno::Reference< css::lang::XEventListener >& xListener ) override; virtual void SAL_CALL removeEventListener( const css::uno::Reference< css::lang::XEventListener >& aListener ) override; - SwFrameFormat* GetFrameFormat() const { return const_cast<SwFrameFormat*>(static_cast<const SwFrameFormat*>(GetRegisteredIn())); } - bool DeleteBox( const SwTableBox &rBox ); + SwFrameFormat* GetFrameFormat() const { return m_pFormat; } + bool DeleteBox( const SwTableBox &rBox ); void FillRangeDesc( SwRangeDescriptor &rRangeDesc ) const; void ExtendTo( bool bExtendCol, sal_Int32 nFirstNew, sal_Int32 nCount ); std::vector< css::uno::Reference< css::table::XCell > > GetCells(); + + virtual void Notify(const SfxHint& rHint) override; }; typedef cppu::WeakImplHelper diff --git a/sw/source/core/attr/format.cxx b/sw/source/core/attr/format.cxx index 15de4023eaca..da052acfef0d 100644 --- a/sw/source/core/attr/format.cxx +++ b/sw/source/core/attr/format.cxx @@ -40,8 +40,7 @@ using namespace com::sun::star; SwFormat::SwFormat( SwAttrPool& rPool, const sal_Char* pFormatNm, const sal_uInt16* pWhichRanges, SwFormat *pDrvdFrame, - sal_uInt16 nFormatWhich ) - : SwModify( pDrvdFrame ), + sal_uInt16 nFormatWhich ) : m_aFormatName( OUString::createFromAscii(pFormatNm) ), m_aSet( rPool, pWhichRanges ), m_nWhichId( nFormatWhich ), @@ -54,13 +53,15 @@ SwFormat::SwFormat( SwAttrPool& rPool, const sal_Char* pFormatNm, m_bFormatInDTOR = m_bHidden = false; if( pDrvdFrame ) + { + pDrvdFrame->Add(this); m_aSet.SetParent( &pDrvdFrame->m_aSet ); + } } SwFormat::SwFormat( SwAttrPool& rPool, const OUString& rFormatNm, const sal_uInt16* pWhichRanges, SwFormat* pDrvdFrame, - sal_uInt16 nFormatWhich ) - : SwModify( pDrvdFrame ), + sal_uInt16 nFormatWhich ) : m_aFormatName( rFormatNm ), m_aSet( rPool, pWhichRanges ), m_nWhichId( nFormatWhich ), @@ -73,11 +74,13 @@ SwFormat::SwFormat( SwAttrPool& rPool, const OUString& rFormatNm, m_bFormatInDTOR = m_bHidden = false; if( pDrvdFrame ) + { + pDrvdFrame->Add(this); m_aSet.SetParent( &pDrvdFrame->m_aSet ); + } } -SwFormat::SwFormat( const SwFormat& rFormat ) - : SwModify( rFormat.DerivedFrom() ), +SwFormat::SwFormat( const SwFormat& rFormat ) : m_aFormatName( rFormat.m_aFormatName ), m_aSet( rFormat.m_aSet ), m_nWhichId( rFormat.m_nWhichId ), @@ -90,8 +93,11 @@ SwFormat::SwFormat( const SwFormat& rFormat ) m_bHidden = rFormat.m_bHidden; m_bAutoUpdateFormat = rFormat.m_bAutoUpdateFormat; - if( rFormat.DerivedFrom() ) - m_aSet.SetParent( &rFormat.DerivedFrom()->m_aSet ); + if( auto pDerived = rFormat.DerivedFrom() ) + { + pDerived->Add(this); + m_aSet.SetParent( &pDerived->m_aSet ); + } // a few special treatments for attributes m_aSet.SetModifyAtAttr( this ); } diff --git a/sw/source/core/layout/sectfrm.cxx b/sw/source/core/layout/sectfrm.cxx index 5c1b39e242e4..6cd503bce7e7 100644 --- a/sw/source/core/layout/sectfrm.cxx +++ b/sw/source/core/layout/sectfrm.cxx @@ -2598,12 +2598,12 @@ void SwSectionFrame::SwClientNotify( const SwModify& rMod, const SfxHint& rHint { SwFrame::SwClientNotify(rMod, rHint); // #i117863# - const SwSectionFrameMoveAndDeleteHint* pHint = - dynamic_cast<const SwSectionFrameMoveAndDeleteHint*>(&rHint); - if (pHint && pHint->GetId() == SfxHintId::Dying && &rMod == GetDep()) - { - SwSectionFrame::MoveContentAndDelete( this, pHint->IsSaveContent() ); - } + if(&rMod != GetDep()) + return; + const auto pHint = dynamic_cast<const SwSectionFrameMoveAndDeleteHint*>(&rHint); + if(!pHint) + return; + SwSectionFrame::MoveContentAndDelete( this, pHint->IsSaveContent() ); } void SwSectionFrame::UpdateAttr_( const SfxPoolItem *pOld, const SfxPoolItem *pNew, diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx index ab597d0ae587..35dd1e8f478c 100644 --- a/sw/source/core/unocore/unochart.cxx +++ b/sw/source/core/unocore/unochart.cxx @@ -1798,10 +1798,10 @@ uno::Sequence< OUString > SAL_CALL SwChartDataSource::getSupportedServiceNames( } SwChartDataSequence::SwChartDataSequence( - SwChartDataProvider &rProvider, - SwFrameFormat &rTableFormat, + SwChartDataProvider& rProvider, + SwFrameFormat& rTableFormat, const std::shared_ptr<SwUnoCursor>& pTableCursor ) : - SwClient( &rTableFormat ), + m_pFormat(&rTableFormat), m_aEvtListeners( GetChartMutex() ), m_aModifyListeners( GetChartMutex() ), m_aRowLabelText( SwResId( STR_CHART2_ROW_LABEL_TEXT ) ), @@ -1810,6 +1810,7 @@ SwChartDataSequence::SwChartDataSequence( m_pTableCursor( pTableCursor ), m_pPropSet( aSwMapProvider.GetPropertySet( PROPERTY_MAP_CHART2_DATA_SEQUENCE ) ) { + StartListening(rTableFormat.GetNotifier()); m_bDisposed = false; acquire(); @@ -1846,7 +1847,8 @@ SwChartDataSequence::SwChartDataSequence( SwChartDataSequence::SwChartDataSequence( const SwChartDataSequence &rObj ) : SwChartDataSequenceBaseClass(rObj), - SwClient( rObj.GetFrameFormat() ), + SvtListener(), + m_pFormat( rObj.m_pFormat ), m_aEvtListeners( GetChartMutex() ), m_aModifyListeners( GetChartMutex() ), m_aRole( rObj.m_aRole ), @@ -1856,6 +1858,8 @@ SwChartDataSequence::SwChartDataSequence( const SwChartDataSequence &rObj ) : m_pTableCursor( rObj.m_pTableCursor ), m_pPropSet( rObj.m_pPropSet ) { + if(m_pFormat) + StartListening(m_pFormat->GetNotifier()); m_bDisposed = false; acquire(); @@ -2190,13 +2194,13 @@ uno::Sequence< OUString > SAL_CALL SwChartDataSequence::getSupportedServiceNames return { "com.sun.star.chart2.data.DataSequence" }; } -void SwChartDataSequence::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew) +void SwChartDataSequence::Notify( const SfxHint& rHint) { - ClientModify(this, pOld, pNew ); - - // table was deleted or cursor was deleted - if(!GetRegisteredIn() || !m_pTableCursor) + if(rHint.GetId() == SfxHintId::Dying) + m_pFormat = nullptr; + if(!m_pFormat || !m_pTableCursor) { + m_pFormat = nullptr; m_pTableCursor.reset(nullptr); dispose(); } @@ -2292,10 +2296,10 @@ void SAL_CALL SwChartDataSequence::dispose( ) //exception threw out. Recorrect the logic of code in //SwChartDataSequence::Dispose(), release the relationship //here... - SwModify* pLclRegisteredIn = GetRegisteredInNonConst(); - if (pLclRegisteredIn && pLclRegisteredIn->HasWriterListeners()) + if (m_pFormat && m_pFormat->HasWriterListeners()) { EndListeningAll(); + m_pFormat = nullptr; m_pTableCursor.reset(nullptr); } } diff --git a/sw/source/core/unocore/unosect.cxx b/sw/source/core/unocore/unosect.cxx index 661157edd083..47380a275dd9 100644 --- a/sw/source/core/unocore/unosect.cxx +++ b/sw/source/core/unocore/unosect.cxx @@ -497,10 +497,7 @@ uno::Reference< beans::XPropertySetInfo > SAL_CALL SwXTextSection::getPropertySetInfo() { SolarMutexGuard g; - - static const uno::Reference< beans::XPropertySetInfo > aRef = - m_pImpl->m_rPropSet.getPropertySetInfo(); - return aRef; + return m_pImpl->m_rPropSet.getPropertySetInfo(); } static void @@ -952,7 +949,7 @@ SwXTextSection::Impl::GetPropertyValues_Impl( SwSectionFormat *const pFormat = GetSectionFormat(); if (!pFormat && !m_bIsDescriptor) { - throw uno::RuntimeException(); + throw uno::RuntimeException( "non-descriptor section without format"); } uno::Sequence< uno::Any > aRet(rPropertyNames.getLength()); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits