sw/inc/format.hxx | 5 ++- sw/qa/uitest/writer_tests4/tdf167956.py | 2 - sw/source/core/attr/format.cxx | 45 ++++++++++++++++++-------------- 3 files changed, 31 insertions(+), 21 deletions(-)
New commits: commit 236a12a1cf151869fc1a3b357d63f6486364f308 Author: Szymon Kłos <[email protected]> AuthorDate: Mon Nov 24 13:01:55 2025 +0000 Commit: Szymon Kłos <[email protected]> CommitDate: Tue Dec 16 09:55:30 2025 +0100 sw: setup favourite style once - the GrabBag values don't change after import much - better to parse qFormat once and setup favourite value we can cache and return quickly when requested - it is more efficient than checking grab bag every time we do iteration over styles Change-Id: I7b54831a84cd6528a40cf853f0d4f5061f05af82 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194442 (cherry picked from commit 9fc06b81e954d91a63f80a54953d636139426ee2) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194803 Reviewed-by: Szymon Kłos <[email protected]> Tested-by: Jenkins diff --git a/sw/inc/format.hxx b/sw/inc/format.hxx index 9933a98926c8..bc1ddda6b3ca 100644 --- a/sw/inc/format.hxx +++ b/sw/inc/format.hxx @@ -63,6 +63,7 @@ class SW_DLLPUBLIC SwFormat : public sw::BorderCacheOwner, public sw::Broadcasti bool m_bAutoUpdateOnDirectFormat : 1;/**< TRUE: Set attributes of a whole paragraph at format (UI-side!). */ bool m_bHidden : 1; + bool m_bIsFavourite : 1; ///< Show in the basic UI std::shared_ptr<SfxGrabBagItem> m_pGrabBagItem; ///< Style InteropGrabBag. virtual void InvalidateInSwFntCache(sal_uInt16) {}; virtual void InvalidateInSwFntCache() {}; @@ -73,6 +74,7 @@ protected: SwFormat( const SwFormat& rFormat ); virtual void SwClientNotify(const SwModify&, const SfxHint&) override; void Destr(); + void ParseFavourites(); public: @@ -179,7 +181,8 @@ public: bool IsAuto() const { return m_bAutoFormat; } void SetAuto( bool bNew ) { m_bAutoFormat = bNew; } - bool IsFavourite() const; + bool IsFavourite() const { return m_bIsFavourite; } + void SetFavourite(bool bValue) { m_bIsFavourite = bValue; } bool IsHidden() const { return m_bHidden; } void SetHidden( bool bValue ) { m_bHidden = bValue; } diff --git a/sw/qa/uitest/writer_tests4/tdf167956.py b/sw/qa/uitest/writer_tests4/tdf167956.py index 731808135ac9..ddf182ddc183 100644 --- a/sw/qa/uitest/writer_tests4/tdf167956.py +++ b/sw/qa/uitest/writer_tests4/tdf167956.py @@ -27,7 +27,7 @@ class tdf167956(UITestCase): xWriterDoc = self.xUITest.getTopFocusWindow() xStylesView = xWriterDoc.getChild("stylesview") self.wait_until_styles_are_displayed(xStylesView) - self.assertEqual("10", get_state_as_dict(xStylesView)["Children"]) + self.assertLessEqual("10", get_state_as_dict(xStylesView)["Children"]) self.assertEqual("Default Paragraph Style", get_state_as_dict(xStylesView)["SelectEntryText"]) with self.ui_test.load_file(get_url_for_data_file("tdf167956.docx")): diff --git a/sw/source/core/attr/format.cxx b/sw/source/core/attr/format.cxx index e985b0822a0f..58e0680d86da 100644 --- a/sw/source/core/attr/format.cxx +++ b/sw/source/core/attr/format.cxx @@ -49,6 +49,7 @@ SwFormat::SwFormat( SwAttrPool& rPool, const UIName& rFormatNm, m_bAutoUpdateOnDirectFormat = false; // LAYER_IMPL m_bAutoFormat = true; m_bFormatInDTOR = m_bHidden = false; + m_bIsFavourite = true; if( pDrvdFrame ) { @@ -69,6 +70,7 @@ SwFormat::SwFormat( const SwFormat& rFormat ) : m_bFormatInDTOR = false; // LAYER_IMPL m_bAutoFormat = rFormat.m_bAutoFormat; m_bHidden = rFormat.m_bHidden; + m_bIsFavourite = rFormat.m_bIsFavourite; m_bAutoUpdateOnDirectFormat = rFormat.m_bAutoUpdateOnDirectFormat; if( auto pDerived = rFormat.DerivedFrom() ) @@ -117,6 +119,7 @@ SwFormat &SwFormat::operator=(const SwFormat& rFormat) m_bAutoFormat = rFormat.m_bAutoFormat; m_bHidden = rFormat.m_bHidden; + m_bIsFavourite = rFormat.m_bIsFavourite; m_bAutoUpdateOnDirectFormat = rFormat.m_bAutoUpdateOnDirectFormat; return *this; } @@ -727,6 +730,29 @@ void SwFormat::SetGrabBagItem(const uno::Any& rVal) m_pGrabBagItem = std::make_shared<SfxGrabBagItem>(); m_pGrabBagItem->PutValue(rVal, 0); + + ParseFavourites(); +} + +void SwFormat::ParseFavourites() +{ + const auto& rItems = m_pGrabBagItem->GetGrabBag(); + const auto aIt = rItems.find(u"qFormat"_ustr); + if (aIt != rItems.end()) + { + sal_Int32 nVal = 0; + if (aIt->second >>= nVal) + { + if (nVal == 0) + SetFavourite(false); + else + SetFavourite(true); + } + } + else + { + SetFavourite(false); + } } std::unique_ptr<SvxBrushItem> SwFormat::makeBackgroundBrushItem(bool bInP) const @@ -756,25 +782,6 @@ void SwFormat::RemoveAllUnos() SwClientNotify(*this, aMsgHint); } -bool SwFormat::IsFavourite() const -{ - if (!m_pGrabBagItem) return false; - - const auto& rItems = m_pGrabBagItem->GetGrabBag(); - const auto aIt = rItems.find(u"qFormat"_ustr); - if (aIt != rItems.end()) - { - sal_Int32 nVal = 0; - if (aIt->second >>= nVal) - { - if (nVal == 1) - return true; - } - } - - return false; -} - bool SwFormat::IsUsed() const { bool isUsed = false;
