diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2016-10-13 10:45:45 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2016-10-13 11:16:13 +0000 |
commit | 17ec3b96dee28b148773aa1715634171deaa0297 (patch) | |
tree | 791f046375ebc44e79501e15d84fbfb66d535fc9 | |
parent | 703f697b22ddfdcceed955d37e75db2299f5b120 (diff) |
pass params to Outliner LINK callbacks on stack
instead of yuck..cough... on itself, which is horribly vulnerable to re-
entrancy
Change-Id: I8f3d6d39ee50fd36b56b431978cf6c2499c375a6
Reviewed-on: https://gerrit.libreoffice.org/29756
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | editeng/source/outliner/outliner.cxx | 49 | ||||
-rw-r--r-- | editeng/source/outliner/outlundo.cxx | 5 | ||||
-rw-r--r-- | editeng/source/outliner/outlvw.cxx | 13 | ||||
-rw-r--r-- | include/editeng/outliner.hxx | 33 | ||||
-rw-r--r-- | sd/source/ui/func/fuinsfil.cxx | 12 | ||||
-rw-r--r-- | sd/source/ui/inc/OutlineView.hxx | 6 | ||||
-rw-r--r-- | sd/source/ui/inc/View.hxx | 4 | ||||
-rw-r--r-- | sd/source/ui/view/outlview.cxx | 33 | ||||
-rw-r--r-- | sd/source/ui/view/sdview.cxx | 14 |
9 files changed, 74 insertions, 95 deletions
diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx index f385cee753d0..3bf14860bb17 100644 --- a/editeng/source/outliner/outliner.cxx +++ b/editeng/source/outliner/outliner.cxx @@ -89,10 +89,9 @@ Paragraph* Outliner::Insert(const OUString& rText, sal_Int32 nAbsPos, sal_Int16 if( pPara->GetDepth() != nDepth ) { nDepthChangedHdlPrevDepth = pPara->GetDepth(); - mnDepthChangeHdlPrevFlags = pPara->nFlags; + ParaFlag nPrevFlags = pPara->nFlags; pPara->SetDepth( nDepth ); - pHdlParagraph = pPara; - DepthChangedHdl(); + DepthChangedHdl(pPara, nPrevFlags); } pPara->nFlags |= ParaFlag::HOLDDEPTH; SetText( rText, pPara ); @@ -107,8 +106,7 @@ Paragraph* Outliner::Insert(const OUString& rText, sal_Int32 nAbsPos, sal_Int16 pEditEngine->InsertParagraph( nAbsPos, OUString() ); DBG_ASSERT(pPara==pParaList->GetParagraph(nAbsPos),"Insert:Failed"); ImplInitDepth( nAbsPos, nDepth, false ); - pHdlParagraph = pPara; - ParagraphInsertedHdl(); + ParagraphInsertedHdl(pPara); pPara->nFlags |= ParaFlag::HOLDDEPTH; SetText( rText, pPara ); ImplBlockInsertionCallbacks( false ); @@ -151,8 +149,7 @@ void Outliner::ParagraphInserted( sal_Int32 nPara ) if( !pEditEngine->IsInUndo() ) { ImplCalcBulletText( nPara, true, false ); - pHdlParagraph = pPara; - ParagraphInsertedHdl(); + ParagraphInsertedHdl(pPara); } } } @@ -171,8 +168,7 @@ void Outliner::ParagraphDeleted( sal_Int32 nPara ) if( !pEditEngine->IsInUndo() ) { - pHdlParagraph = pPara; - ParagraphRemovingHdl(); + ParagraphRemovingHdl(pPara); } pParaList->Remove( nPara ); @@ -253,8 +249,7 @@ void Outliner::SetDepth( Paragraph* pPara, sal_Int16 nNewDepth ) if ( nNewDepth != pPara->GetDepth() ) { nDepthChangedHdlPrevDepth = pPara->GetDepth(); - mnDepthChangeHdlPrevFlags = pPara->nFlags; - pHdlParagraph = pPara; + ParaFlag nPrevFlags = pPara->nFlags; sal_Int32 nPara = GetAbsPos( pPara ); ImplInitDepth( nPara, nNewDepth, true ); @@ -263,7 +258,7 @@ void Outliner::SetDepth( Paragraph* pPara, sal_Int16 nNewDepth ) if ( ImplGetOutlinerMode() == OutlinerMode::OutlineObject ) ImplSetLevelDependendStyleSheet( nPara ); - DepthChangedHdl(); + DepthChangedHdl(pPara, nPrevFlags); } } @@ -472,8 +467,7 @@ void Outliner::SetText( const OUString& rText, Paragraph* pPara ) { pParaList->Insert( pPara, nInsPos ); pEditEngine->InsertParagraph( nInsPos, aStr ); - pHdlParagraph = pPara; - ParagraphInsertedHdl(); + ParagraphInsertedHdl(pPara); } else { @@ -777,7 +771,6 @@ bool Outliner::Expand( Paragraph* pPara ) pUndo->pParas = nullptr; pUndo->nCount = pParaList->GetAbsPos( pPara ); } - pHdlParagraph = pPara; pParaList->Expand( pPara ); InvalidateBullet(pParaList->GetAbsPos(pPara)); if( bUndo ) @@ -807,7 +800,6 @@ bool Outliner::Collapse( Paragraph* pPara ) pUndo->nCount = pParaList->GetAbsPos( pPara ); } - pHdlParagraph = pPara; pParaList->Collapse( pPara ); InvalidateBullet(pParaList->GetAbsPos(pPara)); if( bUndo ) @@ -1185,17 +1177,15 @@ void Outliner::ImpTextPasted( sal_Int32 nStartPara, sal_Int32 nCount ) if( ImplGetOutlinerMode() != OutlinerMode::TextObject ) { nDepthChangedHdlPrevDepth = pPara->GetDepth(); - mnDepthChangeHdlPrevFlags = pPara->nFlags; + ParaFlag nPrevFlags = pPara->nFlags; ImpConvertEdtToOut( nStartPara ); - pHdlParagraph = pPara; - if( nStartPara == nStart ) { // the existing paragraph has changed depth or flags - if( (pPara->GetDepth() != nDepthChangedHdlPrevDepth) || (pPara->nFlags != mnDepthChangeHdlPrevFlags) ) - DepthChangedHdl(); + if( (pPara->GetDepth() != nDepthChangedHdlPrevDepth) || (pPara->nFlags != nPrevFlags) ) + DepthChangedHdl(pPara, nPrevFlags); } } else // EditEngine mode @@ -1254,10 +1244,8 @@ bool Outliner::ImpCanDeleteSelectedPages( OutlinerView* pCurView ) } Outliner::Outliner(SfxItemPool* pPool, OutlinerMode nMode) - : pHdlParagraph(nullptr) - , mnFirstSelPage(0) + : mnFirstSelPage(0) , nDepthChangedHdlPrevDepth(0) - , mnDepthChangeHdlPrevFlags(ParaFlag::NONE) , nMaxDepth(9) , nMinDepth(-1) , nFirstPage(1) @@ -1351,24 +1339,24 @@ size_t Outliner::GetViewCount() const return aViewList.size(); } -void Outliner::ParagraphInsertedHdl() +void Outliner::ParagraphInsertedHdl(Paragraph* pPara) { if( !IsInUndo() ) - aParaInsertedHdl.Call( this ); + aParaInsertedHdl.Call( { this, pPara } ); } -void Outliner::ParagraphRemovingHdl() +void Outliner::ParagraphRemovingHdl(Paragraph* pPara) { if( !IsInUndo() ) - aParaRemovingHdl.Call( this ); + aParaRemovingHdl.Call( { this, pPara } ); } -void Outliner::DepthChangedHdl() +void Outliner::DepthChangedHdl(Paragraph* pPara, ParaFlag nPrevFlags) { if( !IsInUndo() ) - aDepthChangedHdl.Call( this ); + aDepthChangedHdl.Call( { this, pPara, nPrevFlags } ); } @@ -1744,7 +1732,6 @@ bool Outliner::ImpCanDeleteSelectedPages( OutlinerView* pCurView, sal_Int32 _nFi nDepthChangedHdlPrevDepth = nPages; mnFirstSelPage = _nFirstPage; - pHdlParagraph = nullptr; return RemovingPagesHdl( pCurView ); } diff --git a/editeng/source/outliner/outlundo.cxx b/editeng/source/outliner/outlundo.cxx index a1475b565735..ab55e3a7a5db 100644 --- a/editeng/source/outliner/outlundo.cxx +++ b/editeng/source/outliner/outlundo.cxx @@ -62,11 +62,10 @@ void OutlinerUndoChangeParaFlags::ImplChangeFlags( ParaFlag nFlags ) if( pPara ) { pOutliner->nDepthChangedHdlPrevDepth = pPara->GetDepth(); - pOutliner->mnDepthChangeHdlPrevFlags = pPara->nFlags; - pOutliner->pHdlParagraph = pPara; + ParaFlag nPrevFlags = pPara->nFlags; pPara->nFlags = nFlags; - pOutliner->DepthChangedHdl(); + pOutliner->DepthChangedHdl(pPara, nPrevFlags); } } diff --git a/editeng/source/outliner/outlvw.cxx b/editeng/source/outliner/outlvw.cxx index 2665497641b5..9d2a82b040d2 100644 --- a/editeng/source/outliner/outlvw.cxx +++ b/editeng/source/outliner/outlvw.cxx @@ -468,19 +468,18 @@ void OutlinerView::Indent( short nDiff ) { // Notify App pOwner->nDepthChangedHdlPrevDepth = nOldDepth; - pOwner->mnDepthChangeHdlPrevFlags = pPara->nFlags; - pOwner->pHdlParagraph = pPara; + ParaFlag nPrevFlags = pPara->nFlags; if( bPage ) pPara->RemoveFlag( ParaFlag::ISPAGE ); else pPara->SetFlag( ParaFlag::ISPAGE ); - pOwner->DepthChangedHdl(); + pOwner->DepthChangedHdl(pPara, nPrevFlags); pOwner->pEditEngine->QuickMarkInvalid( ESelection( nPara, 0, nPara, 0 ) ); if( bUndo ) - pOwner->InsertUndo( new OutlinerUndoChangeParaFlags( pOwner, nPara, pOwner->mnDepthChangeHdlPrevFlags, pPara->nFlags ) ); + pOwner->InsertUndo( new OutlinerUndoChangeParaFlags( pOwner, nPara, nPrevFlags, pPara->nFlags ) ); continue; } @@ -532,8 +531,7 @@ void OutlinerView::Indent( short nDiff ) } pOwner->nDepthChangedHdlPrevDepth = nOldDepth; - pOwner->mnDepthChangeHdlPrevFlags = pPara->nFlags; - pOwner->pHdlParagraph = pPara; + ParaFlag nPrevFlags = pPara->nFlags; pOwner->ImplInitDepth( nPara, nNewDepth, true ); pOwner->ImplCalcBulletText( nPara, false, false ); @@ -542,7 +540,7 @@ void OutlinerView::Indent( short nDiff ) pOwner->ImplSetLevelDependendStyleSheet( nPara ); // Notify App - pOwner->DepthChangedHdl(); + pOwner->DepthChangedHdl(pPara, nPrevFlags); } else { @@ -816,7 +814,6 @@ sal_Int32 OutlinerView::ImpCalcSelectedPages( bool bIncludeFirstSelected ) if( nPages ) { pOwner->nDepthChangedHdlPrevDepth = nPages; - pOwner->pHdlParagraph = nullptr; pOwner->mnFirstSelPage = nFirstPage; } diff --git a/include/editeng/outliner.hxx b/include/editeng/outliner.hxx index 7290b66ded3a..bfe11fc53de6 100644 --- a/include/editeng/outliner.hxx +++ b/include/editeng/outliner.hxx @@ -582,6 +582,10 @@ namespace o3tl class EDITENG_DLLPUBLIC Outliner : public SfxBroadcaster { +public: + struct ParagraphHdlParam { Outliner* pOutliner; Paragraph* pPara; }; + struct DepthChangeHdlParam { Outliner* pOutliner; Paragraph* pPara; ParaFlag nPrevFlags; }; +private: friend class OutlinerView; friend class OutlinerEditEng; friend class OutlinerParaObject; @@ -597,13 +601,12 @@ class EDITENG_DLLPUBLIC Outliner : public SfxBroadcaster ParagraphList* pParaList; ViewList aViewList; - Paragraph* pHdlParagraph; sal_Int32 mnFirstSelPage; Link<DrawPortionInfo*,void> aDrawPortionHdl; Link<DrawBulletInfo*,void> aDrawBulletHdl; - Link<Outliner*,void> aParaInsertedHdl; - Link<Outliner*,void> aParaRemovingHdl; - Link<Outliner*,void> aDepthChangedHdl; + Link<ParagraphHdlParam,void> aParaInsertedHdl; + Link<ParagraphHdlParam,void> aParaRemovingHdl; + Link<DepthChangeHdlParam,void> aDepthChangedHdl; Link<Outliner*,void> aBeginMovingHdl; Link<Outliner*,void> aEndMovingHdl; Link<OutlinerView*,bool> aIndentingPagesHdl; @@ -615,7 +618,6 @@ class EDITENG_DLLPUBLIC Outliner : public SfxBroadcaster Link<PasteOrDropInfos*,void> maEndPasteOrDropHdl; sal_Int32 nDepthChangedHdlPrevDepth; - ParaFlag mnDepthChangeHdlPrevFlags; sal_Int16 nMaxDepth; const sal_Int16 nMinDepth; sal_Int32 nFirstPage; @@ -757,15 +759,13 @@ public: void ClearModifyFlag(); bool IsModified() const; - Paragraph* GetHdlParagraph() const { return pHdlParagraph; } - - void ParagraphInsertedHdl(); - void SetParaInsertedHdl(const Link<Outliner*,void>& rLink){aParaInsertedHdl=rLink;} - const Link<Outliner*,void>& GetParaInsertedHdl() const { return aParaInsertedHdl; } + void ParagraphInsertedHdl(Paragraph*); + void SetParaInsertedHdl(const Link<ParagraphHdlParam,void>& rLink){aParaInsertedHdl=rLink;} + const Link<ParagraphHdlParam,void>& GetParaInsertedHdl() const { return aParaInsertedHdl; } - void ParagraphRemovingHdl(); - void SetParaRemovingHdl(const Link<Outliner*,void>& rLink){aParaRemovingHdl=rLink;} - const Link<Outliner*,void>& GetParaRemovingHdl() const { return aParaRemovingHdl; } + void ParagraphRemovingHdl(Paragraph*); + void SetParaRemovingHdl(const Link<ParagraphHdlParam,void>& rLink){aParaRemovingHdl=rLink;} + const Link<ParagraphHdlParam,void>& GetParaRemovingHdl() const { return aParaRemovingHdl; } NonOverflowingText *GetNonOverflowingText() const; OverflowingText *GetOverflowingText() const; @@ -775,11 +775,10 @@ public: OutlinerParaObject *GetEmptyParaObject() const; - void DepthChangedHdl(); - void SetDepthChangedHdl(const Link<Outliner*,void>& rLink){aDepthChangedHdl=rLink;} - const Link<Outliner*,void>& GetDepthChangedHdl() const { return aDepthChangedHdl; } + void DepthChangedHdl(Paragraph*, ParaFlag nPrevFlags); + void SetDepthChangedHdl(const Link<DepthChangeHdlParam,void>& rLink){aDepthChangedHdl=rLink;} + const Link<DepthChangeHdlParam,void>& GetDepthChangedHdl() const { return aDepthChangedHdl; } sal_Int16 GetPrevDepth() const { return static_cast<sal_Int16>(nDepthChangedHdlPrevDepth); } - ParaFlag GetPrevFlags() const { return mnDepthChangeHdlPrevFlags; } bool RemovingPagesHdl( OutlinerView* ); void SetRemovingPagesHdl(const Link<OutlinerView*,bool>& rLink){aRemovingPagesHdl=rLink;} diff --git a/sd/source/ui/func/fuinsfil.cxx b/sd/source/ui/func/fuinsfil.cxx index e634c9224383..993fc6b310eb 100644 --- a/sd/source/ui/func/fuinsfil.cxx +++ b/sd/source/ui/func/fuinsfil.cxx @@ -688,12 +688,12 @@ bool FuInsertFile::InsSDDinOlMode(SfxMedium* pMedium) ::Outliner* pOutliner = pOlView->GetViewByWindow(mpWindow)->GetOutliner(); // cut notification links temporarily - Link<::Outliner*,void> aOldParagraphInsertedHdl = pOutliner->GetParaInsertedHdl(); - pOutliner->SetParaInsertedHdl( Link<::Outliner*,void>()); - Link<::Outliner*,void> aOldParagraphRemovingHdl = pOutliner->GetParaRemovingHdl(); - pOutliner->SetParaRemovingHdl( Link<::Outliner*,void>()); - Link<::Outliner*,void> aOldDepthChangedHdl = pOutliner->GetDepthChangedHdl(); - pOutliner->SetDepthChangedHdl( Link<::Outliner*,void>()); + Link<Outliner::ParagraphHdlParam,void> aOldParagraphInsertedHdl = pOutliner->GetParaInsertedHdl(); + pOutliner->SetParaInsertedHdl( Link<Outliner::ParagraphHdlParam,void>()); + Link<Outliner::ParagraphHdlParam,void> aOldParagraphRemovingHdl = pOutliner->GetParaRemovingHdl(); + pOutliner->SetParaRemovingHdl( Link<Outliner::ParagraphHdlParam,void>()); + Link<Outliner::DepthChangeHdlParam,void> aOldDepthChangedHdl = pOutliner->GetDepthChangedHdl(); + pOutliner->SetDepthChangedHdl( Link<::Outliner::DepthChangeHdlParam,void>()); Link<::Outliner*,void> aOldBeginMovingHdl = pOutliner->GetBeginMovingHdl(); pOutliner->SetBeginMovingHdl( Link<::Outliner*,void>()); Link<::Outliner*,void> aOldEndMovingHdl = pOutliner->GetEndMovingHdl(); diff --git a/sd/source/ui/inc/OutlineView.hxx b/sd/source/ui/inc/OutlineView.hxx index ddbf768d8192..75e5282a04cd 100644 --- a/sd/source/ui/inc/OutlineView.hxx +++ b/sd/source/ui/inc/OutlineView.hxx @@ -95,9 +95,9 @@ public: void Paint (const Rectangle& rRect, ::sd::Window* pWin); // Callbacks fuer LINKs - DECL_LINK( ParagraphInsertedHdl, ::Outliner *, void ); - DECL_LINK( ParagraphRemovingHdl, ::Outliner *, void ); - DECL_LINK( DepthChangedHdl, ::Outliner *, void ); + DECL_LINK( ParagraphInsertedHdl, ::Outliner::ParagraphHdlParam, void ); + DECL_LINK( ParagraphRemovingHdl, ::Outliner::ParagraphHdlParam, void ); + DECL_LINK( DepthChangedHdl, ::Outliner::DepthChangeHdlParam, void ); DECL_LINK( StatusEventHdl, EditStatus&, void ); DECL_LINK( BeginMovingHdl, ::Outliner *, void ); DECL_LINK( EndMovingHdl, ::Outliner *, void ); diff --git a/sd/source/ui/inc/View.hxx b/sd/source/ui/inc/View.hxx index 126432fc3d48..512c4fba2207 100644 --- a/sd/source/ui/inc/View.hxx +++ b/sd/source/ui/inc/View.hxx @@ -229,8 +229,8 @@ public: SdrObject* GetSelectedSingleObject(SdPage* pPage); protected: - DECL_LINK( OnParagraphInsertedHdl, ::Outliner *, void ); - DECL_LINK( OnParagraphRemovingHdl, ::Outliner *, void ); + DECL_LINK( OnParagraphInsertedHdl, ::Outliner::ParagraphHdlParam, void ); + DECL_LINK( OnParagraphRemovingHdl, ::Outliner::ParagraphHdlParam, void ); virtual void OnBeginPasteOrDrop( PasteOrDropInfos* pInfo ) override; virtual void OnEndPasteOrDrop( PasteOrDropInfos* pInfo ) override; diff --git a/sd/source/ui/view/outlview.cxx b/sd/source/ui/view/outlview.cxx index 3288f7fb993c..5f3c9575fb54 100644 --- a/sd/source/ui/view/outlview.cxx +++ b/sd/source/ui/view/outlview.cxx @@ -358,7 +358,7 @@ Paragraph* OutlineView::GetNextTitle(const Paragraph* pPara) /** * Handler for inserting pages (paragraphs) */ -IMPL_LINK( OutlineView, ParagraphInsertedHdl, ::Outliner *, pOutliner, void ) +IMPL_LINK( OutlineView, ParagraphInsertedHdl, Outliner::ParagraphHdlParam, aParam, void ) { // we get calls to this handler during binary insert of drag and drop contents but // we ignore it here and handle it later in OnEndPasteOrDrop() @@ -366,17 +366,15 @@ IMPL_LINK( OutlineView, ParagraphInsertedHdl, ::Outliner *, pOutliner, void ) { OutlineViewPageChangesGuard aGuard(this); - Paragraph* pPara = pOutliner->GetHdlParagraph(); - - sal_Int32 nAbsPos = mrOutliner.GetAbsPos( pPara ); + sal_Int32 nAbsPos = mrOutliner.GetAbsPos( aParam.pPara ); UpdateParagraph( nAbsPos ); if( (nAbsPos == 0) || - ::Outliner::HasParaFlag(pPara,ParaFlag::ISPAGE) || + ::Outliner::HasParaFlag(aParam.pPara, ParaFlag::ISPAGE) || ::Outliner::HasParaFlag(mrOutliner.GetParagraph( nAbsPos-1 ), ParaFlag::ISPAGE) ) { - InsertSlideForParagraph( pPara ); + InsertSlideForParagraph( aParam.pPara ); } } } @@ -498,13 +496,13 @@ SdPage* OutlineView::InsertSlideForParagraph( Paragraph* pPara ) /** * Handler for deleting pages (paragraphs) */ -IMPL_LINK( OutlineView, ParagraphRemovingHdl, ::Outliner *, pOutliner, void ) +IMPL_LINK( OutlineView, ParagraphRemovingHdl, ::Outliner::ParagraphHdlParam, aParam, void ) { DBG_ASSERT( isRecordingUndo(), "sd::OutlineView::ParagraphRemovingHdl(), model change without undo?!" ); OutlineViewPageChangesGuard aGuard(this); - Paragraph* pPara = pOutliner->GetHdlParagraph(); + Paragraph* pPara = aParam.pPara; if( ::Outliner::HasParaFlag( pPara, ParaFlag::ISPAGE ) ) { // how many titles are in front of the title paragraph in question? @@ -547,7 +545,7 @@ IMPL_LINK( OutlineView, ParagraphRemovingHdl, ::Outliner *, pOutliner, void ) mnPagesProcessed = 0; } } - pOutliner->UpdateFields(); + aParam.pOutliner->UpdateFields(); } } @@ -555,14 +553,15 @@ IMPL_LINK( OutlineView, ParagraphRemovingHdl, ::Outliner *, pOutliner, void ) * Handler for changing the indentation depth of paragraphs (requires inserting * or deleting of pages in some cases) */ -IMPL_LINK( OutlineView, DepthChangedHdl, ::Outliner *, pOutliner, void ) +IMPL_LINK( OutlineView, DepthChangedHdl, ::Outliner::DepthChangeHdlParam, aParam, void ) { DBG_ASSERT( isRecordingUndo(), "sd::OutlineView::DepthChangedHdl(), no undo for model change?!" ); OutlineViewPageChangesGuard aGuard(this); - Paragraph* pPara = pOutliner->GetHdlParagraph(); - if( ::Outliner::HasParaFlag( pPara, ParaFlag::ISPAGE ) && ((pOutliner->GetPrevFlags() & ParaFlag::ISPAGE) == ParaFlag::NONE) ) + Paragraph* pPara = aParam.pPara; + ::Outliner* pOutliner = aParam.pOutliner; + if( ::Outliner::HasParaFlag( pPara, ParaFlag::ISPAGE ) && ((aParam.nPrevFlags & ParaFlag::ISPAGE) == ParaFlag::NONE) ) { // the current paragraph is transformed into a slide @@ -603,7 +602,7 @@ IMPL_LINK( OutlineView, DepthChangedHdl, ::Outliner *, pOutliner, void ) } } - ParagraphInsertedHdl(pOutliner); + ParagraphInsertedHdl( { aParam.pOutliner, aParam.pPara } ); mnPagesProcessed++; @@ -630,7 +629,7 @@ IMPL_LINK( OutlineView, DepthChangedHdl, ::Outliner *, pOutliner, void ) } pOutliner->UpdateFields(); } - else if( !::Outliner::HasParaFlag( pPara, ParaFlag::ISPAGE ) && ((pOutliner->GetPrevFlags() & ParaFlag::ISPAGE) != ParaFlag::NONE) ) + else if( !::Outliner::HasParaFlag( pPara, ParaFlag::ISPAGE ) && ((aParam.nPrevFlags & ParaFlag::ISPAGE) != ParaFlag::NONE) ) { // the paragraph was a page but now becomes a normal paragraph @@ -1353,9 +1352,9 @@ void OutlineView::SetLinks() */ void OutlineView::ResetLinks() const { - mrOutliner.SetParaInsertedHdl(Link<::Outliner*,void>()); - mrOutliner.SetParaRemovingHdl(Link<::Outliner*,void>()); - mrOutliner.SetDepthChangedHdl(Link<::Outliner*,void>()); + mrOutliner.SetParaInsertedHdl(Link<::Outliner::ParagraphHdlParam,void>()); + mrOutliner.SetParaRemovingHdl(Link<::Outliner::ParagraphHdlParam,void>()); + mrOutliner.SetDepthChangedHdl(Link<::Outliner::DepthChangeHdlParam,void>()); mrOutliner.SetBeginMovingHdl(Link<::Outliner*,void>()); mrOutliner.SetEndMovingHdl(Link<::Outliner*,void>()); mrOutliner.SetStatusEventHdl(Link<EditStatus&,void>()); diff --git a/sd/source/ui/view/sdview.cxx b/sd/source/ui/view/sdview.cxx index 247fe7116bac..1838126b4ab0 100644 --- a/sd/source/ui/view/sdview.cxx +++ b/sd/source/ui/view/sdview.cxx @@ -1077,32 +1077,30 @@ void View::onAccessibilityOptionsChanged() } } -IMPL_LINK( View, OnParagraphInsertedHdl, ::Outliner *, pOutliner, void ) +IMPL_LINK( View, OnParagraphInsertedHdl, ::Outliner::ParagraphHdlParam, aParam, void ) { - Paragraph* pPara = pOutliner->GetHdlParagraph(); SdrObject* pObj = GetTextEditObject(); - if( pPara && pObj ) + if( aParam.pPara && pObj ) { SdPage* pPage = dynamic_cast< SdPage* >( pObj->GetPage() ); if( pPage ) - pPage->onParagraphInserted( pOutliner, pPara, pObj ); + pPage->onParagraphInserted( aParam.pOutliner, aParam.pPara, pObj ); } } /** * Handler for the deletion of the pages (paragraphs). */ -IMPL_LINK( View, OnParagraphRemovingHdl, ::Outliner *, pOutliner, void ) +IMPL_LINK( View, OnParagraphRemovingHdl, ::Outliner::ParagraphHdlParam, aParam, void ) { - Paragraph* pPara = pOutliner->GetHdlParagraph(); SdrObject* pObj = GetTextEditObject(); - if( pPara && pObj ) + if( aParam.pPara && pObj ) { SdPage* pPage = dynamic_cast< SdPage* >( pObj->GetPage() ); if( pPage ) - pPage->onParagraphRemoving( pOutliner, pPara, pObj ); + pPage->onParagraphRemoving( aParam.pOutliner, aParam.pPara, pObj ); } } |