sc/inc/cellsuno.hxx | 7 ++++--- sc/source/ui/inc/undostyl.hxx | 6 ++++-- sc/source/ui/undo/undostyl.cxx | 13 ++++++++----- sc/source/ui/unoobj/cellsuno.cxx | 26 +++++++++++++++++--------- 4 files changed, 33 insertions(+), 19 deletions(-)
New commits: commit 8792cf693dba3e05ed72a353685bc99d0d34c250 Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Fri Sep 24 11:48:58 2021 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Fri Sep 24 16:24:34 2021 +0200 no need to allocate this SfxItemSet on the heap Change-Id: I651d6091db543ebc958f888598edd2cdef4df43a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122574 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sc/source/ui/inc/undostyl.hxx b/sc/source/ui/inc/undostyl.hxx index 6ea88d0d9550..a4b3a7f44f76 100644 --- a/sc/source/ui/inc/undostyl.hxx +++ b/sc/source/ui/inc/undostyl.hxx @@ -20,7 +20,9 @@ #pragma once #include <memory> +#include <optional> #include <svl/style.hxx> +#include <svl/itemset.hxx> #include "undobase.hxx" class ScDocShell; @@ -30,7 +32,7 @@ class ScStyleSaveData private: OUString aName; OUString aParent; - std::unique_ptr<SfxItemSet> xItems; + std::optional<SfxItemSet> moItems; public: ScStyleSaveData(); @@ -41,7 +43,7 @@ public: const OUString& GetName() const { return aName; } const OUString& GetParent() const { return aParent; } - const SfxItemSet* GetItems() const { return xItems.get(); } + const std::optional<SfxItemSet>& GetItems() const { return moItems; } }; class ScUndoModifyStyle: public ScSimpleUndo diff --git a/sc/source/ui/undo/undostyl.cxx b/sc/source/ui/undo/undostyl.cxx index f110d0190051..a9d47feec685 100644 --- a/sc/source/ui/undo/undostyl.cxx +++ b/sc/source/ui/undo/undostyl.cxx @@ -41,8 +41,8 @@ ScStyleSaveData::ScStyleSaveData( const ScStyleSaveData& rOther ) : aName( rOther.aName ), aParent( rOther.aParent ) { - if (rOther.xItems) - xItems.reset(new SfxItemSet(*rOther.xItems)); + if (rOther.moItems) + moItems.emplace(*rOther.moItems); } ScStyleSaveData& ScStyleSaveData::operator=( const ScStyleSaveData& rOther ) @@ -51,7 +51,10 @@ ScStyleSaveData& ScStyleSaveData::operator=( const ScStyleSaveData& rOther ) { aName = rOther.aName; aParent = rOther.aParent; - xItems.reset(rOther.xItems ? new SfxItemSet(*rOther.xItems) : nullptr); + if (rOther.moItems) + moItems.emplace(*rOther.moItems); + else + moItems.reset(); } return *this; } @@ -62,7 +65,7 @@ void ScStyleSaveData::InitFromStyle( const SfxStyleSheetBase* pSource ) { aName = pSource->GetName(); aParent = pSource->GetParent(); - xItems.reset(new SfxItemSet(const_cast<SfxStyleSheetBase*>(pSource)->GetItemSet())); + moItems.emplace(const_cast<SfxStyleSheetBase*>(pSource)->GetItemSet()); } else *this = ScStyleSaveData(); // empty @@ -157,7 +160,7 @@ void ScUndoModifyStyle::DoChange( ScDocShell* pDocSh, const OUString& rName, pStyle->SetParent( aNewParent ); SfxItemSet& rStyleSet = pStyle->GetItemSet(); - const SfxItemSet* pNewSet = rData.GetItems(); + const std::optional<SfxItemSet>& pNewSet = rData.GetItems(); OSL_ENSURE( pNewSet, "no ItemSet for style" ); if (pNewSet) rStyleSet.Set( *pNewSet, false ); commit e69ca434253d3278975078600f8a77291d97b9fc Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Fri Sep 24 11:54:23 2021 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Fri Sep 24 16:24:21 2021 +0200 no need to allocate this SfxItemSet on the heap Change-Id: I4982d075f21f74b3d0db1c61a499dceb92e50c87 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122575 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/sc/inc/cellsuno.hxx b/sc/inc/cellsuno.hxx index 7f1b1a0106ad..3d2080a29224 100644 --- a/sc/inc/cellsuno.hxx +++ b/sc/inc/cellsuno.hxx @@ -26,6 +26,7 @@ #include <rtl/ref.hxx> #include <sal/types.h> #include <tools/link.hxx> +#include <svl/itemset.hxx> #include <svl/lstner.hxx> #include <svl/listener.hxx> #include <com/sun/star/table/XTableChartsSupplier.hpp> @@ -89,6 +90,7 @@ #include <cppuhelper/weakref.hxx> #include <memory> +#include <optional> #include <vector> namespace com::sun::star::table { struct BorderLine2; } @@ -112,7 +114,6 @@ class SfxBroadcaster; class SfxHint; class SfxItemPropertyMap; class SfxItemPropertySet; -class SfxItemSet; struct SfxItemPropertyMapEntry; namespace editeng { class SvxBorderLine; } @@ -181,8 +182,8 @@ private: std::unique_ptr<ScLinkListener> pValueListener; std::unique_ptr<ScPatternAttr> pCurrentFlat; std::unique_ptr<ScPatternAttr> pCurrentDeep; - std::unique_ptr<SfxItemSet> pCurrentDataSet; - std::unique_ptr<SfxItemSet> pNoDfltCurrentDataSet; + std::optional<SfxItemSet> moCurrentDataSet; + std::optional<SfxItemSet> moNoDfltCurrentDataSet; std::unique_ptr<ScMarkData> pMarkData; ScRangeList aRanges; sal_Int64 nObjectId; diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index 0d9e076269bc..bab189c43d15 100644 --- a/sc/source/ui/unoobj/cellsuno.cxx +++ b/sc/source/ui/unoobj/cellsuno.cxx @@ -1432,10 +1432,8 @@ void ScCellRangesBase::ForgetCurrentAttrs() { pCurrentFlat.reset(); pCurrentDeep.reset(); - pCurrentDataSet.reset(); - pNoDfltCurrentDataSet.reset(); - pCurrentDataSet = nullptr; - pNoDfltCurrentDataSet = nullptr; + moCurrentDataSet.reset(); + moNoDfltCurrentDataSet.reset(); // #i62483# pMarkData can remain unchanged, is deleted only if the range changes (RefChanged) } @@ -1471,18 +1469,28 @@ const ScPatternAttr* ScCellRangesBase::GetCurrentAttrsDeep() SfxItemSet* ScCellRangesBase::GetCurrentDataSet(bool bNoDflt) { - if(!pCurrentDataSet) + if(!moCurrentDataSet) { const ScPatternAttr* pPattern = GetCurrentAttrsDeep(); if ( pPattern ) { // replace Dontcare with Default, so that we always have a reflection - pCurrentDataSet.reset( new SfxItemSet( pPattern->GetItemSet() ) ); - pNoDfltCurrentDataSet.reset( new SfxItemSet( pPattern->GetItemSet() ) ); - pCurrentDataSet->ClearInvalidItems(); + moCurrentDataSet.emplace( pPattern->GetItemSet() ); + moNoDfltCurrentDataSet.emplace( pPattern->GetItemSet() ); + moCurrentDataSet->ClearInvalidItems(); } } - return bNoDflt ? pNoDfltCurrentDataSet.get() : pCurrentDataSet.get(); + if (bNoDflt) + { + if (moNoDfltCurrentDataSet) + return &*moNoDfltCurrentDataSet; + } + else + { + if (moCurrentDataSet) + return &*moCurrentDataSet; + } + return nullptr; } const ScMarkData* ScCellRangesBase::GetMarkData()