cui/source/tabpages/tpcolor.cxx |   72 ++++++++++++++++++++++------------------
 1 file changed, 41 insertions(+), 31 deletions(-)

New commits:
commit 8c3fc56d37a557cf34a2a8a918eabd8811177514
Author:     Jim Raykowski <[email protected]>
AuthorDate: Mon Dec 8 19:47:19 2025 -0900
Commit:     Jim Raykowski <[email protected]>
CommitDate: Wed Dec 10 02:23:32 2025 +0100

    tdf#169851 sync color table with active color
    
    commit 676892af95079d00c19527b94396aacf4136bf0d was my first stab.
    This second effort aims to provide the expected behavior of not
    changing the last used palette when it does not have a color match of
    the 'Active' color. Additionally this patch handles when the
    'Custom', 'Theme colors', or 'Document colors' palette is the last
    used palette.
    
    Change-Id: Ibce078778d8cad483448837dbb6364acbf668a40
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195265
    Reviewed-by: Jim Raykowski <[email protected]>
    Tested-by: Jenkins

diff --git a/cui/source/tabpages/tpcolor.cxx b/cui/source/tabpages/tpcolor.cxx
index 7e7388506d38..2313464991e7 100644
--- a/cui/source/tabpages/tpcolor.cxx
+++ b/cui/source/tabpages/tpcolor.cxx
@@ -204,37 +204,7 @@ void SvxColorTabPage::ActivatePage( const SfxItemSet& )
     if (!m_pColorList.is())
         return;
 
-    if (const XFillColorItem* pFillColorItem = 
m_rOutAttrs.GetItemIfSet(GetWhich(XATTR_FILLCOLOR)))
-    {
-        SetColorModel( ColorModel::RGB );
-        ChangeColorModel();
-
-        const Color aColor = pFillColorItem->GetColorValue();
-        NamedColor aNamedColor;
-        aNamedColor.m_aColor = aColor;
-        ChangeColor(aNamedColor);
-
-        for (size_t i = 0, nSize = maPaletteManager.GetPaletteList().size(); i 
< nSize; ++i)
-        {
-            maPaletteManager.SetPalette(i, true/*bPosOnly*/);
-
-            m_pColorList = 
XPropertyList::AsColorList(XPropertyList::CreatePropertyListFromURL(
-                XPropertyListType::Color, 
maPaletteManager.GetSelectedPalettePath()));
-            if (!m_pColorList->Load())
-                continue;
-
-            sal_Int32 nPos = FindInPalette(aColor);
-            if (nPos == -1)
-                continue;
-
-            
m_xSelectPalette->set_active_text(maPaletteManager.GetPaletteName());
-            SelectPaletteLBHdl(*m_xSelectPalette);
-
-            
m_xValSetColorList->SelectItem(m_xValSetColorList->GetItemId(nPos));
-
-            break;
-        }
-    }
+    SelectPaletteLBHdl(*m_xSelectPalette);
 
     m_aCtlPreviewOld.SetAttributes(m_aXFillAttr.GetItemSet());
     m_aCtlPreviewOld.Invalidate();
@@ -501,6 +471,46 @@ IMPL_LINK_NOARG(SvxColorTabPage, SelectPaletteLBHdl, 
weld::ComboBox&, void)
     }
 
     m_xValSetColorList->Resize();
+
+    // select the 'Active' color in the m_xValSetColorList if it has it
+    if (const XFillColorItem* pFillColorItem = 
m_rOutAttrs.GetItemIfSet(GetWhich(XATTR_FILLCOLOR)))
+    {
+        SetColorModel(ColorModel::RGB);
+        ChangeColorModel();
+
+        const Color aColor = pFillColorItem->GetColorValue();
+        NamedColor aNamedColor;
+        aNamedColor.m_aColor = aColor;
+        ChangeColor(aNamedColor);
+
+        if (sal_Int32 nPalettePos = maPaletteManager.GetPalette();
+            /* theme colors palette */ 
maPaletteManager.IsThemePaletteSelected() ||
+            /* document colors palette */ nPalettePos == 
maPaletteManager.GetPaletteCount() - 1
+            || /* custom palette */ nPalettePos == 0)
+        {
+            for (size_t nItemPos = 0, nItemCount = 
m_xValSetColorList->GetItemCount();
+                 nItemPos < nItemCount; nItemPos++)
+            {
+                auto nItemId = m_xValSetColorList->GetItemId(nItemPos);
+                if (m_xValSetColorList->GetItemColor(nItemId) == aColor)
+                {
+                    m_xValSetColorList->SelectItem(nItemId);
+                    break;
+                }
+            }
+        }
+        else
+        {
+            m_pColorList = 
XPropertyList::AsColorList(XPropertyList::CreatePropertyListFromURL(
+                XPropertyListType::Color, 
maPaletteManager.GetSelectedPalettePath()));
+            if (m_pColorList->Load())
+            {
+                auto nItemPos = FindInPalette(aColor);
+                if (nItemPos != -1)
+                    
m_xValSetColorList->SelectItem(m_xValSetColorList->GetItemId(nItemPos));
+            }
+        }
+    }
 }
 
 IMPL_LINK(SvxColorTabPage, SelectValSetHdl_Impl, ValueSet*, pValSet, void)

Reply via email to