summaryrefslogtreecommitdiff
path: root/editeng
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 /editeng
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>
Diffstat (limited to 'editeng')
-rw-r--r--editeng/source/outliner/outliner.cxx49
-rw-r--r--editeng/source/outliner/outlundo.cxx5
-rw-r--r--editeng/source/outliner/outlvw.cxx13
3 files changed, 25 insertions, 42 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;
}