Kaydet (Commit) bac051d7 authored tarafından Caolán McNamara's avatar Caolán McNamara

ofz#4813: Direct-leak

Change-Id: I7bd257734a302ad00acf4336f4b478d6af4bc304
Reviewed-on: https://gerrit.libreoffice.org/47100Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst 84d0b4fc
......@@ -58,7 +58,7 @@ class SwHTMLTableLayoutCnts
public:
SwHTMLTableLayoutCnts(const SwStartNode* pSttNd, SwHTMLTableLayout* pTab,
SwHTMLTableLayoutCnts(const SwStartNode* pSttNd, std::shared_ptr<SwHTMLTableLayout> const& rTab,
bool bNoBreakTag, std::shared_ptr<SwHTMLTableLayoutCnts> const& rNxt);
void SetTableBox( SwTableBox *pBx ) { pBox = pBx; }
......
......@@ -119,7 +119,7 @@ protected:
SwTableSortBoxes m_TabSortContentBoxes;
tools::SvRef<SwServerObject> m_xRefObj; // In case DataServer -> pointer is set.
SwHTMLTableLayout *m_pHTMLLayout;
std::shared_ptr<SwHTMLTableLayout> m_xHTMLLayout;
// Usually, the table node of a SwTable can be accessed by getting a box
// out of m_TabSortContentBoxes, which know their SwStartNode. But in some rare
......@@ -175,9 +175,9 @@ private:
public:
SwHTMLTableLayout *GetHTMLTableLayout() { return m_pHTMLLayout; }
const SwHTMLTableLayout *GetHTMLTableLayout() const { return m_pHTMLLayout; }
void SetHTMLTableLayout( SwHTMLTableLayout *p ); //Change of property!
SwHTMLTableLayout *GetHTMLTableLayout() { return m_xHTMLLayout.get(); }
const SwHTMLTableLayout *GetHTMLTableLayout() const { return m_xHTMLLayout.get(); }
void SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout> const& r); //Change of property!
sal_uInt16 IncGrfsThatResize() { return ++m_nGraphicsThatResize; }
sal_uInt16 DecGrfsThatResize() { return m_nGraphicsThatResize ? --m_nGraphicsThatResize : 0; }
......
......@@ -532,7 +532,7 @@ bool SwDoc::SortTable(const SwSelBoxes& rBoxes, const SwSortOptions& rOpt)
return false;
// Delete HTML layout
pTableNd->GetTable().SetHTMLTableLayout( nullptr );
pTableNd->GetTable().SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>());
// #i37739# A simple 'MakeFrames' after the node sorting
// does not work if the table is inside a frame and has no prev/next.
......
......@@ -75,11 +75,11 @@ public:
sal_uInt16 GetColumn() const { return nCol; }
};
SwHTMLTableLayoutCnts::SwHTMLTableLayoutCnts( const SwStartNode *pSttNd,
SwHTMLTableLayout* pTab,
bool bNoBrTag,
std::shared_ptr<SwHTMLTableLayoutCnts> const& rNxt ) :
xNext( rNxt ), pBox( nullptr ), xTable( pTab ), pStartNode( pSttNd ),
SwHTMLTableLayoutCnts::SwHTMLTableLayoutCnts(const SwStartNode *pSttNd,
std::shared_ptr<SwHTMLTableLayout> const& rTab,
bool bNoBrTag,
std::shared_ptr<SwHTMLTableLayoutCnts> const& rNxt ) :
xNext( rNxt ), pBox( nullptr ), xTable( rTab ), pStartNode( pSttNd ),
nPass1Done( 0 ), nWidthSet( 0 ), bNoBreakTag( bNoBrTag )
{}
......@@ -445,7 +445,7 @@ void SwHTMLTableLayout::AutoLayoutPass1()
bool bFixRelWidths = false;
sal_uInt16 i;
SwHTMLTableLayoutConstraints *pConstraints = nullptr;
std::unique_ptr<SwHTMLTableLayoutConstraints> xConstraints;
for( i=0; i<m_nCols; i++ )
{
......@@ -672,10 +672,14 @@ void SwHTMLTableLayout::AutoLayoutPass1()
SwHTMLTableLayoutConstraints *pConstr =
new SwHTMLTableLayoutConstraints( nMinNoAlignCell,
nMaxNoAlignCell, j, i, nColSpan );
if( pConstraints )
pConstraints = pConstraints->InsertNext( pConstr );
if (xConstraints)
{
SwHTMLTableLayoutConstraints* pConstraints = xConstraints->InsertNext(pConstr);
xConstraints.release();
xConstraints.reset(pConstraints);
}
else
pConstraints = pConstr;
xConstraints.reset(pConstr);
}
}
}
......@@ -755,7 +759,7 @@ void SwHTMLTableLayout::AutoLayoutPass1()
}
// Now process the constraints
SwHTMLTableLayoutConstraints *pConstr = pConstraints;
SwHTMLTableLayoutConstraints *pConstr = xConstraints.get();
while( pConstr )
{
// At first we need to process the width in the same way
......@@ -1035,8 +1039,6 @@ void SwHTMLTableLayout::AutoLayoutPass1()
}
}
}
delete pConstraints;
}
//TODO: provide documentation
......
......@@ -720,7 +720,7 @@ bool SwTable::InsNewTable( const SwTable& rCpyTable, const SwSelBoxes& rSelBoxes
bool SwTable::InsTable( const SwTable& rCpyTable, const SwNodeIndex& rSttBox,
SwUndoTableCpyTable* pUndo )
{
SetHTMLTableLayout( nullptr ); // Delete HTML Layout
SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>()); // Delete HTML Layout
SwDoc* pDoc = GetFrameFormat()->GetDoc();
......@@ -801,7 +801,7 @@ bool SwTable::InsTable( const SwTable& rCpyTable, const SwSelBoxes& rSelBoxes,
{
OSL_ENSURE( !rSelBoxes.empty(), "Missing selection" );
SetHTMLTableLayout( nullptr ); // Delete HTML Layout
SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>()); // Delete HTML Layout
if( IsNewModel() || rCpyTable.IsNewModel() )
return InsNewTable( rCpyTable, rSelBoxes, pUndo );
......
......@@ -500,7 +500,7 @@ bool SwTable::InsertCol( SwDoc* pDoc, const SwSelBoxes& rBoxes, sal_uInt16 nCnt,
if( aFndBox.GetLines().empty() )
return false;
SetHTMLTableLayout( nullptr ); // Delete HTML Layout
SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>()); // Delete HTML Layout
// Find Lines for the layout update
aFndBox.SetTableLines( *this );
......@@ -555,7 +555,7 @@ bool SwTable::InsertRow_( SwDoc* pDoc, const SwSelBoxes& rBoxes,
if( aFndBox.GetLines().empty() )
return false;
SetHTMLTableLayout( nullptr ); // Delete HTML Layout
SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>()); // Delete HTML Layout
FndBox_* pFndBox = &aFndBox;
{
......@@ -975,7 +975,7 @@ bool SwTable::DeleteSel(
return false;
}
SetHTMLTableLayout( nullptr ); // Delete HTML Layout
SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>()); // Delete HTML Layout
// Find Lines for the Layout update
FndBox_ aFndBox( nullptr, nullptr );
......@@ -1047,7 +1047,7 @@ bool SwTable::OldSplitRow( SwDoc* pDoc, const SwSelBoxes& rBoxes, sal_uInt16 nCn
// Thus we tell the charts to use their own data provider and forget about this table
pDoc->getIDocumentChartDataProviderAccess().CreateChartInternalDataProviders( this );
SetHTMLTableLayout( nullptr ); // Delete HTML Layout
SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>()); // Delete HTML Layout
// If the rows should get the same (min) height, we first have
// to store the old row heights before deleting the frames
......@@ -1189,7 +1189,7 @@ bool SwTable::SplitCol( SwDoc* pDoc, const SwSelBoxes& rBoxes, sal_uInt16 nCnt )
// Thus we tell the charts to use their own data provider and forget about this table
pDoc->getIDocumentChartDataProviderAccess().CreateChartInternalDataProviders( this );
SetHTMLTableLayout( nullptr ); // Delete HTML Layout
SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>()); // Delete HTML Layout
SwSelBoxes aSelBoxes(rBoxes);
ExpandSelection( aSelBoxes );
......@@ -1557,7 +1557,7 @@ bool SwTable::OldMerge( SwDoc* pDoc, const SwSelBoxes& rBoxes,
// Thus we tell the charts to use their own data provider and forget about this table
pDoc->getIDocumentChartDataProviderAccess().CreateChartInternalDataProviders( this );
SetHTMLTableLayout( nullptr ); // Delete HTML Layout
SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>()); // Delete HTML Layout
if( pUndo )
pUndo->SetSelBoxes( rBoxes );
......@@ -3375,7 +3375,7 @@ static FndBox_* lcl_SaveInsDelData( CR_SetBoxWidth& rParam, SwUndo** ppUndo,
bool SwTable::SetColWidth( SwTableBox& rAktBox, TableChgWidthHeightType eType,
SwTwips nAbsDiff, SwTwips nRelDiff, SwUndo** ppUndo )
{
SetHTMLTableLayout( nullptr ); // Delete HTML Layout
SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>()); // Delete HTML Layout
const SwFormatFrameSize& rSz = GetFrameFormat()->GetFrameSize();
const SvxLRSpaceItem& rLR = GetFrameFormat()->GetLRSpace();
......
......@@ -3101,7 +3101,7 @@ bool SwDoc::SplitTable( const SwPosition& rPos, SplitTable_HeadlineOption eHdlnM
return false;
SwTable& rTable = pTNd->GetTable();
rTable.SetHTMLTableLayout( nullptr ); // Delete HTML Layout
rTable.SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>()); // Delete HTML Layout
SwTableFormulaUpdate aMsgHint( &rTable );
......@@ -3470,8 +3470,8 @@ bool SwDoc::MergeTable( const SwPosition& rPos, bool bWithPrev, sal_uInt16 nMode
return false;
// Delete HTML Layout
pTableNd->GetTable().SetHTMLTableLayout( nullptr );
pDelTableNd->GetTable().SetHTMLTableLayout( nullptr );
pTableNd->GetTable().SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>());
pDelTableNd->GetTable().SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>());
// Both Tables are present; we can start
SwUndoMergeTable* pUndo = nullptr;
......@@ -3719,7 +3719,7 @@ bool SwDoc::SetTableAutoFormat(const SwSelBoxes& rBoxes, const SwTableAutoFormat
return false;
SwTable &table = pTableNd->GetTable();
table.SetHTMLTableLayout( nullptr );
table.SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>());
FndBox_* pFndBox = &aFndBox;
while( 1 == pFndBox->GetLines().size() &&
......
......@@ -2118,7 +2118,7 @@ void SwFEShell::SetTableAttr( const SfxItemSet &rNew )
SET_CURR_SHELL( this );
StartAllAction();
SwTabFrame *pTab = pFrame->FindTabFrame();
pTab->GetTable()->SetHTMLTableLayout( nullptr );
pTab->GetTable()->SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>());
GetDoc()->SetAttr( rNew, *pTab->GetFormat() );
GetDoc()->getIDocumentState().SetModified();
EndAllActionAndCall();
......
......@@ -205,7 +205,6 @@ void InsTableBox( SwDoc* pDoc, SwTableNode* pTableNd,
SwTable::SwTable()
: SwClient( nullptr ),
m_pHTMLLayout( nullptr ),
m_pTableNode( nullptr ),
m_nGraphicsThatResize( 0 ),
m_nRowsToRepeat( 1 ),
......@@ -218,7 +217,6 @@ SwTable::SwTable()
SwTable::SwTable( const SwTable& rTable )
: SwClient( rTable.GetFrameFormat() ),
m_pHTMLLayout( nullptr ),
m_pTableNode( nullptr ),
m_eTableChgMode( rTable.m_eTableChgMode ),
m_nGraphicsThatResize( 0 ),
......@@ -261,7 +259,6 @@ SwTable::~SwTable()
// section need deletion.
DelBoxNode(m_TabSortContentBoxes);
m_TabSortContentBoxes.clear();
delete m_pHTMLLayout;
}
namespace
......@@ -839,7 +836,7 @@ void SwTable::SetTabCols( const SwTabCols &rNew, const SwTabCols &rOld,
{
CHECK_TABLE( *this )
SetHTMLTableLayout( nullptr ); // delete HTML-Layout
SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout>()); // delete HTML-Layout
// FME: Made rOld const. The caller is responsible for passing correct
// values of rOld. Therefore we do not have to call GetTabCols anymore:
......@@ -1941,10 +1938,9 @@ void SwTable::SetRefObject( SwServerObject* pObj )
m_xRefObj = pObj;
}
void SwTable::SetHTMLTableLayout( SwHTMLTableLayout *p )
void SwTable::SetHTMLTableLayout(std::shared_ptr<SwHTMLTableLayout> const& r)
{
delete m_pHTMLLayout;
m_pHTMLLayout = p;
m_xHTMLLayout = r;
}
void ChgTextToNum( SwTableBox& rBox, const OUString& rText, const Color* pCol,
......
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