diff options
author | Jim Raykowski <raykowj@gmail.com> | 2023-11-24 00:40:30 -0900 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2023-12-15 09:01:04 +0100 |
commit | ae8d83c0cca3f721292bceaf358cd03217d5ee39 (patch) | |
tree | efd2f32a146c0d98b572bad1022adcc50fc9bd75 | |
parent | 4d65f3a624f6d9e44c7f0d47546222f5f59da542 (diff) |
tdf#158276 tdf#86395 Make alphabetical sort setting persist
by using a bitwise storage approach inspired by the ActiveBlock
setting where each content type corresponds to one bit position of
the stored integer, e.g., bookmarks content type corresponds to bit
5.
Change-Id: I50de26e44a8d2afb917f3a651eef9a8f704b751f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159916
Tested-by: Jenkins
Reviewed-by: Jim Raykowski <raykowj@gmail.com>
(cherry picked from commit bb0a2be91930fbae07657f214b53117b9e8cc204)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160643
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
-rw-r--r-- | officecfg/registry/schema/org/openoffice/Office/Writer.xcs | 7 | ||||
-rw-r--r-- | sw/source/uibase/inc/navicfg.hxx | 12 | ||||
-rw-r--r-- | sw/source/uibase/utlui/content.cxx | 23 | ||||
-rw-r--r-- | sw/source/uibase/utlui/navicfg.cxx | 5 |
4 files changed, 43 insertions, 4 deletions
diff --git a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs index 61054ae8eca9..2bd5995a1e5d 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs @@ -5197,6 +5197,13 @@ </info> <value>false</value> </prop> + <prop oor:name="SortAlphabeticallyBlock" oor:type="xs:int" oor:nillable="false"> + <!-- UIHints: Navigator --> + <info> + <desc>Specifies whether the contents of a content type are alphabetically sorted in the Navigator list box. Each content type corresponds to one bit position of the stored int. A bit with value 1 indicates alphabetical sorting for the corresponding content type.</desc> + </info> + <value>0</value> + </prop> </group> <group oor:name="Envelope"> <info> diff --git a/sw/source/uibase/inc/navicfg.hxx b/sw/source/uibase/inc/navicfg.hxx index ad4bb10afb70..b39614f9f63f 100644 --- a/sw/source/uibase/inc/navicfg.hxx +++ b/sw/source/uibase/inc/navicfg.hxx @@ -37,6 +37,8 @@ class SwNavigationConfig final : public utl::ConfigItem o3tl::enumarray<ContentTypeId, bool> mContentTypeTrack; + sal_Int32 m_nSortAlphabeticallyBlock = 0; // persists content type alphabetical sort setting + static css::uno::Sequence<OUString> GetPropertyNames(); virtual void ImplCommit() override; @@ -125,6 +127,16 @@ public: } bool IsNavigateOnSelect() const {return m_bIsNavigateOnSelect;} + + sal_Int32 GetSortAlphabeticallyBlock() const {return m_nSortAlphabeticallyBlock;} + void SetSortAlphabeticallyBlock(sal_Int32 nSet) + { + if(m_nSortAlphabeticallyBlock != nSet) + { + SetModified(); + m_nSortAlphabeticallyBlock = nSet; + } + } }; #endif diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx index 8d46ef52303a..72fd76cbe1ce 100644 --- a/sw/source/uibase/utlui/content.cxx +++ b/sw/source/uibase/utlui/content.cxx @@ -431,6 +431,13 @@ SwContentType::SwContentType(SwWrtShell* pShell, ContentTypeId nType, sal_uInt8 break; default: break; } + + const int nShift = static_cast<int>(m_nContentType); + assert(nShift > -1); + const sal_Int32 nMask = 1 << nShift; + const sal_Int32 nBlock = SW_MOD()->GetNavigationConfig()->GetSortAlphabeticallyBlock(); + m_bAlphabeticSort = nBlock & nMask; + FillMemberList(); } @@ -1739,10 +1746,12 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, rCEvt, bool) const ContentTypeId nContentType = pType->GetType(); if (nContentType != ContentTypeId::FOOTNOTE && nContentType != ContentTypeId::ENDNOTE - && nContentType != ContentTypeId::POSTIT) + && nContentType != ContentTypeId::POSTIT && nContentType != ContentTypeId::UNKNOWN) { bRemoveSortEntry = false; - xPop->set_active("sort", pType->IsAlphabeticSort()); + const sal_Int32 nMask = 1 << static_cast<int>(nContentType); + sal_uInt64 nSortAlphabeticallyBlock = m_pConfig->GetSortAlphabeticallyBlock(); + xPop->set_active("sort", nSortAlphabeticallyBlock & nMask); } OUString aIdent; @@ -4960,7 +4969,15 @@ void SwContentTree::ExecuteContextMenuAction(const OUString& rSelectedPopupEntry pCntType = weld::fromId<SwContentType*>(rId); else pCntType = const_cast<SwContentType*>(weld::fromId<SwContent*>(rId)->GetParent()); - pCntType->SetAlphabeticSort(!pCntType->IsAlphabeticSort()); + + // toggle and persist alphabetical sort setting + const int nShift = static_cast<int>(pCntType->GetType()); + assert(nShift > -1); + const sal_Int32 nMask = 1 << nShift; + const sal_Int32 nBlock = m_pConfig->GetSortAlphabeticallyBlock(); + pCntType->SetAlphabeticSort(~nBlock & nMask); + m_pConfig->SetSortAlphabeticallyBlock(nBlock ^ nMask); + pCntType->FillMemberList(); Display(true); return; diff --git a/sw/source/uibase/utlui/navicfg.cxx b/sw/source/uibase/utlui/navicfg.cxx index 0170a8f68a97..dfda8827292f 100644 --- a/sw/source/uibase/utlui/navicfg.cxx +++ b/sw/source/uibase/utlui/navicfg.cxx @@ -74,7 +74,8 @@ Sequence<OUString> SwNavigationConfig::GetPropertyNames() OUString("FieldTracking"), OUString("FootnoteTracking"), OUString("EndnoteTracking"), - OUString("NavigateOnSelect")}; + OUString("NavigateOnSelect"), + OUString("SortAlphabeticallyBlock")}; } SwNavigationConfig::SwNavigationConfig() : @@ -146,6 +147,7 @@ void SwNavigationConfig::Load() break; } case 22: m_bIsNavigateOnSelect = *o3tl::doAccess<bool>(pValues[nProp]); break; + case 23: pValues[nProp] >>= m_nSortAlphabeticallyBlock; break; } } } @@ -180,6 +182,7 @@ void SwNavigationConfig::ImplCommit() break; } case 22: pValues[nProp] <<= m_bIsNavigateOnSelect; break; + case 23: pValues[nProp] <<= m_nSortAlphabeticallyBlock; break; } } PutProperties(aNames, aValues); |