[Libreoffice-commits] core.git: chart2/source dbaccess/source editeng/inc editeng/qa editeng/source extensions/source forms/source include/editeng include/svl include/svx reportdesign/source sc/inc sc/source sd/source starmath/CppunitTest_starmath_qa_cppunit.mk starmath/inc starmath/Library_sm.mk starmath/source svl/CppunitTest_svl_itempool.mk svl/CppunitTest_svl_items.mk svl/Library_svl.mk svl/qa svl/source svx/source sw/inc sw/source
Noel Grandin (via logerrit)
logerrit at kemper.freedesktop.org
Sat May 8 15:37:34 UTC 2021
chart2/source/view/main/ChartItemPool.cxx | 19 +---
chart2/source/view/main/ChartItemPool.hxx | 2
dbaccess/source/ui/control/sqledit.cxx | 7 -
dbaccess/source/ui/dlg/dbadmin.cxx | 5 -
dbaccess/source/ui/inc/dbadmin.hxx | 4 -
dbaccess/source/ui/inc/sqledit.hxx | 2
dbaccess/source/ui/inc/unoadmin.hxx | 2
dbaccess/source/ui/misc/UITools.cxx | 4 -
dbaccess/source/ui/uno/unoadmin.cxx | 14 +--
editeng/inc/editdoc.hxx | 3
editeng/qa/unit/core-test.cxx | 36 ++++-----
editeng/source/editeng/editdoc.cxx | 4 -
editeng/source/editeng/editeng.cxx | 9 +-
editeng/source/editeng/editobj.cxx | 52 -------------
editeng/source/editeng/editobj2.hxx | 7 -
extensions/source/propctrlr/controlfontdialog.cxx | 1
extensions/source/propctrlr/controlfontdialog.hxx | 2
extensions/source/propctrlr/fontdialog.cxx | 5 -
extensions/source/propctrlr/fontdialog.hxx | 4 -
extensions/source/propctrlr/formcomponenthandler.cxx | 2
forms/source/richtext/richtextengine.cxx | 4 -
forms/source/richtext/richtextmodel.cxx | 4 -
include/editeng/editeng.hxx | 2
include/editeng/editobj.hxx | 4 -
include/svl/itempool.hxx | 35 +--------
include/svx/svdmodel.hxx | 6 -
include/svx/svdobj.hxx | 3
include/svx/svdpool.hxx | 2
include/svx/unopool.hxx | 2
include/svx/xpool.hxx | 2
reportdesign/source/ui/misc/UITools.cxx | 4 -
reportdesign/source/ui/report/ReportController.cxx | 8 +-
sc/inc/docpool.hxx | 2
sc/inc/editutil.hxx | 2
sc/inc/scmod.hxx | 2
sc/source/core/data/attrib.cxx | 2
sc/source/core/data/docpool.cxx | 2
sc/source/core/data/poolhelp.cxx | 16 ++--
sc/source/core/data/stlpool.cxx | 2
sc/source/core/inc/poolhelp.hxx | 6 -
sc/source/core/tool/editutil.cxx | 4 -
sc/source/filter/excel/xlroot.cxx | 2
sc/source/filter/inc/eeparser.hxx | 4 -
sc/source/filter/rtf/eeimpars.cxx | 4 -
sc/source/filter/xml/xmlfonte.cxx | 4 -
sc/source/ui/Accessibility/AccessibleText.cxx | 16 ++--
sc/source/ui/app/inputhdl.cxx | 2
sc/source/ui/app/inputwin.cxx | 4 -
sc/source/ui/app/scmod.cxx | 4 -
sc/source/ui/dbgui/csvgrid.cxx | 2
sc/source/ui/inc/msgpool.hxx | 2
sc/source/ui/pagedlg/tphfedit.cxx | 2
sc/source/ui/unoobj/editsrc.cxx | 4 -
sc/source/ui/unoobj/textuno.cxx | 16 ++--
sc/source/ui/view/gridwin4.cxx | 2
sc/source/ui/view/preview.cxx | 2
sc/source/ui/view/printfun.cxx | 2
sd/source/ui/annotations/annotationmanager.cxx | 6 -
sd/source/ui/presenter/PresenterTextView.cxx | 4 -
starmath/CppunitTest_starmath_qa_cppunit.mk | 1
starmath/Library_sm.mk | 1
starmath/inc/document.hxx | 2
starmath/source/document.cxx | 4 -
svl/CppunitTest_svl_itempool.mk | 1
svl/CppunitTest_svl_items.mk | 1
svl/Library_svl.mk | 1
svl/qa/unit/items/stylepool.cxx | 3
svl/qa/unit/items/test_itempool.cxx | 5 -
svl/source/inc/poolio.hxx | 5 -
svl/source/items/itempool.cxx | 73 +++++--------------
svx/source/dialog/ClassificationEditView.cxx | 2
svx/source/dialog/imapwnd.cxx | 4 -
svx/source/dialog/imapwnd.hxx | 2
svx/source/dialog/weldeditview.cxx | 4 -
svx/source/form/fmtextcontrolshell.cxx | 4 -
svx/source/svdraw/svdattr.cxx | 2
svx/source/svdraw/svdmodel.cxx | 22 +----
svx/source/svdraw/svdobj.cxx | 9 +-
svx/source/unodraw/unopool.cxx | 12 ---
svx/source/xoutdev/xpool.cxx | 2
sw/inc/doc.hxx | 2
sw/inc/swmodule.hxx | 2
sw/source/core/attr/swatrset.cxx | 14 ---
sw/source/core/doc/docnew.cxx | 2
sw/source/uibase/app/swmodule.cxx | 4 -
85 files changed, 200 insertions(+), 364 deletions(-)
New commits:
commit 1545949690c750d7b512000723b564e69cf3c3a6
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Fri May 7 22:06:14 2021 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Sat May 8 17:36:54 2021 +0200
ref-count SfxItemPool
so we can remove SfxItemPoolUser, which is a right
performance hog when we have large calc spreadsheets
Change-Id: I344002f536f6eead5cf98c6647dd1667fd9c8874
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115247
Tested-by: Noel Grandin <noel.grandin at collabora.co.uk>
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/chart2/source/view/main/ChartItemPool.cxx b/chart2/source/view/main/ChartItemPool.cxx
index 2b3e59dc3c31..8c2bf391953c 100644
--- a/chart2/source/view/main/ChartItemPool.cxx
+++ b/chart2/source/view/main/ChartItemPool.cxx
@@ -204,7 +204,7 @@ ChartItemPool::~ChartItemPool()
ReleaseDefaults(true);
}
-SfxItemPool* ChartItemPool::Clone() const
+rtl::Reference<SfxItemPool> ChartItemPool::Clone() const
{
return new ChartItemPool(*this);
}
@@ -214,25 +214,16 @@ MapUnit ChartItemPool::GetMetric(sal_uInt16 /* nWhich */) const
return MapUnit::Map100thMM;
}
-namespace {
-struct PoolDeleter
-{
- void operator()(SfxItemPool* pPool)
- {
- SfxItemPool::Free(pPool);
- }
-};
-}
-static std::unique_ptr<SfxItemPool, PoolDeleter> g_Pool1, g_Pool2, g_Pool3;
+static rtl::Reference<SfxItemPool> g_Pool1, g_Pool2, g_Pool3;
SfxItemPool& ChartItemPool::GetGlobalChartItemPool()
{
if (!g_Pool1)
{
// similar logic to SdrModel's pool, but with our chart pool tagged on the end
- g_Pool1.reset(new SdrItemPool(nullptr));
- g_Pool2.reset(EditEngine::CreatePool());
- g_Pool3.reset(new ChartItemPool());
+ g_Pool1 = new SdrItemPool(nullptr);
+ g_Pool2 = EditEngine::CreatePool();
+ g_Pool3 = new ChartItemPool();
g_Pool1->SetSecondaryPool(g_Pool2.get());
g_Pool1->SetDefaultMetric(MapUnit::Map100thMM);
diff --git a/chart2/source/view/main/ChartItemPool.hxx b/chart2/source/view/main/ChartItemPool.hxx
index 43f461a6aade..2ac440183740 100644
--- a/chart2/source/view/main/ChartItemPool.hxx
+++ b/chart2/source/view/main/ChartItemPool.hxx
@@ -36,7 +36,7 @@ protected:
virtual ~ChartItemPool() override;
public:
- virtual SfxItemPool* Clone() const override;
+ virtual rtl::Reference<SfxItemPool> Clone() const override;
MapUnit GetMetric(sal_uInt16 nWhich) const override;
/// get the pure chart item pool
diff --git a/dbaccess/source/ui/control/sqledit.cxx b/dbaccess/source/ui/control/sqledit.cxx
index 01f9182835df..062f99e96cae 100644
--- a/dbaccess/source/ui/control/sqledit.cxx
+++ b/dbaccess/source/ui/control/sqledit.cxx
@@ -67,7 +67,6 @@ private:
SQLEditView::SQLEditView()
: m_aHighlighter(HighlighterLanguage::SQL)
- , m_pItemPool(nullptr)
, m_bInUpdate(false)
, m_bDisableInternalUndo(false)
{
@@ -114,8 +113,8 @@ void SQLEditView::makeEditEngine()
{
assert(!m_pItemPool);
m_pItemPool = EditEngine::CreatePool();
- SetItemPoolFont(m_pItemPool);
- m_xEditEngine.reset(new EditEngine(m_pItemPool));
+ SetItemPoolFont(m_pItemPool.get());
+ m_xEditEngine.reset(new EditEngine(m_pItemPool.get()));
}
void SQLEditView::SetDrawingArea(weld::DrawingArea* pDrawingArea)
@@ -366,7 +365,7 @@ void SQLEditView::ConfigurationChanged(utl::ConfigurationBroadcaster*, Configura
void SQLEditView::ImplSetFont()
{
// see SmEditWindow::DataChanged for a similar case
- SetItemPoolFont(m_pItemPool); // change default font
+ SetItemPoolFont(m_pItemPool.get()); // change default font
// re-create with the new font
EditEngine& rEditEngine = *GetEditEngine();
OUString aTxt(rEditEngine.GetText());
diff --git a/dbaccess/source/ui/dlg/dbadmin.cxx b/dbaccess/source/ui/dlg/dbadmin.cxx
index e37541bfd271..0c79cf0c9bae 100644
--- a/dbaccess/source/ui/dlg/dbadmin.cxx
+++ b/dbaccess/source/ui/dlg/dbadmin.cxx
@@ -262,7 +262,7 @@ void ODbAdminDialog::clearPassword()
m_pImpl->clearPassword();
}
-void ODbAdminDialog::createItemSet(std::unique_ptr<SfxItemSet>& _rpSet, SfxItemPool*& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults, ::dbaccess::ODsnTypeCollection* _pTypeCollection)
+void ODbAdminDialog::createItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults, ::dbaccess::ODsnTypeCollection* _pTypeCollection)
{
// just to be sure...
_rpSet = nullptr;
@@ -408,7 +408,7 @@ void ODbAdminDialog::createItemSet(std::unique_ptr<SfxItemSet>& _rpSet, SfxItemP
_rpSet.reset(new SfxItemSet(*_rpPool));
}
-void ODbAdminDialog::destroyItemSet(std::unique_ptr<SfxItemSet>& _rpSet, SfxItemPool*& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults)
+void ODbAdminDialog::destroyItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults)
{
// _first_ delete the set (referring the pool)
_rpSet.reset();
@@ -418,7 +418,6 @@ void ODbAdminDialog::destroyItemSet(std::unique_ptr<SfxItemSet>& _rpSet, SfxItem
{
_rpPool->ReleaseDefaults(true);
// the "true" means delete the items, too
- SfxItemPool::Free(_rpPool);
_rpPool = nullptr;
}
diff --git a/dbaccess/source/ui/inc/dbadmin.hxx b/dbaccess/source/ui/inc/dbadmin.hxx
index eef3aed0874e..fb948f940fb8 100644
--- a/dbaccess/source/ui/inc/dbadmin.hxx
+++ b/dbaccess/source/ui/inc/dbadmin.hxx
@@ -62,10 +62,10 @@ public:
@param _pTypeCollection pointer to an <type>ODatasourceMap</type>. May be NULL, in this case
the pool will not contain a typecollection default.
*/
- static void createItemSet(std::unique_ptr<SfxItemSet>& _rpSet, SfxItemPool*& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults, ::dbaccess::ODsnTypeCollection* _pTypeCollection);
+ static void createItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults, ::dbaccess::ODsnTypeCollection* _pTypeCollection);
/** destroy and item set / item pool / pool defaults previously created by <method>createItemSet</method>
*/
- static void destroyItemSet(std::unique_ptr<SfxItemSet>& _rpSet, SfxItemPool*& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults);
+ static void destroyItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults);
/** selects the DataSource
@param _rName
diff --git a/dbaccess/source/ui/inc/sqledit.hxx b/dbaccess/source/ui/inc/sqledit.hxx
index c434a4f06555..6f85ba825a71 100644
--- a/dbaccess/source/ui/inc/sqledit.hxx
+++ b/dbaccess/source/ui/inc/sqledit.hxx
@@ -41,7 +41,7 @@ namespace dbaui
Timer m_aUpdateDataTimer;
const SyntaxHighlighter m_aHighlighter;
svtools::ColorConfig m_ColorConfig;
- SfxItemPool* m_pItemPool;
+ rtl::Reference<SfxItemPool> m_pItemPool;
rtl::Reference<ChangesListener> m_listener;
osl::Mutex m_mutex;
diff --git a/dbaccess/source/ui/inc/unoadmin.hxx b/dbaccess/source/ui/inc/unoadmin.hxx
index b18e4eb276db..944dccf87ae6 100644
--- a/dbaccess/source/ui/inc/unoadmin.hxx
+++ b/dbaccess/source/ui/inc/unoadmin.hxx
@@ -37,7 +37,7 @@ class ODatabaseAdministrationDialog
{
protected:
std::unique_ptr<SfxItemSet> m_pDatasourceItems; // item set for the dialog
- SfxItemPool* m_pItemPool; // item pool for the item set for the dialog
+ rtl::Reference<SfxItemPool> m_pItemPool; // item pool for the item set for the dialog
std::vector<SfxPoolItem*>*
m_pItemPoolDefaults; // pool defaults
std::unique_ptr<::dbaccess::ODsnTypeCollection>
diff --git a/dbaccess/source/ui/misc/UITools.cxx b/dbaccess/source/ui/misc/UITools.cxx
index f22c9198ca69..fe28821bed62 100644
--- a/dbaccess/source/ui/misc/UITools.cxx
+++ b/dbaccess/source/ui/misc/UITools.cxx
@@ -788,7 +788,7 @@ bool callColumnFormatDialog(weld::Widget* _pParent,
new SvxNumberInfoItem(SID_ATTR_NUMBERFORMAT_INFO)
};
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> pPool(new SfxItemPool("GridBrowserProperties", SBA_DEF_RANGEFORMAT, SBA_ATTR_ALIGN_HOR_JUSTIFY, aItemInfos, &pDefaults));
+ rtl::Reference<SfxItemPool> pPool(new SfxItemPool("GridBrowserProperties", SBA_DEF_RANGEFORMAT, SBA_ATTR_ALIGN_HOR_JUSTIFY, aItemInfos, &pDefaults));
pPool->SetDefaultMetric( MapUnit::MapTwip ); // ripped, don't understand why
pPool->FreezeIdRanges(); // the same
@@ -855,7 +855,7 @@ bool callColumnFormatDialog(weld::Widget* _pParent,
}
pFormatDescriptor.reset();
- pPool.reset();
+ pPool.clear();
for (SfxPoolItem* pDefault : pDefaults)
delete pDefault;
diff --git a/dbaccess/source/ui/uno/unoadmin.cxx b/dbaccess/source/ui/uno/unoadmin.cxx
index f53df65a9e99..3d863b92e8f9 100644
--- a/dbaccess/source/ui/uno/unoadmin.cxx
+++ b/dbaccess/source/ui/uno/unoadmin.cxx
@@ -32,7 +32,6 @@ namespace dbaui
ODatabaseAdministrationDialog::ODatabaseAdministrationDialog(const Reference< XComponentContext >& _rxORB)
:ODatabaseAdministrationDialogBase(_rxORB)
- ,m_pItemPool(nullptr)
,m_pItemPoolDefaults(nullptr)
{
m_pCollection.reset( new ::dbaccess::ODsnTypeCollection(_rxORB) );
@@ -41,15 +40,10 @@ ODatabaseAdministrationDialog::ODatabaseAdministrationDialog(const Reference< XC
ODatabaseAdministrationDialog::~ODatabaseAdministrationDialog()
{
- if (m_xDialog)
- {
- ::osl::MutexGuard aGuard(m_aMutex);
- if (m_xDialog)
- {
- destroyDialog();
- ODbAdminDialog::destroyItemSet(m_pDatasourceItems, m_pItemPool, m_pItemPoolDefaults);
- }
- }
+ ::osl::MutexGuard aGuard(m_aMutex);
+ if (m_xDialog)
+ destroyDialog();
+ ODbAdminDialog::destroyItemSet(m_pDatasourceItems, m_pItemPool, m_pItemPoolDefaults);
}
void ODatabaseAdministrationDialog::implInitialize(const Any& _rValue)
diff --git a/editeng/inc/editdoc.hxx b/editeng/inc/editdoc.hxx
index 7017516445f6..133ea1ca9daa 100644
--- a/editeng/inc/editdoc.hxx
+++ b/editeng/inc/editdoc.hxx
@@ -720,7 +720,7 @@ private:
mutable sal_Int32 nLastCache;
std::vector<std::unique_ptr<ContentNode> > maContents;
- SfxItemPool* pItemPool;
+ rtl::Reference<SfxItemPool> pItemPool;
Link<LinkParamNone*,void> aModifyHdl;
SvxFont aDefFont; //faster than ever from the pool!!
@@ -729,7 +729,6 @@ private:
TextRotation mnRotation;
bool bIsFixedCellHeight:1;
- bool bOwnerOfPool:1;
bool bModified:1;
bool bDisableAttributeExpanding:1;
diff --git a/editeng/qa/unit/core-test.cxx b/editeng/qa/unit/core-test.cxx
index 70e86b7119fa..dca5a0a8babf 100644
--- a/editeng/qa/unit/core-test.cxx
+++ b/editeng/qa/unit/core-test.cxx
@@ -122,10 +122,10 @@ public:
CPPUNIT_TEST_SUITE_END();
private:
- EditEngineItemPool* mpItemPool;
+ rtl::Reference<EditEngineItemPool> mpItemPool;
};
-Test::Test() : mpItemPool(nullptr) {}
+Test::Test() {}
void Test::setUp()
{
@@ -138,7 +138,7 @@ void Test::setUp()
void Test::tearDown()
{
- SfxItemPool::Free(mpItemPool);
+ mpItemPool.clear();
test::BootstrapFixture::tearDown();
}
@@ -146,7 +146,7 @@ void Test::tearDown()
void Test::testLineSpacing()
{
// Create EditEngine's instance
- EditEngine aEditEngine(mpItemPool);
+ EditEngine aEditEngine(mpItemPool.get());
if(aEditEngine.GetRefDevice()->GetDPIY() != 96
|| aEditEngine.GetRefDevice()->GetDPIScaleFactor() != 1.0)
@@ -223,7 +223,7 @@ void Test::testLineSpacing()
void Test::testConstruction()
{
- EditEngine aEngine(mpItemPool);
+ EditEngine aEngine(mpItemPool.get());
aEngine.SetText("I am Edit Engine.");
}
@@ -551,7 +551,7 @@ IMPL_STATIC_LINK( Test, CalcFieldValueHdl, EditFieldInfo*, pInfo, void )
void Test::testHyperlinkCopyPaste()
{
// Create Outliner instance
- Outliner aOutliner(mpItemPool, OutlinerMode
+ Outliner aOutliner(mpItemPool.get(), OutlinerMode
::TextObject);
aOutliner.SetCalcFieldValueHdl( LINK( nullptr, Test, CalcFieldValueHdl ) );
@@ -675,7 +675,7 @@ void Test::testHyperlinkCopyPaste()
void Test::testCopyPaste()
{
// Create EditEngine's instance
- EditEngine aEditEngine( mpItemPool );
+ EditEngine aEditEngine( mpItemPool.get() );
// Get EditDoc for current EditEngine's instance
EditDoc &rDoc = aEditEngine.GetEditDoc();
@@ -707,7 +707,7 @@ void Test::testCopyPaste()
void Test::testMultiParaSelCopyPaste()
{
// Create EditEngine's instance
- EditEngine aEditEngine( mpItemPool );
+ EditEngine aEditEngine( mpItemPool.get() );
// Get EditDoc for current EditEngine's instance
EditDoc &rDoc = aEditEngine.GetEditDoc();
@@ -752,7 +752,7 @@ void Test::testMultiParaSelCopyPaste()
void Test::testTabsCopyPaste()
{
// Create EditEngine's instance
- EditEngine aEditEngine( mpItemPool );
+ EditEngine aEditEngine( mpItemPool.get() );
// Get EditDoc for current EditEngine's instance
EditDoc &rDoc = aEditEngine.GetEditDoc();
@@ -817,7 +817,7 @@ public:
// https://bugzilla.novell.com/show_bug.cgi?id=467459
void Test::testHyperlinkSearch()
{
- UrlEditEngine aEngine(mpItemPool);
+ UrlEditEngine aEngine(mpItemPool.get());
EditDoc &rDoc = aEngine.GetEditDoc();
OUString aSampleText = "Please write email to . if you find a fish(not a dog).";
@@ -902,7 +902,7 @@ bool hasItalic(const editeng::Section& rSecAttr)
void Test::testBoldItalicCopyPaste()
{
// Create EditEngine's instance
- EditEngine aEditEngine( mpItemPool );
+ EditEngine aEditEngine( mpItemPool.get() );
// Get EditDoc for current EditEngine's instance
EditDoc &rDoc = aEditEngine.GetEditDoc();
@@ -1083,7 +1083,7 @@ bool hasUnderline(const editeng::Section& rSecAttr)
void Test::testUnderlineCopyPaste()
{
// Create EditEngine's instance
- EditEngine aEditEngine( mpItemPool );
+ EditEngine aEditEngine( mpItemPool.get() );
// Get EditDoc for current EditEngine's instance
EditDoc &rDoc = aEditEngine.GetEditDoc();
@@ -1176,7 +1176,7 @@ void Test::testUnderlineCopyPaste()
void Test::testMultiParaCopyPaste()
{
// Create EditEngine's instance
- EditEngine aEditEngine( mpItemPool );
+ EditEngine aEditEngine( mpItemPool.get() );
// Get EditDoc for current EditEngine's instance
EditDoc &rDoc = aEditEngine.GetEditDoc();
@@ -1218,7 +1218,7 @@ void Test::testMultiParaCopyPaste()
void Test::testParaBoldItalicCopyPaste()
{
// Create EditEngine's instance
- EditEngine aEditEngine( mpItemPool );
+ EditEngine aEditEngine( mpItemPool.get() );
// Get EditDoc for current EditEngine's instance
EditDoc &rDoc = aEditEngine.GetEditDoc();
@@ -1489,7 +1489,7 @@ void Test::testParaBoldItalicCopyPaste()
void Test::testParaStartCopyPaste()
{
// Create EditEngine's instance
- EditEngine aEditEngine( mpItemPool );
+ EditEngine aEditEngine( mpItemPool.get() );
// Get EditDoc for current EditEngine's instance
EditDoc &rDoc = aEditEngine.GetEditDoc();
@@ -1533,7 +1533,7 @@ void Test::testParaStartCopyPaste()
void Test::testSectionAttributes()
{
- EditEngine aEngine(mpItemPool);
+ EditEngine aEngine(mpItemPool.get());
std::unique_ptr<SfxItemSet> pSet(new SfxItemSet(aEngine.GetEmptyItemSet()));
SvxWeightItem aBold(WEIGHT_BOLD, EE_CHAR_WEIGHT);
@@ -1675,7 +1675,7 @@ void Test::testSectionAttributes()
void Test::testLargeParaCopyPaste()
{
// Create EditEngine's instance
- EditEngine aEditEngine( mpItemPool );
+ EditEngine aEditEngine( mpItemPool.get() );
// Get EditDoc for current EditEngine's instance
EditDoc &rDoc = aEditEngine.GetEditDoc();
@@ -1747,7 +1747,7 @@ void Test::testLargeParaCopyPaste()
void Test::testTransliterate()
{
// Create EditEngine's instance
- EditEngine aEditEngine( mpItemPool );
+ EditEngine aEditEngine( mpItemPool.get() );
OUString sText("one (two) three");
aEditEngine.SetText(sText);
diff --git a/editeng/source/editeng/editdoc.cxx b/editeng/source/editeng/editdoc.cxx
index 84ef4feae971..55415db284e6 100644
--- a/editeng/source/editeng/editdoc.cxx
+++ b/editeng/source/editeng/editdoc.cxx
@@ -1887,7 +1887,6 @@ EditDoc::EditDoc( SfxItemPool* pPool ) :
bIsVertical(false),
mnRotation(TextRotation::NONE),
bIsFixedCellHeight(false),
- bOwnerOfPool(pPool == nullptr),
bModified(false),
bDisableAttributeExpanding(false)
{
@@ -1897,8 +1896,6 @@ EditDoc::EditDoc( SfxItemPool* pPool ) :
EditDoc::~EditDoc()
{
ImplDestroyContents();
- if ( bOwnerOfPool )
- SfxItemPool::Free(pItemPool);
}
namespace {
@@ -3011,6 +3008,7 @@ EditEngineItemPool::EditEngineItemPool()
EditEngineItemPool::~EditEngineItemPool()
{
ClearDefaults();
+ SetSecondaryPool(nullptr);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx
index 55481862430e..208e502f6215 100644
--- a/editeng/source/editeng/editeng.cxx
+++ b/editeng/source/editeng/editeng.cxx
@@ -83,7 +83,7 @@ static bool bDebugPaint = false;
#endif
-static std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> pGlobalPool;
+static rtl::Reference<SfxItemPool> pGlobalPool;
EditEngine::EditEngine( SfxItemPool* pItemPool )
{
@@ -2589,16 +2589,15 @@ void EditEngine::FieldClicked( const SvxFieldItem& )
// ====================== Static Methods =======================
-SfxItemPool* EditEngine::CreatePool()
+rtl::Reference<SfxItemPool> EditEngine::CreatePool()
{
- SfxItemPool* pPool = new EditEngineItemPool();
- return pPool;
+ return new EditEngineItemPool();
}
SfxItemPool& EditEngine::GetGlobalItemPool()
{
if ( !pGlobalPool )
- pGlobalPool.reset(CreatePool());
+ pGlobalPool = CreatePool();
return *pGlobalPool;
}
diff --git a/editeng/source/editeng/editobj.cxx b/editeng/source/editeng/editobj.cxx
index 0d202ac59203..e5c5cbdf4760 100644
--- a/editeng/source/editeng/editobj.cxx
+++ b/editeng/source/editeng/editobj.cxx
@@ -212,7 +212,6 @@ EditTextObject::EditTextObject( SfxItemPool* pPool ) :
}
EditTextObject::EditTextObject( const EditTextObject& r ) :
- SfxItemPoolUser(),
mpImpl(new EditTextObjectImpl(this, *r.mpImpl))
{
}
@@ -390,11 +389,6 @@ bool EditTextObject::isWrongListEqual(const EditTextObject& rCompare) const
return mpImpl->isWrongListEqual(*rCompare.mpImpl);
}
-void EditTextObject::ObjectInDestruction(const SfxItemPool& rSfxItemPool)
-{
- mpImpl->ObjectInDestruction(rSfxItemPool);
-}
-
#if DEBUG_EDIT_ENGINE
void EditTextObject::Dump() const
{
@@ -429,31 +423,6 @@ void EditTextObject::dumpAsXml(xmlTextWriterPtr pWriter) const
}
}
-// from SfxItemPoolUser
-void EditTextObjectImpl::ObjectInDestruction(const SfxItemPool& rSfxItemPool)
-{
- if(bOwnerOfPool || pPool != &rSfxItemPool)
- return;
-
- // The pool we are based on gets destructed; get owner of pool by creating own one.
- // No need to call RemoveSfxItemPoolUser(), this is done from the pool's destructor
- // Base new pool on EditEnginePool; it would also be possible to clone the used
- // pool if needed, but only text attributes should be used.
- SfxItemPool* pNewPool = EditEngine::CreatePool();
-
- pNewPool->SetDefaultMetric(pPool->GetMetric(DEF_METRIC));
-
- ContentInfosType aReplaced;
- aReplaced.reserve(aContents.size());
- for (auto const& content : aContents)
- aReplaced.push_back(std::unique_ptr<ContentInfo>(new ContentInfo(*content, *pNewPool)));
- aReplaced.swap(aContents);
-
- // set local variables
- pPool = pNewPool;
- bOwnerOfPool = true;
-}
-
#if DEBUG_EDIT_ENGINE
void EditTextObjectImpl::Dump() const
{
@@ -504,12 +473,6 @@ EditTextObjectImpl::EditTextObjectImpl( EditTextObject* pFront, SfxItemPool* pP
pPool = EditEngine::CreatePool();
bOwnerOfPool = true;
}
-
- if(!bOwnerOfPool && pPool)
- {
- // it is sure now that the pool is an EditEngineItemPool
- pPool->AddSfxItemPoolUser(*mpFront);
- }
}
EditTextObjectImpl::EditTextObjectImpl( EditTextObject* pFront, const EditTextObjectImpl& r )
@@ -537,12 +500,6 @@ EditTextObjectImpl::EditTextObjectImpl( EditTextObject* pFront, const EditTextOb
}
- if (!bOwnerOfPool)
- {
- // it is sure now that the pool is an EditEngineItemPool
- pPool->AddSfxItemPoolUser(*mpFront);
- }
-
if (bOwnerOfPool && r.pPool)
pPool->SetDefaultMetric( r.pPool->GetMetric( DEF_METRIC ) );
@@ -553,20 +510,11 @@ EditTextObjectImpl::EditTextObjectImpl( EditTextObject* pFront, const EditTextOb
EditTextObjectImpl::~EditTextObjectImpl()
{
- if(!bOwnerOfPool && pPool)
- {
- pPool->RemoveSfxItemPoolUser(*mpFront);
- }
-
ClearPortionInfo();
// Remove contents before deleting the pool instance since each content
// has to access the pool instance in its destructor.
aContents.clear();
- if ( bOwnerOfPool )
- {
- SfxItemPool::Free(pPool);
- }
}
diff --git a/editeng/source/editeng/editobj2.hxx b/editeng/source/editeng/editobj2.hxx
index ba9603a7416d..3c7f171d2da5 100644
--- a/editeng/source/editeng/editobj2.hxx
+++ b/editeng/source/editeng/editobj2.hxx
@@ -173,7 +173,7 @@ private:
EditTextObject* mpFront;
ContentInfosType aContents;
- SfxItemPool* pPool;
+ rtl::Reference<SfxItemPool> pPool;
std::unique_ptr<XParaPortionList> pPortionInfo;
sal_uInt16 nMetric;
@@ -217,7 +217,7 @@ public:
ContentInfosType& GetContents() { return aContents;}
const ContentInfosType& GetContents() const { return aContents;}
- SfxItemPool* GetPool() const { return pPool; }
+ SfxItemPool* GetPool() const { return pPool.get(); }
XParaPortionList* GetPortionInfo() const { return pPortionInfo.get(); }
void SetPortionInfo( std::unique_ptr<XParaPortionList> pP )
{ pPortionInfo = std::move(pP); }
@@ -263,9 +263,6 @@ public:
// #i102062#
bool isWrongListEqual(const EditTextObjectImpl& rCompare) const;
- // from SfxItemPoolUser
- void ObjectInDestruction(const SfxItemPool& rSfxItemPool);
-
#if DEBUG_EDIT_ENGINE
void Dump() const;
#endif
diff --git a/extensions/source/propctrlr/controlfontdialog.cxx b/extensions/source/propctrlr/controlfontdialog.cxx
index 26afa43a20bf..436770e60316 100644
--- a/extensions/source/propctrlr/controlfontdialog.cxx
+++ b/extensions/source/propctrlr/controlfontdialog.cxx
@@ -36,7 +36,6 @@ namespace pcr
OControlFontDialog::OControlFontDialog(const Reference< XComponentContext >& _rxContext )
:OGenericUnoDialog( _rxContext )
- ,m_pItemPool(nullptr)
,m_pItemPoolDefaults(nullptr)
{
registerProperty(PROPERTY_INTROSPECTEDOBJECT, OWN_PROPERTY_ID_INTROSPECTEDOBJECT,
diff --git a/extensions/source/propctrlr/controlfontdialog.hxx b/extensions/source/propctrlr/controlfontdialog.hxx
index 202adadc73fe..8dc52010273f 100644
--- a/extensions/source/propctrlr/controlfontdialog.hxx
+++ b/extensions/source/propctrlr/controlfontdialog.hxx
@@ -44,7 +44,7 @@ namespace pcr
// </properties>
std::unique_ptr<SfxItemSet> m_pFontItems; // item set for the dialog
- SfxItemPool* m_pItemPool; // item pool for the item set for the dialog
+ rtl::Reference<SfxItemPool> m_pItemPool; // item pool for the item set for the dialog
std::vector<SfxPoolItem*>*
m_pItemPoolDefaults; // pool defaults
diff --git a/extensions/source/propctrlr/fontdialog.cxx b/extensions/source/propctrlr/fontdialog.cxx
index af276592fc41..0e4b11be2896 100644
--- a/extensions/source/propctrlr/fontdialog.cxx
+++ b/extensions/source/propctrlr/fontdialog.cxx
@@ -464,7 +464,7 @@ namespace pcr
}
}
- void ControlCharacterDialog::createItemSet(std::unique_ptr<SfxItemSet>& _rpSet, SfxItemPool*& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults)
+ void ControlCharacterDialog::createItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults)
{
// just to be sure...
_rpSet = nullptr;
@@ -534,7 +534,7 @@ namespace pcr
_rpSet.reset(new SfxItemSet(*_rpPool));
}
- void ControlCharacterDialog::destroyItemSet(std::unique_ptr<SfxItemSet>& _rpSet, SfxItemPool*& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults)
+ void ControlCharacterDialog::destroyItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults)
{
// from the pool, get and remember the font list (needs to be deleted)
const SvxFontListItem& rFontListItem = static_cast<const SvxFontListItem&>(_rpPool->GetDefaultItem(CFID_FONTLIST));
@@ -546,7 +546,6 @@ namespace pcr
// delete the pool
_rpPool->ReleaseDefaults(true);
// the "true" means delete the items, too
- SfxItemPool::Free(_rpPool);
_rpPool = nullptr;
// reset the defaults ptr
diff --git a/extensions/source/propctrlr/fontdialog.hxx b/extensions/source/propctrlr/fontdialog.hxx
index d2688f5ad200..eaba29db0b9c 100644
--- a/extensions/source/propctrlr/fontdialog.hxx
+++ b/extensions/source/propctrlr/fontdialog.hxx
@@ -36,10 +36,10 @@ namespace pcr
virtual ~ControlCharacterDialog() override;
/// creates an item set to be used with this dialog
- static void createItemSet(std::unique_ptr<SfxItemSet>& _rpSet, SfxItemPool*& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults);
+ static void createItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults);
/// destroys an item previously created with <method>createItemSet</method>
- static void destroyItemSet(std::unique_ptr<SfxItemSet>& _rpSet, SfxItemPool*& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults);
+ static void destroyItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults);
/// fills the given item set with values obtained from the given property set
static void translatePropertiesToItems(
diff --git a/extensions/source/propctrlr/formcomponenthandler.cxx b/extensions/source/propctrlr/formcomponenthandler.cxx
index ceac37326a0a..5631014ef211 100644
--- a/extensions/source/propctrlr/formcomponenthandler.cxx
+++ b/extensions/source/propctrlr/formcomponenthandler.cxx
@@ -2840,7 +2840,7 @@ namespace pcr
// create an item set for use with the dialog
std::unique_ptr<SfxItemSet> pSet;
- SfxItemPool* pPool = nullptr;
+ rtl::Reference<SfxItemPool> pPool;
std::vector<SfxPoolItem*>* pDefaults = nullptr;
ControlCharacterDialog::createItemSet(pSet, pPool, pDefaults);
ControlCharacterDialog::translatePropertiesToItems(m_xComponent, pSet.get());
diff --git a/forms/source/richtext/richtextengine.cxx b/forms/source/richtext/richtextengine.cxx
index 437c9abee25e..e6fd4848aa4f 100644
--- a/forms/source/richtext/richtextengine.cxx
+++ b/forms/source/richtext/richtextengine.cxx
@@ -44,10 +44,10 @@ namespace frm
{
SolarMutexGuard g;
- SfxItemPool* pPool = EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pPool = EditEngine::CreatePool();
pPool->FreezeIdRanges();
- RichTextEngine* pReturn = new RichTextEngine( pPool );
+ RichTextEngine* pReturn = new RichTextEngine( pPool.get() );
OutputDevice* pOutputDevice = pReturn->GetRefDevice();
const MapMode& aDeviceMapMode( pOutputDevice->GetMapMode() );
diff --git a/forms/source/richtext/richtextmodel.cxx b/forms/source/richtext/richtextmodel.cxx
index 9e33fb2118dd..cd2ce3463e18 100644
--- a/forms/source/richtext/richtextmodel.cxx
+++ b/forms/source/richtext/richtextmodel.cxx
@@ -209,12 +209,8 @@ namespace frm
if (m_pEngine)
{
SolarMutexGuard g;
- SfxItemPool* pPool = m_pEngine->getPool();
m_pEngine.reset();
- SfxItemPool::Free(pPool);
}
-
-
}
diff --git a/include/editeng/editeng.hxx b/include/editeng/editeng.hxx
index cfa574d56cfb..cc043ec2a897 100644
--- a/include/editeng/editeng.hxx
+++ b/include/editeng/editeng.hxx
@@ -517,7 +517,7 @@ public:
virtual tools::Rectangle GetBulletArea( sal_Int32 nPara );
- static SfxItemPool* CreatePool();
+ static rtl::Reference<SfxItemPool> CreatePool();
static SfxItemPool& GetGlobalItemPool();
static bool DoesKeyChangeText( const KeyEvent& rKeyEvent );
static bool DoesKeyMoveCursor( const KeyEvent& rKeyEvent );
diff --git a/include/editeng/editobj.hxx b/include/editeng/editobj.hxx
index ea68d92df507..818e3ea28a73 100644
--- a/include/editeng/editobj.hxx
+++ b/include/editeng/editobj.hxx
@@ -56,7 +56,7 @@ enum class TextRotation { NONE, TOPTOBOTTOM, BOTTOMTOTOP };
class EditTextObjectImpl;
-class EDITENG_DLLPUBLIC EditTextObject final : public SfxItemPoolUser
+class EDITENG_DLLPUBLIC EditTextObject final
{
friend class EditTextObjectImpl;
friend class editeng::FieldUpdaterImpl;
@@ -139,8 +139,6 @@ public:
// #i102062#
bool isWrongListEqual(const EditTextObject& rCompare) const;
- virtual void ObjectInDestruction(const SfxItemPool& rSfxItemPool) override;
-
#if DEBUG_EDIT_ENGINE
void Dump() const;
#endif
diff --git a/include/svl/itempool.hxx b/include/svl/itempool.hxx
index baab6da1a3d7..0ff1c8d4b27a 100644
--- a/include/svl/itempool.hxx
+++ b/include/svl/itempool.hxx
@@ -19,12 +19,14 @@
#pragma once
+#include <rtl/ref.hxx>
#include <svl/poolitem.hxx>
#include <svl/svldllapi.h>
#include <svl/typedwhich.hxx>
#include <memory>
#include <vector>
#include <o3tl/sorted_vector.hxx>
+#include <salhelper/simplereferenceobject.hxx>
class SfxBroadcaster;
struct SfxItemPool_Impl;
@@ -37,15 +39,6 @@ struct SfxItemInfo
class SfxItemPool;
-class SVL_DLLPUBLIC SfxItemPoolUser
-{
-public:
- virtual void ObjectInDestruction(const SfxItemPool& rSfxItemPool) = 0;
-
-protected:
- ~SfxItemPoolUser() {}
-};
-
/** Base class for providers of defaults of SfxPoolItems.
*
* The derived classes hold the concrete (const) instances which are referenced in several places
@@ -53,7 +46,7 @@ protected:
* This helps to lower the amount of calls to lifecycle methods, speeds up comparisons within a document
* and facilitates loading and saving of attributes.
*/
-class SVL_DLLPUBLIC SfxItemPool
+class SVL_DLLPUBLIC SfxItemPool : public salhelper::SimpleReferenceObject
{
friend struct SfxItemPool_Impl;
friend class SfxItemSet;
@@ -62,10 +55,6 @@ class SVL_DLLPUBLIC SfxItemPool
const SfxItemInfo* pItemInfos;
std::unique_ptr<SfxItemPool_Impl> pImpl;
-public:
- void AddSfxItemPoolUser(SfxItemPoolUser& rNewUser);
- void RemoveSfxItemPoolUser(SfxItemPoolUser& rOldUser);
-
private:
sal_uInt16 GetIndex_Impl(sal_uInt16 nWhich) const;
sal_uInt16 GetSize_Impl() const;
@@ -90,11 +79,8 @@ public:
const SfxItemInfo *pItemInfos,
std::vector<SfxPoolItem*> *pDefaults = nullptr );
-protected:
- virtual ~SfxItemPool();
-
public:
- static void Free(SfxItemPool* pPool);
+ virtual ~SfxItemPool();
SfxBroadcaster& BC();
@@ -113,6 +99,7 @@ public:
virtual MapUnit GetMetric( sal_uInt16 nWhich ) const;
void SetDefaultMetric( MapUnit eNewMetric );
+ MapUnit GetDefaultMetric() const;
/** Request string representation of pool items.
@@ -144,7 +131,7 @@ public:
MapUnit ePresentationMetric,
OUString& rText,
const IntlWrapper& rIntlWrapper ) const;
- virtual SfxItemPool* Clone() const;
+ virtual rtl::Reference<SfxItemPool> Clone() const;
const OUString& GetName() const;
template<class T> const T& Put( std::unique_ptr<T> xItem, sal_uInt16 nWhich = 0 )
@@ -234,14 +221,4 @@ inline sal_uInt32 SfxItemPool::ReleaseRef(const SfxPoolItem& rItem, sal_uInt32 n
return rItem.ReleaseRef(n);
}
-// Utility class for using SfxItemPool with std::unique_ptr
-struct SfxItemPoolDeleter
-{
- void operator()(SfxItemPool* pPool)
- {
- SfxItemPool::Free(pPool);
- }
-};
-
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/svx/svdmodel.hxx b/include/svx/svdmodel.hxx
index f525614c6b49..2d29d7585922 100644
--- a/include/svx/svdmodel.hxx
+++ b/include/svx/svdmodel.hxx
@@ -175,7 +175,7 @@ protected:
int m_nUIUnitDecimalMark; // see above
std::unique_ptr<SdrLayerAdmin> m_pLayerAdmin;
- SfxItemPool* m_pItemPool;
+ rtl::Reference<SfxItemPool> m_pItemPool;
comphelper::IEmbeddedHelper*
m_pEmbeddedHelper; // helper for embedded objects to get rid of the SfxObjectShell
std::unique_ptr<SdrOutliner> m_pDrawOutliner; // an Outliner for outputting text
@@ -191,7 +191,7 @@ protected:
std::unique_ptr<std::deque<std::unique_ptr<SfxUndoAction>>> m_pRedoStack;
std::unique_ptr<SdrUndoGroup> m_pCurrentUndoGroup; // For multi-level
sal_uInt16 m_nUndoLevel; // undo nesting
- bool m_bMyPool:1; // to clean up pMyPool from 303a
+ bool m_bIsWriter:1; // to clean up pMyPool from 303a
bool mbUndoEnabled:1; // If false no undo is recorded or we are during the execution of an undo action
bool mbChanged:1;
bool m_bPagNumsDirty:1;
@@ -568,7 +568,7 @@ public:
std::unique_ptr<SdrOutliner> createOutliner( OutlinerMode nOutlinerMode );
void disposeOutliner( std::unique_ptr<SdrOutliner> pOutliner );
- bool IsWriter() const { return !m_bMyPool; }
+ bool IsWriter() const { return m_bIsWriter; }
// Used as a fallback in *::ReadUserDataSequence() to process common properties
void ReadUserDataSequenceValue(const css::beans::PropertyValue *pValue);
diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx
index ec72c9d39a41..0960826d2c63 100644
--- a/include/svx/svdobj.hxx
+++ b/include/svx/svdobj.hxx
@@ -964,9 +964,6 @@ private:
std::unique_ptr<sdr::contact::ViewContact>
mpViewContact;
- // global static ItemPool for not-yet-inserted items
- static SdrItemPool* mpGlobalItemPool;
-
// do not use directly, always use getSvxShape() if you have to!
SvxShape* mpSvxShape;
css::uno::WeakReference< css::uno::XInterface >
diff --git a/include/svx/svdpool.hxx b/include/svx/svdpool.hxx
index 54847e568cc9..95eea37c59c5 100644
--- a/include/svx/svdpool.hxx
+++ b/include/svx/svdpool.hxx
@@ -36,7 +36,7 @@ private:
virtual ~SdrItemPool() override;
public:
- virtual SdrItemPool* Clone() const override;
+ virtual rtl::Reference<SfxItemPool> Clone() const override;
virtual bool GetPresentation(const SfxPoolItem& rItem,
MapUnit ePresentationMetric,
OUString& rText,
diff --git a/include/svx/unopool.hxx b/include/svx/unopool.hxx
index d7736c36f7c2..96b9bc17956d 100644
--- a/include/svx/unopool.hxx
+++ b/include/svx/unopool.hxx
@@ -90,7 +90,7 @@ protected:
protected:
SdrModel* mpModel;
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> mpDefaultsPool;
+ rtl::Reference<SfxItemPool> mpDefaultsPool;
};
#endif
diff --git a/include/svx/xpool.hxx b/include/svx/xpool.hxx
index 26b27e10f0cd..e8fc6f5e7225 100644
--- a/include/svx/xpool.hxx
+++ b/include/svx/xpool.hxx
@@ -39,7 +39,7 @@ public:
XOutdevItemPool(SfxItemPool* pMaster);
XOutdevItemPool(const XOutdevItemPool& rPool);
- virtual SfxItemPool* Clone() const override;
+ virtual rtl::Reference<SfxItemPool> Clone() const override;
protected:
virtual ~XOutdevItemPool() override;
diff --git a/reportdesign/source/ui/misc/UITools.cxx b/reportdesign/source/ui/misc/UITools.cxx
index afa270e60664..773e4d24a034 100644
--- a/reportdesign/source/ui/misc/UITools.cxx
+++ b/reportdesign/source/ui/misc/UITools.cxx
@@ -727,7 +727,7 @@ bool openCharDialog( const uno::Reference<report::XReportControlFormat >& _rxRep
0
};
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> pPool(new SfxItemPool("ReportCharProperties", XATTR_FILL_FIRST,ITEMID_WEIGHT_COMPLEX, aItemInfos, &pDefaults));
+ rtl::Reference<SfxItemPool> pPool(new SfxItemPool("ReportCharProperties", XATTR_FILL_FIRST,ITEMID_WEIGHT_COMPLEX, aItemInfos, &pDefaults));
// not needed for font height pPool->SetDefaultMetric( MapUnit::Map100thMM ); // ripped, don't understand why
pPool->FreezeIdRanges(); // the same
bool bSuccess = false;
@@ -755,7 +755,7 @@ bool openCharDialog( const uno::Reference<report::XReportControlFormat >& _rxRep
DBG_UNHANDLED_EXCEPTION("reportdesign");
}
- pPool.reset();
+ pPool.clear();
for (SfxPoolItem* pDefault : pDefaults)
delete pDefault;
diff --git a/reportdesign/source/ui/report/ReportController.cxx b/reportdesign/source/ui/report/ReportController.cxx
index 6b7f10c377af..de4be54c181e 100644
--- a/reportdesign/source/ui/report/ReportController.cxx
+++ b/reportdesign/source/ui/report/ReportController.cxx
@@ -2369,7 +2369,7 @@ void OReportController::openPageDialog(const uno::Reference<report::XSection>& _
SID_ATTR_METRIC,SID_ATTR_METRIC,
0
};
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> pPool( new SfxItemPool("ReportPageProperties", RPTUI_ID_LRSPACE, RPTUI_ID_METRIC, aItemInfos ) );
+ rtl::Reference<SfxItemPool> pPool( new SfxItemPool("ReportPageProperties", RPTUI_ID_LRSPACE, RPTUI_ID_METRIC, aItemInfos ) );
const Graphic aNullGraphic;
const ::Color aNullLineCol(COL_DEFAULT_SHAPE_STROKE); // #i121448# Use defined default color
@@ -2513,7 +2513,7 @@ void OReportController::openPageDialog(const uno::Reference<report::XSection>& _
{
DBG_UNHANDLED_EXCEPTION("reportdesign");
}
- pPool.reset();
+ pPool.clear();
for (SfxPoolItem* pDefault : pDefaults)
delete pDefault;
@@ -4218,7 +4218,7 @@ void OReportController::openZoomDialog()
SID_ATTR_ZOOM,SID_ATTR_ZOOM,
0
};
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> pPool( new SfxItemPool("ZoomProperties", SID_ATTR_ZOOM,SID_ATTR_ZOOM, aItemInfos, &pDefaults) );
+ rtl::Reference<SfxItemPool> pPool( new SfxItemPool("ZoomProperties", SID_ATTR_ZOOM,SID_ATTR_ZOOM, aItemInfos, &pDefaults) );
pPool->SetDefaultMetric( MapUnit::Map100thMM ); // ripped, don't understand why
pPool->FreezeIdRanges(); // the same
try
@@ -4248,7 +4248,7 @@ void OReportController::openZoomDialog()
{
DBG_UNHANDLED_EXCEPTION("reportdesign");
}
- pPool.reset();
+ pPool.clear();
for (SfxPoolItem* pDefault : pDefaults)
delete pDefault;
diff --git a/sc/inc/docpool.hxx b/sc/inc/docpool.hxx
index 3622aa38a68e..9280fb3602b0 100644
--- a/sc/inc/docpool.hxx
+++ b/sc/inc/docpool.hxx
@@ -37,7 +37,7 @@ private:
virtual ~ScDocumentPool() override;
public:
- virtual SfxItemPool* Clone() const override;
+ virtual rtl::Reference<SfxItemPool> Clone() const override;
virtual MapUnit GetMetric( sal_uInt16 nWhich ) const override;
void StyleDeleted( const ScStyleSheet* pStyle ); // delete templates(?) in organizer
diff --git a/sc/inc/editutil.hxx b/sc/inc/editutil.hxx
index 53664009b428..efec08dfdbc5 100644
--- a/sc/inc/editutil.hxx
+++ b/sc/inc/editutil.hxx
@@ -108,7 +108,7 @@ public:
class ScEnginePoolHelper
{
protected:
- SfxItemPool* pEnginePool;
+ rtl::Reference<SfxItemPool> pEnginePool;
SfxItemSet* pDefaults;
bool bDeleteEnginePool;
bool bDeleteDefaults;
diff --git a/sc/inc/scmod.hxx b/sc/inc/scmod.hxx
index 6847142a09a9..8f2a1b34ea8f 100644
--- a/sc/inc/scmod.hxx
+++ b/sc/inc/scmod.hxx
@@ -82,7 +82,7 @@ class SAL_DLLPUBLIC_RTTI ScModule final : public SfxModule, public SfxListener,
Timer m_aIdleTimer;
std::unique_ptr<ScDragData> m_pDragData;
ScSelectionTransferObj* m_pSelTransfer;
- std::unique_ptr<ScMessagePool, SfxItemPoolDeleter> m_pMessagePool;
+ rtl::Reference<ScMessagePool> m_pMessagePool;
// there is no global InputHandler anymore, each View has its own
ScInputHandler* m_pRefInputHandler;
std::unique_ptr<ScViewCfg, o3tl::default_delete<ScViewCfg>> m_pViewCfg;
diff --git a/sc/source/core/data/attrib.cxx b/sc/source/core/data/attrib.cxx
index 0466ac44f7d9..fc83491845bb 100644
--- a/sc/source/core/data/attrib.cxx
+++ b/sc/source/core/data/attrib.cxx
@@ -431,7 +431,7 @@ bool ScPageHFItem::PutValue( const uno::Any& rVal, sal_uInt8 /* nMemberId */ )
if ( !pLeftArea || !pCenterArea || !pRightArea )
{
// no Text with Null are left
- ScEditEngineDefaulter aEngine( EditEngine::CreatePool(), true );
+ ScEditEngineDefaulter aEngine( EditEngine::CreatePool().get(), true );
if (!pLeftArea)
pLeftArea = aEngine.CreateTextObject();
if (!pCenterArea)
diff --git a/sc/source/core/data/docpool.cxx b/sc/source/core/data/docpool.cxx
index 0a96c3b4ee5d..628c3686e2d0 100644
--- a/sc/source/core/data/docpool.cxx
+++ b/sc/source/core/data/docpool.cxx
@@ -376,7 +376,7 @@ void ScDocumentPool::CellStyleCreated( std::u16string_view rName, const ScDocume
}
}
-SfxItemPool* ScDocumentPool::Clone() const
+rtl::Reference<SfxItemPool> ScDocumentPool::Clone() const
{
return new SfxItemPool (*this, true);
}
diff --git a/sc/source/core/data/poolhelp.cxx b/sc/source/core/data/poolhelp.cxx
index 2091bf167d9c..bd27a96c46cb 100644
--- a/sc/source/core/data/poolhelp.cxx
+++ b/sc/source/core/data/poolhelp.cxx
@@ -37,27 +37,29 @@ ScPoolHelper::ScPoolHelper( ScDocument& rSourceDoc )
ScPoolHelper::~ScPoolHelper()
{
- pEnginePool.reset();
- pEditPool.reset();
+ pEnginePool.clear();
+ pEditPool.clear();
pFormTable.reset();
mxStylePool.clear();
- pDocPool.reset();
+ pDocPool.clear();
}
-SfxItemPool* ScPoolHelper::GetEditPool() const
+
+SfxItemPool* ScPoolHelper::GetEditPool() const
{
if ( !pEditPool )
{
- pEditPool.reset(EditEngine::CreatePool());
+ pEditPool = EditEngine::CreatePool();
pEditPool->SetDefaultMetric( MapUnit::Map100thMM );
pEditPool->FreezeIdRanges();
}
return pEditPool.get();
}
-SfxItemPool* ScPoolHelper::GetEnginePool() const
+
+SfxItemPool* ScPoolHelper::GetEnginePool() const
{
if ( !pEnginePool )
{
- pEnginePool.reset(EditEngine::CreatePool());
+ pEnginePool = EditEngine::CreatePool();
pEnginePool->SetDefaultMetric( MapUnit::Map100thMM );
pEnginePool->FreezeIdRanges();
} // ifg ( pEnginePool )
diff --git a/sc/source/core/data/stlpool.cxx b/sc/source/core/data/stlpool.cxx
index b4074c1773b5..8248218b14c3 100644
--- a/sc/source/core/data/stlpool.cxx
+++ b/sc/source/core/data/stlpool.cxx
@@ -218,7 +218,7 @@ void ScStyleSheetPool::CreateStandardStyles()
SfxItemSet* pSet = nullptr;
SfxItemSet* pHFSet = nullptr;
SvxSetItem* pHFSetItem = nullptr;
- std::unique_ptr<ScEditEngineDefaulter> pEdEngine(new ScEditEngineDefaulter( EditEngine::CreatePool(), true ));
+ std::unique_ptr<ScEditEngineDefaulter> pEdEngine(new ScEditEngineDefaulter( EditEngine::CreatePool().get(), true ));
pEdEngine->SetUpdateMode( false );
std::unique_ptr<EditTextObject> pEmptyTxtObj = pEdEngine->CreateTextObject();
std::unique_ptr<EditTextObject> pTxtObj;
diff --git a/sc/source/core/inc/poolhelp.hxx b/sc/source/core/inc/poolhelp.hxx
index 267d60ea8eeb..ad725fcf82d8 100644
--- a/sc/source/core/inc/poolhelp.hxx
+++ b/sc/source/core/inc/poolhelp.hxx
@@ -36,11 +36,11 @@ class ScPoolHelper final : public salhelper::SimpleReferenceObject
private:
mutable osl::Mutex maMtxCreateNumFormatter;
ScDocOptions aOpt;
- std::unique_ptr<ScDocumentPool, SfxItemPoolDeleter> pDocPool;
+ rtl::Reference<ScDocumentPool> pDocPool;
rtl::Reference< ScStyleSheetPool > mxStylePool;
mutable std::unique_ptr<SvNumberFormatter> pFormTable;
- mutable std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> pEditPool; // EditTextObjectPool
- mutable std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> pEnginePool; // EditEnginePool
+ mutable rtl::Reference<SfxItemPool> pEditPool; // EditTextObjectPool
+ mutable rtl::Reference<SfxItemPool> pEnginePool; // EditEnginePool
ScDocument& m_rSourceDoc;
public:
diff --git a/sc/source/core/tool/editutil.cxx b/sc/source/core/tool/editutil.cxx
index c567e36b7b55..b47c2bd7ee39 100644
--- a/sc/source/core/tool/editutil.cxx
+++ b/sc/source/core/tool/editutil.cxx
@@ -510,8 +510,6 @@ ScEnginePoolHelper::~ScEnginePoolHelper()
{
if ( bDeleteDefaults )
delete pDefaults;
- if ( bDeleteEnginePool )
- SfxItemPool::Free(pEnginePool);
}
ScEditEngineDefaulter::ScEditEngineDefaulter( SfxItemPool* pEnginePoolP,
@@ -529,7 +527,7 @@ ScEditEngineDefaulter::ScEditEngineDefaulter( SfxItemPool* pEnginePoolP,
ScEditEngineDefaulter::ScEditEngineDefaulter( const ScEditEngineDefaulter& rOrg )
:
ScEnginePoolHelper( rOrg ),
- EditEngine( pEnginePool )
+ EditEngine( pEnginePool.get() )
{
SetDefaultLanguage( ScGlobal::GetEditDefaultLanguage() );
}
diff --git a/sc/source/filter/excel/xlroot.cxx b/sc/source/filter/excel/xlroot.cxx
index 7bc880988549..c232b6082b2f 100644
--- a/sc/source/filter/excel/xlroot.cxx
+++ b/sc/source/filter/excel/xlroot.cxx
@@ -372,7 +372,7 @@ ScHeaderEditEngine& XclRoot::GetHFEditEngine() const
{
if( !mrData.mxHFEditEngine )
{
- mrData.mxHFEditEngine = std::make_shared<ScHeaderEditEngine>( EditEngine::CreatePool() );
+ mrData.mxHFEditEngine = std::make_shared<ScHeaderEditEngine>( EditEngine::CreatePool().get() );
ScHeaderEditEngine& rEE = *mrData.mxHFEditEngine;
rEE.SetRefMapMode(MapMode(MapUnit::MapTwip)); // headers/footers use twips as default metric
rEE.SetUpdateMode( false );
diff --git a/sc/source/filter/inc/eeparser.hxx b/sc/source/filter/inc/eeparser.hxx
index c691ca3abb9d..190caa4ec14e 100644
--- a/sc/source/filter/inc/eeparser.hxx
+++ b/sc/source/filter/inc/eeparser.hxx
@@ -100,8 +100,8 @@ class ScEEParser
{
protected:
EditEngine* pEdit;
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> pPool;
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> pDocPool;
+ rtl::Reference<SfxItemPool> pPool;
+ rtl::Reference<SfxItemPool> pDocPool;
std::vector<std::shared_ptr<ScEEParseEntry>> maList;
std::shared_ptr<ScEEParseEntry> mxActEntry;
ColWidthsMap maColWidths;
diff --git a/sc/source/filter/rtf/eeimpars.cxx b/sc/source/filter/rtf/eeimpars.cxx
index 6511a806e295..b4aee6644918 100644
--- a/sc/source/filter/rtf/eeimpars.cxx
+++ b/sc/source/filter/rtf/eeimpars.cxx
@@ -637,8 +637,8 @@ ScEEParser::~ScEEParser()
// Don't delete Pool until the lists have been deleted
pPool->SetSecondaryPool( nullptr );
- pDocPool.reset();
- pPool.reset();
+ pDocPool.clear();
+ pPool.clear();
}
void ScEEParser::NewActEntry( const ScEEParseEntry* pE )
diff --git a/sc/source/filter/xml/xmlfonte.cxx b/sc/source/filter/xml/xmlfonte.cxx
index 9b2ee6286b01..76782d1f6dae 100644
--- a/sc/source/filter/xml/xmlfonte.cxx
+++ b/sc/source/filter/xml/xmlfonte.cxx
@@ -36,7 +36,7 @@ class ScXMLFontAutoStylePool_Impl: public XMLFontAutoStylePool
{
private:
// #i120077# remember owned pool
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> mpEditEnginePool;
+ rtl::Reference<SfxItemPool> mpEditEnginePool;
void AddFontItems(const sal_uInt16* pWhichIds, sal_uInt8 nIdCount, const SfxItemPool* pItemPool, const bool bExportDefaults);
@@ -101,7 +101,7 @@ ScXMLFontAutoStylePool_Impl::ScXMLFontAutoStylePool_Impl(ScXMLExport& rExportP,
// #i120077# remember the SfxItemPool in member variable before usage. The
// local EditEngine will not take over ownership of the pool.
- mpEditEnginePool.reset(EditEngine::CreatePool());
+ mpEditEnginePool = EditEngine::CreatePool();
EditEngine aEditEngine(mpEditEnginePool.get());
while (pStyle)
diff --git a/sc/source/ui/Accessibility/AccessibleText.cxx b/sc/source/ui/Accessibility/AccessibleText.cxx
index 31f8586e1054..54f8f15f49fc 100644
--- a/sc/source/ui/Accessibility/AccessibleText.cxx
+++ b/sc/source/ui/Accessibility/AccessibleText.cxx
@@ -816,9 +816,9 @@ SvxTextForwarder* ScAccessibleEditLineTextData::GetTextForwarder()
ResetEditMode();
if (!mpEditEngine)
{
- SfxItemPool* pEnginePool = EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pEnginePool = EditEngine::CreatePool();
pEnginePool->FreezeIdRanges();
- mpEditEngine = new ScFieldEditEngine(nullptr, pEnginePool, nullptr, true);
+ mpEditEngine = new ScFieldEditEngine(nullptr, pEnginePool.get(), nullptr, true);
mbEditEngineCreated = true;
mpEditEngine->EnableUndo( false );
mpEditEngine->SetRefMapMode(MapMode(MapUnit::Map100thMM));
@@ -1020,9 +1020,9 @@ SvxTextForwarder* ScAccessiblePreviewHeaderCellTextData::GetTextForwarder()
}
else
{
- SfxItemPool* pEnginePool = EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pEnginePool = EditEngine::CreatePool();
pEnginePool->FreezeIdRanges();
- pEditEngine.reset( new ScFieldEditEngine(nullptr, pEnginePool, nullptr, true) );
+ pEditEngine.reset( new ScFieldEditEngine(nullptr, pEnginePool.get(), nullptr, true) );
}
pEditEngine->EnableUndo( false );
if (pDocShell)
@@ -1122,9 +1122,9 @@ SvxTextForwarder* ScAccessibleHeaderTextData::GetTextForwarder()
{
if (!mpEditEngine)
{
- SfxItemPool* pEnginePool = EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pEnginePool = EditEngine::CreatePool();
pEnginePool->FreezeIdRanges();
- std::unique_ptr<ScHeaderEditEngine> pHdrEngine(new ScHeaderEditEngine( pEnginePool ));
+ std::unique_ptr<ScHeaderEditEngine> pHdrEngine(new ScHeaderEditEngine( pEnginePool.get() ));
pHdrEngine->EnableUndo( false );
pHdrEngine->SetRefMapMode(MapMode(MapUnit::MapTwip));
@@ -1237,9 +1237,9 @@ SvxTextForwarder* ScAccessibleNoteTextData::GetTextForwarder()
}
else
{
- SfxItemPool* pEnginePool = EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pEnginePool = EditEngine::CreatePool();
pEnginePool->FreezeIdRanges();
- mpEditEngine.reset( new ScFieldEditEngine(nullptr, pEnginePool, nullptr, true) );
+ mpEditEngine.reset( new ScFieldEditEngine(nullptr, pEnginePool.get(), nullptr, true) );
}
mpEditEngine->EnableUndo( false );
if (mpDocSh)
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index 69b6142d702f..ff6459f2ee7c 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -872,7 +872,7 @@ void ScInputHandler::ImplCreateEditEngine()
mpEditEngine = std::make_unique<ScFieldEditEngine>(&rDoc, rDoc.GetEnginePool(), rDoc.GetEditPool());
}
else
- mpEditEngine = std::make_unique<ScFieldEditEngine>(nullptr, EditEngine::CreatePool(), nullptr, true);
+ mpEditEngine = std::make_unique<ScFieldEditEngine>(nullptr, EditEngine::CreatePool().get(), nullptr, true);
mpEditEngine->SetWordDelimiters( ScEditUtil::ModifyDelimiters( mpEditEngine->GetWordDelimiters() ) );
UpdateRefDevice(); // also sets MapMode
diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx
index 670ccf6e9e06..a571d32fe0d7 100644
--- a/sc/source/ui/app/inputwin.cxx
+++ b/sc/source/ui/app/inputwin.cxx
@@ -1485,7 +1485,7 @@ void ScTextWnd::InitEditEngine()
pNew = std::make_unique<ScFieldEditEngine>(&rDoc, rDoc.GetEnginePool(), rDoc.GetEditPool());
}
else
- pNew = std::make_unique<ScFieldEditEngine>(nullptr, EditEngine::CreatePool(), nullptr, true);
+ pNew = std::make_unique<ScFieldEditEngine>(nullptr, EditEngine::CreatePool().get(), nullptr, true);
pNew->SetExecuteURL( false );
m_xEditEngine = std::move(pNew);
@@ -1988,7 +1988,7 @@ void ScTextWnd::MakeDialogEditView()
pNew = std::make_unique<ScFieldEditEngine>(&rDoc, rDoc.GetEnginePool(), rDoc.GetEditPool());
}
else
- pNew = std::make_unique<ScFieldEditEngine>(nullptr, EditEngine::CreatePool(), nullptr, true);
+ pNew = std::make_unique<ScFieldEditEngine>(nullptr, EditEngine::CreatePool().get(), nullptr, true);
pNew->SetExecuteURL( false );
m_xEditEngine = std::move(pNew);
diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx
index 59ac6be2b17d..d8a25bd3a152 100644
--- a/sc/source/ui/app/scmod.cxx
+++ b/sc/source/ui/app/scmod.cxx
@@ -145,7 +145,7 @@ ScModule::ScModule( SfxObjectFactory* pFact ) :
m_aIdleTimer.SetInvokeHandler( LINK( this, ScModule, IdleHandler ) );
m_aIdleTimer.Start();
- m_pMessagePool.reset(new ScMessagePool);
+ m_pMessagePool = new ScMessagePool;
m_pMessagePool->FreezeIdRanges();
SetPool( m_pMessagePool.get() );
ScGlobal::InitTextHeight( m_pMessagePool.get() );
@@ -159,7 +159,7 @@ ScModule::~ScModule()
// InputHandler does not need to be deleted (there's none in the App anymore)
- m_pMessagePool.reset();
+ m_pMessagePool.clear();
m_pDragData.reset();
m_pErrorHdl.reset();
diff --git a/sc/source/ui/dbgui/csvgrid.cxx b/sc/source/ui/dbgui/csvgrid.cxx
index a732039c788f..1d05d38f1d3f 100644
--- a/sc/source/ui/dbgui/csvgrid.cxx
+++ b/sc/source/ui/dbgui/csvgrid.cxx
@@ -77,7 +77,7 @@ ScCsvGrid::ScCsvGrid(const ScCsvLayoutData& rData, std::unique_ptr<weld::Menu> x
, mpGridDev( VclPtr<VirtualDevice>::Create() )
, mxPopup(std::move(xPopup))
, mpColorConfig( nullptr )
- , mpEditEngine( new ScEditEngineDefaulter( EditEngine::CreatePool(), true ) )
+ , mpEditEngine( new ScEditEngineDefaulter( EditEngine::CreatePool().get(), true ) )
, maColStates( 1 )
, maTypeNames( 1 )
, mnFirstImpLine( 0 )
diff --git a/sc/source/ui/inc/msgpool.hxx b/sc/source/ui/inc/msgpool.hxx
index b9a430d6ae4f..926fb38bf158 100644
--- a/sc/source/ui/inc/msgpool.hxx
+++ b/sc/source/ui/inc/msgpool.hxx
@@ -43,7 +43,7 @@ class ScMessagePool final : public SfxItemPool
ScCondFormatDlgItem aCondFormatDlgItem;
std::vector<SfxPoolItem*> mvPoolDefaults;
- std::unique_ptr<ScDocumentPool, SfxItemPoolDeleter> pDocPool;
+ rtl::Reference<ScDocumentPool> pDocPool;
public:
ScMessagePool();
diff --git a/sc/source/ui/pagedlg/tphfedit.cxx b/sc/source/ui/pagedlg/tphfedit.cxx
index 932b635fe37a..403d6148454a 100644
--- a/sc/source/ui/pagedlg/tphfedit.cxx
+++ b/sc/source/ui/pagedlg/tphfedit.cxx
@@ -64,7 +64,7 @@ ScEditWindow::ScEditWindow(ScEditWindowLocation eLoc, weld::Window* pDialog)
void ScEditWindow::makeEditEngine()
{
- m_xEditEngine.reset(new ScHeaderEditEngine(EditEngine::CreatePool()));
+ m_xEditEngine.reset(new ScHeaderEditEngine(EditEngine::CreatePool().get()));
}
ScHeaderEditEngine* ScEditWindow::GetEditEngine() const
diff --git a/sc/source/ui/unoobj/editsrc.cxx b/sc/source/ui/unoobj/editsrc.cxx
index 6b3fa37447e6..231f080fa9da 100644
--- a/sc/source/ui/unoobj/editsrc.cxx
+++ b/sc/source/ui/unoobj/editsrc.cxx
@@ -141,9 +141,9 @@ SvxTextForwarder* ScAnnotationEditSource::GetTextForwarder()
}
else
{
- SfxItemPool* pEnginePool = EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pEnginePool = EditEngine::CreatePool();
pEnginePool->FreezeIdRanges();
- pEditEngine.reset( new ScEditEngineDefaulter( pEnginePool, true ) );
+ pEditEngine.reset( new ScEditEngineDefaulter( pEnginePool.get(), true ) );
}
pForwarder.reset( new SvxEditEngineForwarder(*pEditEngine) );
}
diff --git a/sc/source/ui/unoobj/textuno.cxx b/sc/source/ui/unoobj/textuno.cxx
index d04a2647db76..27c46f7513c2 100644
--- a/sc/source/ui/unoobj/textuno.cxx
+++ b/sc/source/ui/unoobj/textuno.cxx
@@ -185,9 +185,9 @@ SvxTextForwarder* ScHeaderFooterTextData::GetTextForwarder()
{
if (!pEditEngine)
{
- SfxItemPool* pEnginePool = EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pEnginePool = EditEngine::CreatePool();
pEnginePool->FreezeIdRanges();
- std::unique_ptr<ScHeaderEditEngine> pHdrEngine(new ScHeaderEditEngine( pEnginePool ));
+ std::unique_ptr<ScHeaderEditEngine> pHdrEngine(new ScHeaderEditEngine( pEnginePool.get() ));
pHdrEngine->EnableUndo( false );
pHdrEngine->SetRefMapMode(MapMode(MapUnit::MapTwip));
@@ -330,7 +330,7 @@ OUString SAL_CALL ScHeaderFooterTextObj::getString()
if (pData)
{
// for pure text, no font info is needed in pool defaults
- ScHeaderEditEngine aEditEngine( EditEngine::CreatePool() );
+ ScHeaderEditEngine aEditEngine( EditEngine::CreatePool().get() );
ScHeaderFieldData aData;
FillDummyFieldData( aData );
@@ -347,7 +347,7 @@ void SAL_CALL ScHeaderFooterTextObj::setString( const OUString& aText )
SolarMutexGuard aGuard;
// for pure text, no font info is needed in pool defaults
- ScHeaderEditEngine aEditEngine(EditEngine::CreatePool());
+ ScHeaderEditEngine aEditEngine(EditEngine::CreatePool().get());
aEditEngine.SetTextCurrentDefaults( aText );
aTextData.UpdateData(aEditEngine);
}
@@ -700,11 +700,11 @@ UNO3_GETIMPLEMENTATION2_IMPL(ScDrawTextCursor, SvxUnoTextCursor);
ScSimpleEditSourceHelper::ScSimpleEditSourceHelper()
{
- SfxItemPool* pEnginePool = EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pEnginePool = EditEngine::CreatePool();
pEnginePool->SetDefaultMetric( MapUnit::Map100thMM );
pEnginePool->FreezeIdRanges();
- pEditEngine.reset( new ScFieldEditEngine(nullptr, pEnginePool, nullptr, true) ); // TRUE: become owner of pool
+ pEditEngine.reset( new ScFieldEditEngine(nullptr, pEnginePool.get(), nullptr, true) ); // TRUE: become owner of pool
pForwarder.reset( new SvxEditEngineForwarder( *pEditEngine ) );
pOriginalSource.reset( new ScSimpleEditSource( pForwarder.get() ) );
}
@@ -788,9 +788,9 @@ SvxTextForwarder* ScCellTextData::GetTextForwarder()
}
else
{
- SfxItemPool* pEnginePool = EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pEnginePool = EditEngine::CreatePool();
pEnginePool->FreezeIdRanges();
- pEditEngine.reset( new ScFieldEditEngine(nullptr, pEnginePool, nullptr, true) );
+ pEditEngine.reset( new ScFieldEditEngine(nullptr, pEnginePool.get(), nullptr, true) );
}
// currently, GetPortions doesn't work if UpdateMode is sal_False,
// this will be fixed (in EditEngine) by src600
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index d12ccee4f779..bfee8d45eb15 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -1662,7 +1662,7 @@ void ScGridWindow::DrawPagePreview( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2,
else
{
// use EditEngine to draw mixed-script string
- pEditEng.reset(new ScEditEngineDefaulter( EditEngine::CreatePool(), true ));
+ pEditEng.reset(new ScEditEngineDefaulter( EditEngine::CreatePool().get(), true ));
pEditEng->SetRefMapMode(rRenderContext.GetMapMode());
auto pEditDefaults = std::make_unique<SfxItemSet>( pEditEng->GetEmptyItemSet() );
rDefPattern.FillEditItemSet( pEditDefaults.get() );
diff --git a/sc/source/ui/view/preview.cxx b/sc/source/ui/view/preview.cxx
index e07511ccd907..b4b5e4d3ea80 100644
--- a/sc/source/ui/view/preview.cxx
+++ b/sc/source/ui/view/preview.cxx
@@ -505,7 +505,7 @@ void ScPreview::DoPrint( ScPreviewLocationData* pFillLocation )
rDoc.GetPool()->GetDefaultItem(ATTR_PATTERN);
std::unique_ptr<ScEditEngineDefaulter> pEditEng(
- new ScEditEngineDefaulter(EditEngine::CreatePool(), true));
+ new ScEditEngineDefaulter(EditEngine::CreatePool().get(), true));
pEditEng->SetRefMapMode(aMMMode);
auto pEditDefaults = std::make_unique<SfxItemSet>( pEditEng->GetEmptyItemSet() );
diff --git a/sc/source/ui/view/printfun.cxx b/sc/source/ui/view/printfun.cxx
index 3828c031cc3c..128f726d1c76 100644
--- a/sc/source/ui/view/printfun.cxx
+++ b/sc/source/ui/view/printfun.cxx
@@ -1701,7 +1701,7 @@ void ScPrintFunc::MakeEditEngine()
{
// can't use document's edit engine pool here,
// because pool must have twips as default metric
- pEditEngine.reset( new ScHeaderEditEngine( EditEngine::CreatePool() ) );
+ pEditEngine.reset( new ScHeaderEditEngine( EditEngine::CreatePool().get() ) );
pEditEngine->EnableUndo(false);
//fdo#45869 we want text to be positioned as it would be for the
diff --git a/sd/source/ui/annotations/annotationmanager.cxx b/sd/source/ui/annotations/annotationmanager.cxx
index a5892787be85..d1986d4309c1 100644
--- a/sd/source/ui/annotations/annotationmanager.cxx
+++ b/sd/source/ui/annotations/annotationmanager.cxx
@@ -99,8 +99,8 @@ namespace sd {
SfxItemPool* GetAnnotationPool()
{
- static SfxItemPool* s_pAnnotationPool = nullptr;
- if( s_pAnnotationPool == nullptr )
+ static rtl::Reference<SfxItemPool> s_pAnnotationPool;
+ if( !s_pAnnotationPool )
{
s_pAnnotationPool = EditEngine::CreatePool();
s_pAnnotationPool->SetPoolDefaultItem(SvxFontHeightItem(423,100,EE_CHAR_FONTHEIGHT));
@@ -109,7 +109,7 @@ SfxItemPool* GetAnnotationPool()
s_pAnnotationPool->SetPoolDefaultItem(SvxFontItem(aAppFont.GetFamilyType(),aAppFont.GetFamilyName(),"",PITCH_DONTKNOW,RTL_TEXTENCODING_DONTKNOW,EE_CHAR_FONTINFO));
}
- return s_pAnnotationPool;
+ return s_pAnnotationPool.get();
}
static SfxBindings* getBindings( ViewShellBase const & rBase )
diff --git a/sd/source/ui/presenter/PresenterTextView.cxx b/sd/source/ui/presenter/PresenterTextView.cxx
index c55547c150d2..6f3b9f93b97e 100644
--- a/sd/source/ui/presenter/PresenterTextView.cxx
+++ b/sd/source/ui/presenter/PresenterTextView.cxx
@@ -79,7 +79,7 @@ private:
cppcanvas::CanvasSharedPtr mpCanvas;
VclPtr<VirtualDevice> mpOutputDevice;
std::unique_ptr<EditEngine> mpEditEngine;
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> mpEditEngineItemPool;
+ rtl::Reference<SfxItemPool> mpEditEngineItemPool;
Size maSize;
OUString msText;
sal_Int32 mnTop;
@@ -279,7 +279,7 @@ PresenterTextView::Implementation::Implementation()
PresenterTextView::Implementation::~Implementation()
{
mpEditEngine.reset();
- mpEditEngineItemPool.reset();
+ mpEditEngineItemPool.clear();
mpOutputDevice.disposeAndClear();
}
diff --git a/starmath/CppunitTest_starmath_qa_cppunit.mk b/starmath/CppunitTest_starmath_qa_cppunit.mk
index 6926c34ac0a7..07de25e48a08 100644
--- a/starmath/CppunitTest_starmath_qa_cppunit.mk
+++ b/starmath/CppunitTest_starmath_qa_cppunit.mk
@@ -32,6 +32,7 @@ $(eval $(call gb_CppunitTest_use_libraries,starmath_qa_cppunit,\
msfilter \
oox \
sal \
+ salhelper \
sax \
sfx \
sot \
diff --git a/starmath/Library_sm.mk b/starmath/Library_sm.mk
index 0c27c07bc2a4..d5d3657f2120 100644
--- a/starmath/Library_sm.mk
+++ b/starmath/Library_sm.mk
@@ -48,6 +48,7 @@ $(eval $(call gb_Library_use_libraries,sm,\
msfilter \
oox \
sal \
+ salhelper \
sax \
sfx \
sot \
diff --git a/starmath/inc/document.hxx b/starmath/inc/document.hxx
index cf52f4497e5b..2c3a9183bf87 100644
--- a/starmath/inc/document.hxx
+++ b/starmath/inc/document.hxx
@@ -81,7 +81,7 @@ class SM_DLLPUBLIC SmDocShell : public SfxObjectShell, public SfxListener
OUString maAccText;
SvtLinguOptions maLinguOptions;
std::unique_ptr<SmTableNode> mpTree;
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> mpEditEngineItemPool;
+ rtl::Reference<SfxItemPool> mpEditEngineItemPool;
std::unique_ptr<EditEngine> mpEditEngine;
VclPtr<SfxPrinter> mpPrinter; //q.v. comment to SmPrinter Access!
VclPtr<Printer> mpTmpPrinter; //ditto
diff --git a/starmath/source/document.cxx b/starmath/source/document.cxx
index 5dd69cf62944..09078d11f94d 100644
--- a/starmath/source/document.cxx
+++ b/starmath/source/document.cxx
@@ -353,7 +353,7 @@ EditEngine& SmDocShell::GetEditEngine()
//! see also SmEditWindow::DataChanged !
//!
- mpEditEngineItemPool.reset( EditEngine::CreatePool() );
+ mpEditEngineItemPool = EditEngine::CreatePool();
const StyleSettings& rStyleSettings = Application::GetDefaultDevice()->GetSettings().GetStyleSettings();
UpdateEditEngineDefaultFonts(rStyleSettings.GetFieldTextColor());
@@ -659,7 +659,7 @@ SmDocShell::~SmDocShell()
mpCursor.reset();
mpEditEngine.reset();
- mpEditEngineItemPool.reset();
+ mpEditEngineItemPool.clear();
mpPrinter.disposeAndClear();
}
diff --git a/svl/CppunitTest_svl_itempool.mk b/svl/CppunitTest_svl_itempool.mk
index 63745dd4312a..892107e906ca 100644
--- a/svl/CppunitTest_svl_itempool.mk
+++ b/svl/CppunitTest_svl_itempool.mk
@@ -21,6 +21,7 @@ $(eval $(call gb_CppunitTest_use_libraries,svl_itempool, \
svl \
comphelper \
sal \
+ salhelper \
cppu \
cppuhelper \
))
diff --git a/svl/CppunitTest_svl_items.mk b/svl/CppunitTest_svl_items.mk
index 28e8772d71ad..60bccd8a5852 100644
--- a/svl/CppunitTest_svl_items.mk
+++ b/svl/CppunitTest_svl_items.mk
@@ -22,6 +22,7 @@ $(eval $(call gb_CppunitTest_use_libraries,svl_items, \
svl \
comphelper \
sal \
+ salhelper \
cppu \
cppuhelper \
))
diff --git a/svl/Library_svl.mk b/svl/Library_svl.mk
index 19b9d9f8b940..a4e41b6f9984 100644
--- a/svl/Library_svl.mk
+++ b/svl/Library_svl.mk
@@ -73,6 +73,7 @@ $(eval $(call gb_Library_use_libraries,svl,\
$(if $(ENABLE_JAVA), \
jvmfwk) \
sal \
+ salhelper \
sot \
tl \
ucbhelper \
diff --git a/svl/qa/unit/items/stylepool.cxx b/svl/qa/unit/items/stylepool.cxx
index c334360f5e3f..5fb94f29f9cd 100644
--- a/svl/qa/unit/items/stylepool.cxx
+++ b/svl/qa/unit/items/stylepool.cxx
@@ -28,7 +28,7 @@ CPPUNIT_TEST_FIXTURE(StylePoolTest, testIterationOrder)
std::vector<SfxPoolItem*> aDefaults{ &aDefault1 };
SfxItemInfo const aItems[] = { { 1, false } };
- SfxItemPool* pPool = new SfxItemPool("test", 1, 1, aItems);
+ rtl::Reference<SfxItemPool> pPool = new SfxItemPool("test", 1, 1, aItems);
pPool->SetDefaults(&aDefaults);
{
// Set up parents in mixed order to make sure we do not sort by pointer address.
@@ -76,7 +76,6 @@ CPPUNIT_TEST_FIXTURE(StylePoolTest, testIterationOrder)
CPPUNIT_ASSERT_EQUAL(OUString("Item3"), pItem3->GetValue());
CPPUNIT_ASSERT(!pIter->getNext());
}
- SfxItemPool::Free(pPool);
}
}
diff --git a/svl/qa/unit/items/test_itempool.cxx b/svl/qa/unit/items/test_itempool.cxx
index fc19eec64752..4d15edaffd86 100644
--- a/svl/qa/unit/items/test_itempool.cxx
+++ b/svl/qa/unit/items/test_itempool.cxx
@@ -40,8 +40,8 @@ void PoolItemTest::testPool()
{ 4, false /* not poolable */}
};
- SfxItemPool *pPool = new SfxItemPool("testpool", 1, 4, aItems);
- SfxItemPool_Impl *pImpl = SfxItemPool_Impl::GetImpl(pPool);
+ rtl::Reference<SfxItemPool> pPool = new SfxItemPool("testpool", 1, 4, aItems);
+ SfxItemPool_Impl *pImpl = SfxItemPool_Impl::GetImpl(pPool.get());
CPPUNIT_ASSERT(pImpl != nullptr);
CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), pImpl->maPoolItemArrays.size());
@@ -91,7 +91,6 @@ void PoolItemTest::testPool()
pPool->Put(aNotherFour);
CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), pImpl->maPoolItemArrays[3].size());
- SfxItemPool::Free(pPool);
}
diff --git a/svl/source/inc/poolio.hxx b/svl/source/inc/poolio.hxx
index d5da51bc2d99..3ec1be562a01 100644
--- a/svl/source/inc/poolio.hxx
+++ b/svl/source/inc/poolio.hxx
@@ -20,6 +20,7 @@
#ifndef INCLUDED_SVL_SOURCE_INC_POOLIO_HXX
#define INCLUDED_SVL_SOURCE_INC_POOLIO_HXX
+#include <rtl/ref.hxx>
#include <svl/itempool.hxx>
#include <svl/SfxBroadcaster.hxx>
#include <tools/debug.hxx>
@@ -151,12 +152,11 @@ struct SfxItemPool_Impl
{
SfxBroadcaster aBC;
std::vector<SfxPoolItemArray_Impl> maPoolItemArrays;
- std::vector<SfxItemPoolUser*> maSfxItemPoolUsers; /// ObjectUser section
OUString aName;
std::vector<SfxPoolItem*> maPoolDefaults;
std::vector<SfxPoolItem*>* mpStaticDefaults;
SfxItemPool* mpMaster;
- SfxItemPool* mpSecondary;
+ rtl::Reference<SfxItemPool> mpSecondary;
std::unique_ptr<sal_uInt16[]> mpPoolRanges;
sal_uInt16 mnStart;
sal_uInt16 mnEnd;
@@ -168,7 +168,6 @@ struct SfxItemPool_Impl
, maPoolDefaults(nEnd - nStart + 1)
, mpStaticDefaults(nullptr)
, mpMaster(pMaster)
- , mpSecondary(nullptr)
, mnStart(nStart)
, mnEnd(nEnd)
, eDefMetric(MapUnit::MapCM)
diff --git a/svl/source/items/itempool.cxx b/svl/source/items/itempool.cxx
index 24fda80d1bfe..20d0dcaca68e 100644
--- a/svl/source/items/itempool.cxx
+++ b/svl/source/items/itempool.cxx
@@ -73,7 +73,7 @@ lcl_CheckSlots2(std::map<sal_uInt16, sal_uInt16> & rSlotMap,
#define CHECK_SLOTS() \
do { \
std::map<sal_uInt16, sal_uInt16> slotmap; \
- for (SfxItemPool * p = pImpl->mpMaster; p; p = p->pImpl->mpSecondary) \
+ for (SfxItemPool * p = pImpl->mpMaster; p; p = p->pImpl->mpSecondary.get()) \
{ \
lcl_CheckSlots2(slotmap, *p, p->pItemInfos); \
} \
@@ -84,24 +84,6 @@ do { \
#endif
-void SfxItemPool::AddSfxItemPoolUser(SfxItemPoolUser& rNewUser)
-{
- // maintain sorted to reduce cost of remove
- const auto insertIt = ::std::lower_bound(
- pImpl->maSfxItemPoolUsers.begin(), pImpl->maSfxItemPoolUsers.end(), &rNewUser);
- pImpl->maSfxItemPoolUsers.insert(insertIt, &rNewUser);
-}
-
-void SfxItemPool::RemoveSfxItemPoolUser(SfxItemPoolUser& rOldUser)
-{
- const auto aFindResult = ::std::lower_bound(
- pImpl->maSfxItemPoolUsers.begin(), pImpl->maSfxItemPoolUsers.end(), &rOldUser);
- if(aFindResult != pImpl->maSfxItemPoolUsers.end() && *aFindResult == &rOldUser)
- {
- pImpl->maSfxItemPoolUsers.erase(aFindResult);
- }
-}
-
const SfxPoolItem* SfxItemPool::GetPoolDefaultItem( sal_uInt16 nWhich ) const
{
const SfxPoolItem* pRet;
@@ -126,7 +108,7 @@ bool SfxItemPool::IsItemPoolable_Impl( sal_uInt16 nPos ) const
bool SfxItemPool::IsItemPoolable( sal_uInt16 nWhich ) const
{
- for ( const SfxItemPool *pPool = this; pPool; pPool = pPool->pImpl->mpSecondary )
+ for ( const SfxItemPool *pPool = this; pPool; pPool = pPool->pImpl->mpSecondary.get() )
{
if ( pPool->IsInRange(nWhich) )
return pPool->IsItemPoolable_Impl( pPool->GetIndex_Impl(nWhich));
@@ -199,6 +181,7 @@ SfxItemPool::SfxItemPool
false
Take over static Defaults */
) :
+ salhelper::SimpleReferenceObject(),
pItemInfos(rPool.pItemInfos),
pImpl( new SfxItemPool_Impl( this, rPool.pImpl->aName, rPool.pImpl->mnStart, rPool.pImpl->mnEnd ) )
{
@@ -229,7 +212,7 @@ SfxItemPool::SfxItemPool
// Repair linkage
if ( rPool.pImpl->mpSecondary )
- SetSecondaryPool( rPool.pImpl->mpSecondary->Clone() );
+ SetSecondaryPool( rPool.pImpl->mpSecondary->Clone().get() );
}
void SfxItemPool::SetDefaults( std::vector<SfxPoolItem*>* pDefaults )
@@ -345,28 +328,6 @@ SfxItemPool::~SfxItemPool()
}
}
-void SfxItemPool::Free(SfxItemPool* pPool)
-{
- if(!pPool)
- return;
-
- // tell all the registered SfxItemPoolUsers that the pool is in destruction
- std::vector<SfxItemPoolUser*> aListCopy(pPool->pImpl->maSfxItemPoolUsers);
- for(SfxItemPoolUser* pSfxItemPoolUser : aListCopy)
- {
- DBG_ASSERT(pSfxItemPoolUser, "corrupt SfxItemPoolUser list (!)");
- pSfxItemPoolUser->ObjectInDestruction(*pPool);
- }
-
- // Clear the vector. This means that user do not need to call RemoveSfxItemPoolUser()
- // when they get called from ObjectInDestruction().
- pPool->pImpl->maSfxItemPoolUsers.clear();
-
- // delete pool
- delete pPool;
-}
-
-
void SfxItemPool::SetSecondaryPool( SfxItemPool *pPool )
{
// Reset Master in attached Pools
@@ -398,15 +359,15 @@ void SfxItemPool::SetSecondaryPool( SfxItemPool *pPool )
}
#endif
- pImpl->mpSecondary->pImpl->mpMaster = pImpl->mpSecondary;
- for ( SfxItemPool *p = pImpl->mpSecondary->pImpl->mpSecondary; p; p = p->pImpl->mpSecondary )
- p->pImpl->mpMaster = pImpl->mpSecondary;
+ pImpl->mpSecondary->pImpl->mpMaster = pImpl->mpSecondary.get();
+ for ( SfxItemPool *p = pImpl->mpSecondary->pImpl->mpSecondary.get(); p; p = p->pImpl->mpSecondary.get() )
+ p->pImpl->mpMaster = pImpl->mpSecondary.get();
}
// Set Master of new Secondary Pools
DBG_ASSERT( !pPool || pPool->pImpl->mpMaster == pPool, "Secondary is present in two Pools" );
SfxItemPool *pNewMaster = GetMasterPool() ? pImpl->mpMaster : this;
- for ( SfxItemPool *p = pPool; p; p = p->pImpl->mpSecondary )
+ for ( SfxItemPool *p = pPool; p; p = p->pImpl->mpSecondary.get() )
p->pImpl->mpMaster = pNewMaster;
// Remember new Secondary Pool
@@ -430,9 +391,15 @@ MapUnit SfxItemPool::GetMetric( sal_uInt16 ) const
void SfxItemPool::SetDefaultMetric( MapUnit eNewMetric )
{
+// assert((pImpl->eDefMetric == eNewMetric || !pImpl->mpPoolRanges) && "pool already frozen, cannot change metric");
pImpl->eDefMetric = eNewMetric;
}
+MapUnit SfxItemPool::GetDefaultMetric() const
+{
+ return pImpl->eDefMetric;
+}
+
const OUString& SfxItemPool::GetName() const
{
return pImpl->aName;
@@ -452,10 +419,9 @@ bool SfxItemPool::GetPresentation
}
-SfxItemPool* SfxItemPool::Clone() const
+rtl::Reference<SfxItemPool> SfxItemPool::Clone() const
{
- SfxItemPool *pPool = new SfxItemPool( *this );
- return pPool;
+ return new SfxItemPool( *this );
}
@@ -770,7 +736,7 @@ const SfxPoolItem& SfxItemPool::GetDefaultItem( sal_uInt16 nWhich ) const
SfxItemPool* SfxItemPool::GetSecondaryPool() const
{
- return pImpl->mpSecondary;
+ return pImpl->mpSecondary.get();
}
/* get the last pool by following the GetSecondaryPool chain */
@@ -796,6 +762,7 @@ SfxItemPool* SfxItemPool::GetMasterPool() const
*/
void SfxItemPool::FreezeIdRanges()
{
+ assert(!pImpl->mpPoolRanges && "pool already frozen, cannot freeze twice");
FillItemIdRanges_Impl( pImpl->mpPoolRanges );
}
@@ -806,13 +773,13 @@ void SfxItemPool::FillItemIdRanges_Impl( std::unique_ptr<sal_uInt16[]>& pWhichRa
const SfxItemPool *pPool;
sal_uInt16 nLevel = 0;
- for( pPool = this; pPool; pPool = pPool->pImpl->mpSecondary )
+ for( pPool = this; pPool; pPool = pPool->pImpl->mpSecondary.get() )
++nLevel;
pWhichRanges.reset(new sal_uInt16[ 2*nLevel + 1 ]);
nLevel = 0;
- for( pPool = this; pPool; pPool = pPool->pImpl->mpSecondary )
+ for( pPool = this; pPool; pPool = pPool->pImpl->mpSecondary.get() )
{
pWhichRanges[nLevel++] = pPool->pImpl->mnStart;
pWhichRanges[nLevel++] = pPool->pImpl->mnEnd;
diff --git a/svx/source/dialog/ClassificationEditView.cxx b/svx/source/dialog/ClassificationEditView.cxx
index 4dd5c337ebb4..ba404982f685 100644
--- a/svx/source/dialog/ClassificationEditView.cxx
+++ b/svx/source/dialog/ClassificationEditView.cxx
@@ -40,7 +40,7 @@ ClassificationEditView::ClassificationEditView()
void ClassificationEditView::makeEditEngine()
{
- m_xEditEngine.reset(new ClassificationEditEngine(EditEngine::CreatePool()));
+ m_xEditEngine.reset(new ClassificationEditEngine(EditEngine::CreatePool().get()));
}
ClassificationEditView::~ClassificationEditView()
diff --git a/svx/source/dialog/imapwnd.cxx b/svx/source/dialog/imapwnd.cxx
index 4d979da20849..484980e70d7c 100644
--- a/svx/source/dialog/imapwnd.cxx
+++ b/svx/source/dialog/imapwnd.cxx
@@ -55,8 +55,8 @@ IMapWindow::IMapWindow(const Reference< XFrame >& rxDocumentFrame, weld::Dialog*
: GraphCtrl(pDialog)
, mxDocumentFrame(rxDocumentFrame)
{
- pIMapPool.reset(new SfxItemPool( "IMapItemPool",
- SID_ATTR_MACROITEM, SID_ATTR_MACROITEM, maItemInfos ));
+ pIMapPool = new SfxItemPool( "IMapItemPool",
+ SID_ATTR_MACROITEM, SID_ATTR_MACROITEM, maItemInfos );
pIMapPool->FreezeIdRanges();
}
diff --git a/svx/source/dialog/imapwnd.hxx b/svx/source/dialog/imapwnd.hxx
index 27fe177a9aca..e7e3a1263da3 100644
--- a/svx/source/dialog/imapwnd.hxx
+++ b/svx/source/dialog/imapwnd.hxx
@@ -83,7 +83,7 @@ class IMapWindow final : public GraphCtrl
ImageMap aIMap;
TargetList aTargetList;
Link<IMapWindow&,void> aInfoLink;
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> pIMapPool;
+ rtl::Reference<SfxItemPool> pIMapPool;
SfxItemInfo maItemInfos[1] = {};
css::uno::Reference< css::frame::XFrame >
mxDocumentFrame;
diff --git a/svx/source/dialog/weldeditview.cxx b/svx/source/dialog/weldeditview.cxx
index cc6d0588109c..e89cfe4e71c9 100644
--- a/svx/source/dialog/weldeditview.cxx
+++ b/svx/source/dialog/weldeditview.cxx
@@ -105,7 +105,7 @@ WeldEditView::WeldEditView()
// tdf#127033 want to use UI font so override makeEditEngine to enable that
void WeldEditView::makeEditEngine()
{
- SfxItemPool* pItemPool = EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pItemPool = EditEngine::CreatePool();
vcl::Font aAppFont(Application::GetSettings().GetStyleSettings().GetAppFont());
@@ -126,7 +126,7 @@ void WeldEditView::makeEditEngine()
pItemPool->SetPoolDefaultItem(
SvxFontHeightItem(aAppFont.GetFontHeight() * 20, 100, EE_CHAR_FONTHEIGHT_CTL));
- m_xEditEngine.reset(new EditEngine(pItemPool));
+ m_xEditEngine.reset(new EditEngine(pItemPool.get()));
}
void WeldEditView::Resize()
diff --git a/svx/source/form/fmtextcontrolshell.cxx b/svx/source/form/fmtextcontrolshell.cxx
index 5d4080928d1b..a17edcefaa88 100644
--- a/svx/source/form/fmtextcontrolshell.cxx
+++ b/svx/source/form/fmtextcontrolshell.cxx
@@ -621,7 +621,7 @@ namespace svx
if ( !pFontList )
return;
- std::unique_ptr<SfxItemPool, SfxItemPoolDeleter> pPool(EditEngine::CreatePool());
+ rtl::Reference<SfxItemPool> pPool(EditEngine::CreatePool());
pPool->FreezeIdRanges();
std::unique_ptr< SfxItemSet > xPureItems( new SfxItemSet( *pPool ) );
@@ -722,7 +722,7 @@ namespace svx
xDialog.reset();
xCurrentItems.reset();
xPureItems.reset();
- pPool.reset();
+ pPool.clear();
}
diff --git a/svx/source/svdraw/svdattr.cxx b/svx/source/svdraw/svdattr.cxx
index 8c777fa8af54..0d32ce6e0baf 100644
--- a/svx/source/svdraw/svdattr.cxx
+++ b/svx/source/svdraw/svdattr.cxx
@@ -365,7 +365,7 @@ SdrItemPool::SdrItemPool(const SdrItemPool& rPool)
{
}
-SdrItemPool* SdrItemPool::Clone() const
+rtl::Reference<SfxItemPool> SdrItemPool::Clone() const
{
return new SdrItemPool(*this);
}
diff --git a/svx/source/svdraw/svdmodel.cxx b/svx/source/svdraw/svdmodel.cxx
index d60789ba3569..c8dc5f928534 100644
--- a/svx/source/svdraw/svdmodel.cxx
+++ b/svx/source/svdraw/svdmodel.cxx
@@ -111,7 +111,7 @@ SdrModel::SdrModel(
m_nUIUnitDecimalMark=0;
m_pLayerAdmin=nullptr;
m_pItemPool=pPool;
- m_bMyPool=false;
+ m_bIsWriter=true;
m_pEmbeddedHelper=_pEmbeddedHelper;
m_pDrawOutliner=nullptr;
m_pHitTestOutliner=nullptr;
@@ -154,11 +154,11 @@ SdrModel::SdrModel(
{
m_pItemPool=new SdrItemPool(nullptr);
// Outliner doesn't have its own Pool, so use the EditEngine's
- SfxItemPool* pOutlPool=EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pOutlPool=EditEngine::CreatePool();
// OutlinerPool as SecondaryPool of SdrPool
- m_pItemPool->SetSecondaryPool(pOutlPool);
+ m_pItemPool->SetSecondaryPool(pOutlPool.get());
// remember that I created both pools myself
- m_bMyPool=true;
+ m_bIsWriter=false;
}
m_pItemPool->SetDefaultMetric(m_eObjUnit);
@@ -253,16 +253,6 @@ SdrModel::~SdrModel()
mxStyleSheetPool.clear();
}
- if (m_bMyPool)
- {
- // delete Pools if they're mine
- SfxItemPool* pOutlPool=m_pItemPool->GetSecondaryPool();
- SfxItemPool::Free(m_pItemPool);
- // OutlinerPool has to be deleted after deleting ItemPool, because
- // ItemPool contains SetItems that themselves reference Items from OutlinerPool.
- SfxItemPool::Free(pOutlPool);
- }
-
mpForbiddenCharactersTable.reset();
delete mpImpl->mpUndoFactory;
@@ -633,7 +623,7 @@ rtl::Reference<SdrPage> SdrModel::AllocPage(bool bMasterPage)
void SdrModel::SetTextDefaults() const
{
- SetTextDefaults( m_pItemPool, mnDefTextHgt );
+ SetTextDefaults( m_pItemPool.get(), mnDefTextHgt );
}
void SdrModel::SetTextDefaults( SfxItemPool* pItemPool, sal_Int32 nDefTextHgt )
@@ -711,7 +701,7 @@ void SdrModel::ImpSetOutlinerDefaults( SdrOutliner* pOutliner, bool bInit )
{
pOutliner->EraseVirtualDevice();
pOutliner->SetUpdateMode(false);
- pOutliner->SetEditTextObjectPool(m_pItemPool);
+ pOutliner->SetEditTextObjectPool(m_pItemPool.get());
pOutliner->SetDefTab(m_nDefaultTabulator);
}
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index b0996d5d8405..9fc75da38f40 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -546,16 +546,17 @@ void SdrObject::handlePageChange(SdrPage* pOldPage, SdrPage* pNewPage)
}
}
-// init global static itempool
-SdrItemPool* SdrObject::mpGlobalItemPool = nullptr;
+// global static ItemPool for not-yet-inserted items
+static SdrItemPool* mpGlobalItemPool;
+// init global static itempool
SdrItemPool& SdrObject::GetGlobalDrawObjectItemPool()
{
if(!mpGlobalItemPool)
{
mpGlobalItemPool = new SdrItemPool();
- SfxItemPool* pGlobalOutlPool = EditEngine::CreatePool();
- mpGlobalItemPool->SetSecondaryPool(pGlobalOutlPool);
+ rtl::Reference<SfxItemPool> pGlobalOutlPool = EditEngine::CreatePool();
+ mpGlobalItemPool->SetSecondaryPool(pGlobalOutlPool.get());
mpGlobalItemPool->SetDefaultMetric(SdrEngineDefaults::GetMapUnit());
mpGlobalItemPool->FreezeIdRanges();
}
diff --git a/svx/source/unodraw/unopool.cxx b/svx/source/unodraw/unopool.cxx
index 90addf6e0732..5931087349c3 100644
--- a/svx/source/unodraw/unopool.cxx
+++ b/svx/source/unodraw/unopool.cxx
@@ -54,19 +54,13 @@ SvxUnoDrawPool::SvxUnoDrawPool(SdrModel* pModel)
SvxUnoDrawPool::~SvxUnoDrawPool() noexcept
{
- if (mpDefaultsPool)
- {
- SfxItemPool* pOutlPool = mpDefaultsPool->GetSecondaryPool();
- mpDefaultsPool.reset();
- SfxItemPool::Free(pOutlPool);
- }
}
void SvxUnoDrawPool::init()
{
- mpDefaultsPool.reset(new SdrItemPool());
- SfxItemPool* pOutlPool=EditEngine::CreatePool();
- mpDefaultsPool->SetSecondaryPool(pOutlPool);
+ mpDefaultsPool = new SdrItemPool();
+ rtl::Reference<SfxItemPool> pOutlPool = EditEngine::CreatePool();
+ mpDefaultsPool->SetSecondaryPool(pOutlPool.get());
SdrModel::SetTextDefaults( mpDefaultsPool.get(), SdrEngineDefaults::GetFontHeight() );
mpDefaultsPool->SetDefaultMetric(SdrEngineDefaults::GetMapUnit());
diff --git a/svx/source/xoutdev/xpool.cxx b/svx/source/xoutdev/xpool.cxx
index be56e4fd7a14..bff5490aa565 100644
--- a/svx/source/xoutdev/xpool.cxx
+++ b/svx/source/xoutdev/xpool.cxx
@@ -203,7 +203,7 @@ XOutdevItemPool::XOutdevItemPool(const XOutdevItemPool& rPool)
{
}
-SfxItemPool* XOutdevItemPool::Clone() const
+rtl::Reference<SfxItemPool> XOutdevItemPool::Clone() const
{
return new XOutdevItemPool(*this);
}
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx
index ecfaa837a1cc..08510f634569 100644
--- a/sw/inc/doc.hxx
+++ b/sw/inc/doc.hxx
@@ -193,7 +193,7 @@ class SW_DLLPUBLIC SwDoc final
// private Member
std::unique_ptr<SwNodes> m_pNodes; //< document content (Nodes Array)
- std::unique_ptr<SwAttrPool, SfxItemPoolDeleter> mpAttrPool; //< the attribute pool
+ rtl::Reference<SwAttrPool> mpAttrPool; //< the attribute pool
SwPageDescs m_PageDescs; //< PageDescriptors
Link<bool,void> maOle2Link; //< OLE 2.0-notification
/* @@@MAINTAINABILITY-HORROR@@@
diff --git a/sw/inc/swmodule.hxx b/sw/inc/swmodule.hxx
index 6ba75632843a..987e75e61559 100644
--- a/sw/inc/swmodule.hxx
+++ b/sw/inc/swmodule.hxx
@@ -95,7 +95,7 @@ class SW_DLLPUBLIC SwModule final : public SfxModule, public SfxListener, public
std::unique_ptr<SfxErrorHandler> m_pErrorHandler;
- std::unique_ptr<SwAttrPool, SfxItemPoolDeleter> m_pAttrPool;
+ rtl::Reference<SwAttrPool> m_pAttrPool;
// Current view is held here in order to avoid one's being forced
// to work via GetActiveView.
diff --git a/sw/source/core/attr/swatrset.cxx b/sw/source/core/attr/swatrset.cxx
index f3b57d21a73c..1ec1d93323e1 100644
--- a/sw/source/core/attr/swatrset.cxx
+++ b/sw/source/core/attr/swatrset.cxx
@@ -51,7 +51,7 @@ SwAttrPool::SwAttrPool( SwDoc* pD )
// create SfxItemPool and EditEngine pool and add these in a chain. These
// belong us and will be removed/destroyed in removeAndDeleteSecondaryPools() used from
// the destructor
- SfxItemPool *pSdrPool = new SdrItemPool(this);
+ rtl::Reference<SfxItemPool> pSdrPool = new SdrItemPool(this);
// #75371# change DefaultItems for the SdrEdgeObj distance items
// to TWIPS.
@@ -69,9 +69,9 @@ SwAttrPool::SwAttrPool( SwDoc* pD )
pSdrPool->SetPoolDefaultItem(makeSdrShadowXDistItem(nDefShadowDist));
pSdrPool->SetPoolDefaultItem(makeSdrShadowYDistItem(nDefShadowDist));
- SfxItemPool *pEEgPool = EditEngine::CreatePool();
+ rtl::Reference<SfxItemPool> pEEgPool = EditEngine::CreatePool();
- pSdrPool->SetSecondaryPool(pEEgPool);
+ pSdrPool->SetSecondaryPool(pEEgPool.get());
if(!GetFrozenIdRanges())
{
@@ -87,17 +87,9 @@ SwAttrPool::~SwAttrPool()
{
// cleanup secondary pools
SfxItemPool *pSdrPool = GetSecondaryPool();
- SfxItemPool *pEEgPool = pSdrPool->GetSecondaryPool();
-
// first delete the items, then break the linking
pSdrPool->Delete();
-
SetSecondaryPool(nullptr);
- pSdrPool->SetSecondaryPool(nullptr);
-
- // final cleanup of secondary pool(s)
- SfxItemPool::Free(pSdrPool);
- SfxItemPool::Free(pEEgPool);
}
SwAttrSet::SwAttrSet( SwAttrPool& rPool, sal_uInt16 nWh1, sal_uInt16 nWh2 )
diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx
index 35a59e111406..a674beb9fde6 100644
--- a/sw/source/core/doc/docnew.cxx
+++ b/sw/source/core/doc/docnew.cxx
@@ -597,7 +597,7 @@ SwDoc::~SwDoc()
mpDfltCharFormat.reset();
mpDfltFrameFormat.reset();
mpLayoutCache.reset();
- mpAttrPool.reset();
+ mpAttrPool.clear();
}
void SwDoc::SetDocShell( SwDocShell* pDSh )
diff --git a/sw/source/uibase/app/swmodule.cxx b/sw/source/uibase/app/swmodule.cxx
index 6d15fcf2ff06..485bb7a52d41 100644
--- a/sw/source/uibase/app/swmodule.cxx
+++ b/sw/source/uibase/app/swmodule.cxx
@@ -331,14 +331,14 @@ void SwDLL::RegisterControls()
void SwModule::InitAttrPool()
{
OSL_ENSURE(!m_pAttrPool, "Pool already exists!");
- m_pAttrPool.reset(new SwAttrPool(nullptr));
+ m_pAttrPool = new SwAttrPool(nullptr);
SetPool(m_pAttrPool.get());
}
void SwModule::RemoveAttrPool()
{
SetPool(nullptr);
- m_pAttrPool.reset();
+ m_pAttrPool.clear();
}
std::unique_ptr<SfxStyleFamilies> SwModule::CreateStyleFamilies()
More information about the Libreoffice-commits
mailing list