summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2016-10-13 10:45:45 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2016-10-13 11:16:13 +0000
commit17ec3b96dee28b148773aa1715634171deaa0297 (patch)
tree791f046375ebc44e79501e15d84fbfb66d535fc9
parent703f697b22ddfdcceed955d37e75db2299f5b120 (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.cxx49
-rw-r--r--editeng/source/outliner/outlundo.cxx5
-rw-r--r--editeng/source/outliner/outlvw.cxx13
-rw-r--r--include/editeng/outliner.hxx33
-rw-r--r--sd/source/ui/func/fuinsfil.cxx12
-rw-r--r--sd/source/ui/inc/OutlineView.hxx6
-rw-r--r--sd/source/ui/inc/View.hxx4
-rw-r--r--sd/source/ui/view/outlview.cxx33
-rw-r--r--sd/source/ui/view/sdview.cxx14
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 );
}
}