[Libreoffice-commits] core.git: 4 commits - chart2/source include/sfx2 include/svx reportdesign/source sfx2/source svx/source sw/source

Maxim Monastirsky momonasmon at gmail.com
Thu Oct 13 08:16:23 UTC 2016


 chart2/source/controller/sidebar/ChartColorWrapper.cxx |   15 -
 include/sfx2/tbxctrl.hxx                               |    5 
 include/svx/linectrl.hxx                               |    5 
 include/svx/tbcontrl.hxx                               |   17 -
 include/svx/tbxcolorupdate.hxx                         |    1 
 reportdesign/source/ui/misc/toolboxcontroller.cxx      |    8 
 sfx2/source/toolbox/tbxitem.cxx                        |  133 ---------
 svx/source/tbxctrls/PaletteManager.cxx                 |    1 
 svx/source/tbxctrls/colorwindow.hxx                    |    4 
 svx/source/tbxctrls/lboxctrl.cxx                       |   12 
 svx/source/tbxctrls/linectrl.cxx                       |   10 
 svx/source/tbxctrls/tbcontrl.cxx                       |  248 +++++------------
 svx/source/tbxctrls/tbxcolorupdate.cxx                 |   12 
 sw/source/uibase/docvw/edtwin.cxx                      |    6 
 14 files changed, 113 insertions(+), 364 deletions(-)

New commits:
commit 9125a4f3f63a7f49fd307908c181e999120063e0
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Thu Oct 13 10:20:31 2016 +0300

    Use FeatureStateEvent directly for status updates
    
    ... for SfxPopupWindow and SvxColorToolBoxControl (the
    latter shares BorderColorStatus with SvxColorWindow_Impl,
    so it was easier to convert it too).
    
    Change-Id: Ifcb23fe5809e467322d1cf4d790420886ac79b47

diff --git a/chart2/source/controller/sidebar/ChartColorWrapper.cxx b/chart2/source/controller/sidebar/ChartColorWrapper.cxx
index 4b2c769..b2ff619 100644
--- a/chart2/source/controller/sidebar/ChartColorWrapper.cxx
+++ b/chart2/source/controller/sidebar/ChartColorWrapper.cxx
@@ -11,9 +11,7 @@
 
 #include "ChartController.hxx"
 
-#include <editeng/colritem.hxx>
 #include <svx/tbcontrl.hxx>
-#include <svx/svxids.hrc>
 
 namespace chart { namespace sidebar {
 
@@ -88,13 +86,14 @@ void ChartColorWrapper::updateData()
     if (!xPropSet.is())
         return;
 
-    css::uno::Any aAny = xPropSet->getPropertyValue(maPropertyName);
-    sal_uInt32 nColor = 0;
-    aAny >>= nColor;
-    Color aColor(nColor);
+    css::util::URL aUrl;
+    aUrl.Complete = ".uno:FillColor";
 
-    SvxColorItem aItem(aColor, SID_ATTR_FILL_COLOR);
-    mpControl->StateChanged(SID_ATTR_FILL_COLOR, SfxItemState::SET, &aItem);
+    css::frame::FeatureStateEvent aEvent;
+    aEvent.FeatureURL = aUrl;
+    aEvent.IsEnabled = true;
+    aEvent.State = xPropSet->getPropertyValue(maPropertyName);
+    mpControl->statusChanged(aEvent);
 }
 
 } }
diff --git a/include/sfx2/tbxctrl.hxx b/include/sfx2/tbxctrl.hxx
index 60536f5..6185ce7 100644
--- a/include/sfx2/tbxctrl.hxx
+++ b/include/sfx2/tbxctrl.hxx
@@ -95,10 +95,7 @@ protected:
     void                    UnbindListener();
     void                    AddStatusListener( const OUString& rCommandURL );
 
-    // SfxStatusListenerInterface
-    using FloatingWindow::StateChanged;
-    virtual void            StateChanged( sal_uInt16 nSID, SfxItemState eState,
-                                          const SfxPoolItem* pState );
+    virtual void            statusChanged( const css::frame::FeatureStateEvent& rEvent );
 
 public:
                             SfxPopupWindow( sal_uInt16 nId,
diff --git a/include/svx/linectrl.hxx b/include/svx/linectrl.hxx
index e29fe6c..99c4dbc 100644
--- a/include/svx/linectrl.hxx
+++ b/include/svx/linectrl.hxx
@@ -77,8 +77,6 @@ public:
 
 class SvxLineEndWindow : public SfxPopupWindow
 {
-    using FloatingWindow::StateChanged;
-
 private:
     XLineEndListRef pLineEndList;
     VclPtr<ValueSet> aLineEndSet;
@@ -116,8 +114,7 @@ public:
 
     void            StartSelection();
 
-    virtual void    StateChanged( sal_uInt16 nSID, SfxItemState eState,
-                                  const SfxPoolItem* pState ) override;
+    virtual void    statusChanged( const css::frame::FeatureStateEvent& rEvent ) override;
 };
 
 
diff --git a/include/svx/tbcontrl.hxx b/include/svx/tbcontrl.hxx
index 174c16d..21f07f2 100644
--- a/include/svx/tbcontrl.hxx
+++ b/include/svx/tbcontrl.hxx
@@ -222,15 +222,13 @@ class BorderColorStatus
 public:
     BorderColorStatus();
     ~BorderColorStatus();
-    void StateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState);
+    bool statusChanged( const css::frame::FeatureStateEvent& rEvent );
     Color GetColor();
 };
 
 typedef std::function<void(const OUString&, const Color&)> ColorSelectFunction;
 class SVX_DLLPUBLIC SvxColorToolBoxControl : public SfxToolBoxControl
 {
-    using SfxToolBoxControl::StateChanged;
-
     std::unique_ptr<svx::ToolboxButtonColorUpdater> m_xBtnUpdater;
     PaletteManager m_aPaletteManager;
     BorderColorStatus m_aBorderColorStatus;
@@ -242,8 +240,9 @@ public:
     SvxColorToolBoxControl(sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rToolBox);
     virtual ~SvxColorToolBoxControl() override;
 
-    virtual void StateChanged(sal_uInt16 nSID, SfxItemState eState,
-                              const SfxPoolItem* pState) override;
+    // XStatusListener
+    virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& rEvent ) throw ( css::uno::RuntimeException, std::exception ) override;
+
     virtual VclPtr<SfxPopupWindow> CreatePopupWindow() override;
     virtual void Select(sal_uInt16 nSelectModifier) override;
 
diff --git a/reportdesign/source/ui/misc/toolboxcontroller.cxx b/reportdesign/source/ui/misc/toolboxcontroller.cxx
index c103c20..5e05843 100644
--- a/reportdesign/source/ui/misc/toolboxcontroller.cxx
+++ b/reportdesign/source/ui/misc/toolboxcontroller.cxx
@@ -38,7 +38,6 @@
 #include <editeng/fontitem.hxx>
 #include <editeng/fhgtitem.hxx>
 #include <svx/tbcontrl.hxx>
-#include <editeng/colritem.hxx>
 
 #include <cppuhelper/supportsservice.hxx>
 
@@ -195,12 +194,7 @@ void SAL_CALL OToolboxController::statusChanged( const FeatureStateEvent& Event
             {
                 case SID_ATTR_CHAR_COLOR2:
                 case SID_BACKGROUND_COLOR:
-                    {
-                        util::Color nColor(COL_TRANSPARENT);
-                        Event.State >>= nColor;
-                        SvxColorItem aColorItem(::Color(nColor), 1);
-                        static_cast<SvxColorToolBoxControl*>(m_pToolbarController.get())->StateChanged(m_nSlotId,Event.IsEnabled ? SfxItemState::SET : SfxItemState::DISABLED,&aColorItem);
-                    }
+                    m_pToolbarController->statusChanged( Event );
                     break;
                 case SID_ATTR_CHAR_FONT:
                     {
diff --git a/sfx2/source/toolbox/tbxitem.cxx b/sfx2/source/toolbox/tbxitem.cxx
index ba6da54..08f0ae9 100644
--- a/sfx2/source/toolbox/tbxitem.cxx
+++ b/sfx2/source/toolbox/tbxitem.cxx
@@ -754,121 +754,7 @@ SfxFrameStatusListener::~SfxFrameStatusListener()
 void SAL_CALL SfxFrameStatusListener::statusChanged( const css::frame::FeatureStateEvent& rEvent )
 throw ( css::uno::RuntimeException, std::exception )
 {
-    SfxViewFrame* pViewFrame = nullptr;
-    Reference < XController > xController;
-
-    SolarMutexGuard aGuard;
-    if ( m_xFrame.is() )
-        xController = m_xFrame->getController();
-
-    Reference < XDispatchProvider > xProvider( xController, UNO_QUERY );
-    if ( xProvider.is() )
-    {
-        Reference < XDispatch > xDisp = xProvider->queryDispatch( rEvent.FeatureURL, OUString(), 0 );
-        if ( xDisp.is() )
-        {
-            Reference< XUnoTunnel > xTunnel( xDisp, UNO_QUERY );
-            SfxOfficeDispatch* pDisp = nullptr;
-            if ( xTunnel.is() )
-            {
-                sal_Int64 nImplementation = xTunnel->getSomething(SfxOfficeDispatch::impl_getStaticIdentifier());
-                pDisp = reinterpret_cast< SfxOfficeDispatch* >( sal::static_int_cast< sal_IntPtr >( nImplementation ));
-            }
-
-            if ( pDisp )
-                pViewFrame = pDisp->GetDispatcher_Impl()->GetFrame();
-        }
-    }
-
-    sal_uInt16 nSlotId = 0;
-    SfxSlotPool& rPool = SfxSlotPool::GetSlotPool( pViewFrame );
-    const SfxSlot* pSlot = rPool.GetUnoSlot( rEvent.FeatureURL.Path );
-    if ( pSlot )
-        nSlotId = pSlot->GetSlotId();
-
-    if ( nSlotId > 0 )
-    {
-        if ( rEvent.Requery )
-        {
-            // requery for the notified state
-            addStatusListener( rEvent.FeatureURL.Complete );
-        }
-        else
-        {
-            SfxItemState eState = SfxItemState::DISABLED;
-            SfxPoolItem* pItem = nullptr;
-            if ( rEvent.IsEnabled )
-            {
-                eState = SfxItemState::DEFAULT;
-                css::uno::Type aType = rEvent.State.getValueType();
-
-                if ( aType == cppu::UnoType<void>::get() )
-                {
-                    pItem = new SfxVoidItem( nSlotId );
-                    eState = SfxItemState::UNKNOWN;
-                }
-                else if ( aType == cppu::UnoType<bool>::get() )
-                {
-                    bool bTemp = false;
-                    rEvent.State >>= bTemp ;
-                    pItem = new SfxBoolItem( nSlotId, bTemp );
-                }
-                else if ( aType == ::cppu::UnoType< ::cppu::UnoUnsignedShortType >::get())
-                {
-                    sal_uInt16 nTemp = 0;
-                    rEvent.State >>= nTemp ;
-                    pItem = new SfxUInt16Item( nSlotId, nTemp );
-                }
-                else if ( aType == cppu::UnoType<sal_uInt32>::get() )
-                {
-                    sal_uInt32 nTemp = 0;
-                    rEvent.State >>= nTemp ;
-                    pItem = new SfxUInt32Item( nSlotId, nTemp );
-                }
-                else if ( aType == cppu::UnoType<OUString>::get() )
-                {
-                    OUString sTemp ;
-                    rEvent.State >>= sTemp ;
-                    pItem = new SfxStringItem( nSlotId, sTemp );
-                }
-                else if ( aType == cppu::UnoType< css::frame::status::ItemStatus>::get() )
-                {
-                    ItemStatus aItemStatus;
-                    rEvent.State >>= aItemStatus;
-                    SfxItemState tmpState = (SfxItemState) aItemStatus.State;
-                    // make sure no-one tries to send us a combination of states
-                    if (tmpState != SfxItemState::UNKNOWN && tmpState != SfxItemState::DISABLED &&
-                        tmpState != SfxItemState::READONLY && tmpState != SfxItemState::DONTCARE &&
-                        tmpState != SfxItemState::DEFAULT && tmpState != SfxItemState::SET)
-                        throw css::uno::RuntimeException("unknown status");
-                    eState = tmpState;
-                    pItem = new SfxVoidItem( nSlotId );
-                }
-                else if ( aType == cppu::UnoType< css::frame::status::Visibility>::get() )
-                {
-                    Visibility aVisibilityStatus;
-                    rEvent.State >>= aVisibilityStatus;
-                    pItem = new SfxVisibilityItem( nSlotId, aVisibilityStatus.bVisible );
-                }
-                else
-                {
-                    if ( pSlot )
-                        pItem = pSlot->GetType()->CreateItem();
-                    if ( pItem )
-                    {
-                        pItem->SetWhich( nSlotId );
-                        pItem->PutValue( rEvent.State, 0 );
-                    }
-                    else
-                        pItem = new SfxVoidItem( nSlotId );
-                }
-            }
-
-            if ( m_pCallee )
-                m_pCallee->StateChanged( nSlotId, eState, pItem );
-            delete pItem;
-        }
-    }
+    m_pCallee->statusChanged( rEvent );
 }
 
 SfxPopupWindow::SfxPopupWindow(
@@ -1060,22 +946,9 @@ void SfxPopupWindow::StartCascading()
 }
 
 
-void SfxPopupWindow::StateChanged(
-    sal_uInt16 /*nSID*/,
-    SfxItemState eState,
-    const SfxPoolItem* /*pState*/ )
-/*  [Description]
-
-    See also <SfxControllerItem::StateChanged()>. In addition the Popup
-    will become hidden when eState==SfxItemState::DISABLED and in all other
-    cases it will be shown again if it is floating. In general this requires
-    to call the Base class.
-
-    Due to the parent the presentation mode is handled in a special way.
-*/
-
+void SfxPopupWindow::statusChanged( const css::frame::FeatureStateEvent& rEvent )
 {
-    if ( SfxItemState::DISABLED == eState )
+    if ( !rEvent.IsEnabled )
     {
         Hide();
     }
diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx
index 22b6d8a..56b9ed2 100644
--- a/svx/source/tbxctrls/colorwindow.hxx
+++ b/svx/source/tbxctrls/colorwindow.hxx
@@ -35,8 +35,6 @@ class BorderColorStatus;
 
 class SvxColorWindow_Impl : public SfxPopupWindow
 {
-    using FloatingWindow::StateChanged;
-
 private:
     const sal_uInt16    theSlotId;
     VclPtr<SvxColorValueSet>   mpColorSet;
@@ -76,7 +74,7 @@ public:
     void                StartSelection();
 
     virtual void        KeyInput( const KeyEvent& rKEvt ) override;
-    virtual void        StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ) override;
+    virtual void        statusChanged( const css::frame::FeatureStateEvent& rEvent ) override;
 
     void SetSelectedHdl( const Link<const Color&, void>& rLink ) { maSelectedLink = rLink; }
 };
diff --git a/svx/source/tbxctrls/lboxctrl.cxx b/svx/source/tbxctrls/lboxctrl.cxx
index cb81b3d..1aab1bf 100644
--- a/svx/source/tbxctrls/lboxctrl.cxx
+++ b/svx/source/tbxctrls/lboxctrl.cxx
@@ -50,8 +50,6 @@ class SvxPopupWindowListBox;
 
 class SvxPopupWindowListBox: public SfxPopupWindow
 {
-    using FloatingWindow::StateChanged;
-
     VclPtr<ListBox> m_pListBox;
     ToolBox &       rToolBox;
     bool            bUserSel;
@@ -64,8 +62,7 @@ public:
 
     // SfxPopupWindow
     virtual void                PopupModeEnd() override;
-    virtual void                StateChanged( sal_uInt16 nSID, SfxItemState eState,
-                                              const SfxPoolItem* pState ) override;
+    virtual void                statusChanged( const css::frame::FeatureStateEvent& rEvent ) override;
 
     inline ListBox &            GetListBox()    { return *m_pListBox; }
 
@@ -118,11 +115,10 @@ void SvxPopupWindowListBox::PopupModeEnd()
 }
 
 
-void SvxPopupWindowListBox::StateChanged(
-        sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
+void SvxPopupWindowListBox::statusChanged( const css::frame::FeatureStateEvent& rEvent )
 {
-    rToolBox.EnableItem( nTbxId, ( SfxToolBoxControl::GetItemState( pState ) != SfxItemState::DISABLED) );
-    SfxPopupWindow::StateChanged( nSID, eState, pState );
+    rToolBox.EnableItem( nTbxId, rEvent.IsEnabled );
+    SfxPopupWindow::statusChanged( rEvent );
 }
 
 SvxListBoxControl::SvxListBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
diff --git a/svx/source/tbxctrls/linectrl.cxx b/svx/source/tbxctrls/linectrl.cxx
index c0b1c3e..5d5a2f5 100644
--- a/svx/source/tbxctrls/linectrl.cxx
+++ b/svx/source/tbxctrls/linectrl.cxx
@@ -483,15 +483,15 @@ void SvxLineEndWindow::StartSelection()
 }
 
 
-void SvxLineEndWindow::StateChanged(
-    sal_uInt16 nSID, SfxItemState, const SfxPoolItem* pState )
+void SvxLineEndWindow::statusChanged( const css::frame::FeatureStateEvent& rEvent )
 {
-    if ( nSID == SID_LINEEND_LIST )
+    if ( rEvent.FeatureURL.Complete == ".uno:LineEndListState" )
     {
         // The list of line ends (LineEndList) has changed
-        if ( pState && dynamic_cast<const SvxLineEndListItem*>( pState) !=  nullptr)
+        css::uno::Reference< css::uno::XWeak > xWeak;
+        if ( rEvent.State >>= xWeak )
         {
-            pLineEndList = static_cast<const SvxLineEndListItem*>(pState)->GetLineEndList();
+            pLineEndList.set( static_cast< XLineEndList* >( xWeak.get() ) );
             DBG_ASSERT( pLineEndList.is(), "LineEndList not found" );
 
             aLineEndSet->Clear();
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 6ea8a30..e6309dd 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -54,6 +54,7 @@
 #include <vcl/svapp.hxx>
 #include <vcl/settings.hxx>
 #include <svtools/colorcfg.hxx>
+#include <com/sun/star/table/BorderLine2.hpp>
 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
 #include <com/sun/star/lang/XServiceInfo.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
@@ -1466,38 +1467,28 @@ void SvxColorWindow_Impl::StartSelection()
     mpColorSet->StartSelection();
 }
 
-void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
+void SvxColorWindow_Impl::statusChanged( const css::frame::FeatureStateEvent& rEvent )
 {
-    if ( nSID == SID_COLOR_TABLE )
+    if ( rEvent.IsEnabled && rEvent.FeatureURL.Complete == ".uno:ColorTableState"
+         && mrPaletteManager.GetPalette() == 0)
     {
-        if ( SfxItemState::DEFAULT == eState && mrPaletteManager.GetPalette() == 0 )
-        {
-            mrPaletteManager.ReloadColorSet(*mpColorSet);
-            mpColorSet->layoutToGivenHeight(mpColorSet->GetSizePixel().Height(), mrPaletteManager.GetColorCount());
-        }
+        mrPaletteManager.ReloadColorSet(*mpColorSet);
+        mpColorSet->layoutToGivenHeight(mpColorSet->GetSizePixel().Height(), mrPaletteManager.GetColorCount());
     }
     else
     {
         mpColorSet->SetNoSelection();
         Color aColor( COL_TRANSPARENT );
 
-        if ( nSID == SID_FRAME_LINECOLOR
-          || nSID == SID_ATTR_BORDER_DIAG_TLBR
-          || nSID == SID_ATTR_BORDER_DIAG_BLTR )
+        if ( mrBorderColorStatus.statusChanged( rEvent ) )
         {
-            mrBorderColorStatus.StateChanged( nSID, eState, pState );
             aColor = mrBorderColorStatus.GetColor();
         }
-        else if ( SfxItemState::DEFAULT <= eState && pState )
+        else if ( rEvent.IsEnabled )
         {
-            if ( dynamic_cast<const SvxColorItem*>( pState) !=  nullptr )
-                aColor = static_cast<const SvxColorItem*>(pState)->GetValue();
-            else if ( dynamic_cast<const XLineColorItem*>( pState) !=  nullptr )
-                aColor = static_cast<const XLineColorItem*>(pState)->GetColorValue();
-            else if ( dynamic_cast<const XFillColorItem*>( pState) !=  nullptr )
-                aColor = static_cast<const XFillColorItem*>(pState)->GetColorValue();
-            else if ( dynamic_cast<const SvxBackgroundColorItem*>( pState) !=  nullptr )
-                aColor = static_cast<const SvxBackgroundColorItem*>(pState)->GetValue();
+            sal_Int32 nValue;
+            if ( rEvent.State >>= nValue )
+                aColor = nValue;
         }
 
         if ( aColor == COL_TRANSPARENT )
@@ -1526,33 +1517,38 @@ BorderColorStatus::~BorderColorStatus()
 {
 }
 
-void BorderColorStatus::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem *pState )
+bool BorderColorStatus::statusChanged( const css::frame::FeatureStateEvent& rEvent )
 {
-    if ( SfxItemState::DEFAULT <= eState && pState )
+    Color aColor( COL_TRANSPARENT );
+
+    if ( rEvent.FeatureURL.Complete == ".uno:FrameLineColor" )
+    {
+        sal_Int32 nValue;
+        if ( rEvent.IsEnabled && ( rEvent.State >>= nValue ) )
+            aColor = nValue;
+
+        maColor = aColor;
+        return true;
+    }
+    else
     {
-        if ( nSID == SID_FRAME_LINECOLOR && dynamic_cast<const SvxColorItem*>( pState) !=  nullptr )
+        css::table::BorderLine2 aTable;
+        if ( rEvent.IsEnabled && ( rEvent.State >>= aTable ) )
+            aColor = aTable.Color;
+
+        if ( rEvent.FeatureURL.Complete == ".uno:BorderTLBR" )
         {
-            maColor = static_cast< const SvxColorItem* >(pState)->GetValue();
+            maTLBRColor = aColor;
+            return true;
         }
-        else if ( dynamic_cast<const SvxLineItem*>( pState) !=  nullptr )
+        else if ( rEvent.FeatureURL.Complete == ".uno:BorderBLTR" )
         {
-            const SvxBorderLine* pLine = static_cast< const SvxLineItem* >(pState)->GetLine();
-            Color aColor ( COL_TRANSPARENT );
-            if ( pLine )
-                aColor = pLine->GetColor();
-
-            if ( nSID == SID_ATTR_BORDER_DIAG_TLBR )
-                maTLBRColor = aColor;
-            else if ( nSID == SID_ATTR_BORDER_DIAG_BLTR )
-                maBLTRColor = aColor;
+            maBLTRColor = aColor;
+            return true;
         }
     }
-    else if ( nSID == SID_FRAME_LINECOLOR )
-        maColor = COL_TRANSPARENT;
-    else if ( nSID == SID_ATTR_BORDER_DIAG_TLBR )
-        maTLBRColor = COL_TRANSPARENT;
-    else if ( nSID == SID_ATTR_BORDER_DIAG_BLTR )
-        maBLTRColor = COL_TRANSPARENT;
+
+    return false;
 }
 
 Color BorderColorStatus::GetColor()
@@ -2709,34 +2705,32 @@ IMPL_LINK(SvxColorToolBoxControl, SelectedHdl, const Color&, rColor, void)
     m_aPaletteManager.SetLastColor( rColor );
 }
 
-void SvxColorToolBoxControl::StateChanged(
-    sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
+void SvxColorToolBoxControl::statusChanged( const css::frame::FeatureStateEvent& rEvent )
+    throw ( css::uno::RuntimeException, std::exception )
 {
-    if ( nSID == SID_ATTR_CHAR_COLOR_EXT || nSID == SID_ATTR_CHAR_COLOR_BACKGROUND_EXT )
-        SfxToolBoxControl::StateChanged( nSID, eState, pState );
-    else if ( !m_bSplitButton )
+    if ( rEvent.FeatureURL.Complete == m_aCommandURL )
+        GetToolBox().EnableItem( GetId(), rEvent.IsEnabled );
+
+    bool bValue;
+    if ( !m_bSplitButton )
     {
         Color aColor( COL_TRANSPARENT );
 
-        if ( nSID == SID_FRAME_LINECOLOR
-          || nSID == SID_ATTR_BORDER_DIAG_TLBR
-          || nSID == SID_ATTR_BORDER_DIAG_BLTR )
+        if ( m_aBorderColorStatus.statusChanged( rEvent ) )
         {
-            m_aBorderColorStatus.StateChanged( nSID, eState, pState );
             aColor = m_aBorderColorStatus.GetColor();
         }
-        else if ( SfxItemState::DEFAULT <= eState && pState )
+        else if ( rEvent.IsEnabled )
         {
-            if ( dynamic_cast<const SvxColorItem*>( pState) !=  nullptr )
-                aColor = static_cast< const SvxColorItem* >(pState)->GetValue();
-            else if ( dynamic_cast<const XLineColorItem*>( pState) !=  nullptr )
-                aColor = static_cast< const XLineColorItem* >(pState)->GetColorValue();
-            else if ( dynamic_cast<const XFillColorItem*>( pState) !=  nullptr )
-                aColor = static_cast< const XFillColorItem* >(pState)->GetColorValue();
+            sal_Int32 nValue;
+            if ( rEvent.State >>= nValue )
+                aColor = nValue;
         }
         m_xBtnUpdater->Update( aColor );
         m_aPaletteManager.SetLastColor(aColor);
     }
+    else if ( rEvent.State >>= bValue )
+        GetToolBox().CheckItem( GetId(), bValue );
 }
 
 void SvxColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/)
commit f1bae1b5c0ba7949f6a91ba938be18589f9accaa
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Wed Oct 12 21:15:03 2016 +0300

    This comment is no longer true
    
    Change-Id: I5ad9bcba65f1f467f230fe05dff725c474c75494

diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 688a348..6ea8a30 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -2608,15 +2608,6 @@ VclPtr<vcl::Window> SvxFontNameToolBoxControl::CreateItemWindow( vcl::Window *pP
     return pBox.get();
 }
 
-/* Note:
-   The initial color shown on the button is set in /core/svx/source/tbxctrls/tbxcolorupdate.cxx
-   (ToolboxButtonColorUpdater::ToolboxButtonColorUpdater()) .
-   The initial color used by the button is set in /core/svx/source/tbxcntrls/tbcontrl.cxx
-   (SvxColorToolBoxControl::SvxColorToolBoxControl())
-   and in case of writer for text(background)color also in /core/sw/source/uibase/docvw/edtwin.cxx
-   (SwEditWin::m_aTextBackColor and SwEditWin::m_aTextColor)
- */
-
 SvxColorToolBoxControl::SvxColorToolBoxControl(
     sal_uInt16 nSlotId,
     sal_uInt16 nId,
diff --git a/svx/source/tbxctrls/tbxcolorupdate.cxx b/svx/source/tbxctrls/tbxcolorupdate.cxx
index 4756980..f41b913 100644
--- a/svx/source/tbxctrls/tbxcolorupdate.cxx
+++ b/svx/source/tbxctrls/tbxcolorupdate.cxx
@@ -29,17 +29,6 @@
 
 namespace svx
 {
-    //= ToolboxButtonColorUpdater
-
-    /* Note:
-       The initial color shown on the button is set in /core/svx/source/tbxctrls/tbxcolorupdate.cxx
-       (ToolboxButtonColorUpdater::ToolboxButtonColorUpdater()) .
-       The initial color used by the button is set in /core/svx/source/tbxctrls/tbcontrl.cxx
-       (SvxColorToolBoxControl::SvxColorToolBoxControl())
-       and in case of writer for text(background)color also in /core/sw/source/uibase/docvw/edtwin.cxx
-       (SwEditWin::m_aTextBackColor and SwEditWin::m_aTextColor)
-     */
-
     ToolboxButtonColorUpdater::ToolboxButtonColorUpdater(
         sal_uInt16 nId, sal_uInt16 nTbxBtnId, ToolBox* pToolBox)
         : mnBtnId(nTbxBtnId)
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index d39c6d9..d4a3514 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -186,12 +186,8 @@ QuickHelpData* SwEditWin::m_pQuickHlpData = nullptr;
 long    SwEditWin::m_nDDStartPosY = 0;
 long    SwEditWin::m_nDDStartPosX = 0;
 /**
- * The initial color shown on the button is set in /core/svx/source/tbxctrls/tbxcolorupdate.cxx
+ * The actual color used by the button is set in svx/source/tbxctrls/tbxcolorupdate.cxx
  * (ToolboxButtonColorUpdater::ToolboxButtonColorUpdater()) .
- * The initial color used by the button is set in /core/svx/source/tbxcntrls/tbcontrl.cxx
- * (SvxColorToolBoxControl::SvxColorToolBoxControl())
- * and in case of writer for text(background)color also in /core/sw/source/uibase/docvw/edtwin.cxx
- * (SwEditWin::m_aTextBackColor and SwEditWin::m_aTextColor)
  */
 Color   SwEditWin::m_aWaterCanTextBackColor(COL_YELLOW);
 Color   SwEditWin::m_aWaterCanTextColor(COL_RED);
commit a7a048f9a2ee1ef88eec0b02d44a94562788aa8a
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Wed Oct 12 21:11:04 2016 +0300

    SvxColorToolBoxControl: Some cleanup
    
    Change-Id: Iaf908b0c2456a239e343d0fcb89a2ba163b74010

diff --git a/include/svx/tbxcolorupdate.hxx b/include/svx/tbxcolorupdate.hxx
index 34e1689..0077eb8 100644
--- a/include/svx/tbxcolorupdate.hxx
+++ b/include/svx/tbxcolorupdate.hxx
@@ -49,6 +49,7 @@ namespace svx
                     ~ToolboxButtonColorUpdater();
 
         void        Update( const Color& rColor, bool bForceUpdate = false );
+        Color       GetCurrentColor() const { return maCurColor; }
 
     private:
         ToolboxButtonColorUpdater(ToolboxButtonColorUpdater &) = delete;
diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx
index db9b012..3ba0485 100644
--- a/svx/source/tbxctrls/PaletteManager.cxx
+++ b/svx/source/tbxctrls/PaletteManager.cxx
@@ -282,6 +282,7 @@ void PaletteManager::AddRecentColor(const Color& rRecentColor, const OUString& r
 void PaletteManager::SetBtnUpdater(svx::ToolboxButtonColorUpdater* pBtnUpdater)
 {
     mpBtnUpdater = pBtnUpdater;
+    mLastColor = mpBtnUpdater->GetCurrentColor();
 }
 
 void PaletteManager::SetColorSelectFunction(const std::function<void(const OUString&, const Color&)>& aColorSelectFunction)
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 59cef34..688a348 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -20,6 +20,7 @@
 #include <string>
 #include <utility>
 
+#include <comphelper/propertysequence.hxx>
 #include <tools/color.hxx>
 #include <svl/poolitem.hxx>
 #include <svl/eitem.hxx>
@@ -2624,56 +2625,24 @@ SvxColorToolBoxControl::SvxColorToolBoxControl(
     m_bSplitButton(dynamic_cast< sfx2::sidebar::SidebarToolBox* >(&rTbx) == nullptr),
     m_aColorSelectFunction(PaletteManager::DispatchColorCommand)
 {
-    // The following commands are available at the various modules
     switch( nSlotId )
     {
-        case SID_ATTR_CHAR_COLOR:
-            addStatusListener( ".uno:Color");
-            m_aPaletteManager.SetLastColor( COL_RED );
-            m_bSplitButton = true;
-            break;
-
         case SID_ATTR_CHAR_COLOR2:
             addStatusListener( ".uno:CharColorExt");
-            m_aPaletteManager.SetLastColor( COL_RED );
-            m_bSplitButton = true;
-            break;
+            SAL_FALLTHROUGH;
 
-        case SID_BACKGROUND_COLOR:
-            addStatusListener( ".uno:BackgroundColor");
-            m_aPaletteManager.SetLastColor( COL_YELLOW );
+        case SID_ATTR_CHAR_COLOR:
+            m_bSplitButton = true;
             break;
 
         case SID_ATTR_CHAR_COLOR_BACKGROUND:
             addStatusListener( ".uno:CharBackgroundExt");
-            m_aPaletteManager.SetLastColor( COL_YELLOW );
             m_bSplitButton = true;
             break;
 
-        case SID_ATTR_CHAR_BACK_COLOR:
-            addStatusListener( ".uno:CharBackColor");
-            m_aPaletteManager.SetLastColor( COL_YELLOW );
-            break;
-
         case SID_FRAME_LINECOLOR:
-            addStatusListener( ".uno:FrameLineColor");
             addStatusListener( ".uno:BorderTLBR");
             addStatusListener( ".uno:BorderBLTR");
-            m_aPaletteManager.SetLastColor( COL_BLUE );
-            break;
-
-        case SID_EXTRUSION_3D_COLOR:
-            addStatusListener( ".uno:Extrusion3DColor");
-            break;
-
-        case SID_ATTR_LINE_COLOR:
-            addStatusListener( ".uno:XLineColor");
-            m_aPaletteManager.SetLastColor( COL_DEFAULT_SHAPE_STROKE );
-            break;
-
-        case SID_ATTR_FILL_COLOR:
-            addStatusListener( ".uno:FillColor");
-            m_aPaletteManager.SetLastColor( COL_DEFAULT_SHAPE_FILLING );
             break;
     }
 
@@ -2790,60 +2759,22 @@ void SvxColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/)
         return;
     }
 
-    OUString aCommand;
-    OUString aParamName;
+    OUString aCommand = m_aCommandURL;
 
     switch( GetSlotId() )
     {
         case SID_ATTR_CHAR_COLOR2 :
             aCommand    = ".uno:CharColorExt";
-            aParamName  = "FontColor";
-            break;
-
-        case SID_ATTR_CHAR_COLOR  :
-            aCommand    = ".uno:Color";
-            aParamName  = "Color";
-            break;
-
-        case SID_BACKGROUND_COLOR :
-            aCommand    = ".uno:BackgroundColor";
-            aParamName  = "BackgroundColor";
             break;
 
         case SID_ATTR_CHAR_COLOR_BACKGROUND :
             aCommand    = ".uno:CharBackgroundExt";
-            aParamName  = "BackColor";
-            break;
-
-        case SID_ATTR_CHAR_BACK_COLOR :
-            aCommand    = ".uno:CharBackColor";
-            aParamName  = "CharBackColor";
-            break;
-
-        case SID_FRAME_LINECOLOR  :
-            aCommand    = ".uno:FrameLineColor";
-            aParamName  = "FrameLineColor";
-            break;
-
-        case SID_EXTRUSION_3D_COLOR:
-            aCommand    = ".uno:Extrusion3DColor";
-            aParamName  = "Extrusion3DColor";
-            break;
-
-        case SID_ATTR_LINE_COLOR:
-            aCommand    = ".uno:XLineColor";
-            aParamName  = "XLineColor";
-            break;
-
-        case SID_ATTR_FILL_COLOR:
-            aCommand    = ".uno:FillColor";
-            aParamName  = "FillColor";
             break;
     }
 
-    Sequence< PropertyValue > aArgs( 1 );
-    aArgs[0].Name  = aParamName;
-    aArgs[0].Value = makeAny( (sal_uInt32)( m_aPaletteManager.GetLastColor().GetColor() ));
+    auto aArgs( comphelper::InitPropertySequence( {
+        { m_aCommandURL.copy(5), css::uno::makeAny( m_aPaletteManager.GetLastColor().GetColor() ) }
+    } ) );
     Dispatch( aCommand, aArgs );
 }
 
diff --git a/svx/source/tbxctrls/tbxcolorupdate.cxx b/svx/source/tbxctrls/tbxcolorupdate.cxx
index ef16fc1..4756980 100644
--- a/svx/source/tbxctrls/tbxcolorupdate.cxx
+++ b/svx/source/tbxctrls/tbxcolorupdate.cxx
@@ -59,6 +59,7 @@ namespace svx
                 Update(COL_BLUE);
                 break;
             case SID_ATTR_CHAR_COLOR_BACKGROUND:
+            case SID_ATTR_CHAR_BACK_COLOR:
             case SID_BACKGROUND_COLOR:
                 Update(COL_YELLOW);
                 break;
commit 670dc7515046dbb1c3574329fe22721d81e9a15e
Author: Maxim Monastirsky <momonasmon at gmail.com>
Date:   Thu Oct 13 10:29:19 2016 +0300

    SvxColorToolBoxControl: Unify members prefix
    
    and rename bSidebarType to something more sensible.
    
    Change-Id: Ia41afe4ecc3068394cb41cc4c3caddce59905103

diff --git a/include/svx/tbcontrl.hxx b/include/svx/tbcontrl.hxx
index 7c19420..174c16d 100644
--- a/include/svx/tbcontrl.hxx
+++ b/include/svx/tbcontrl.hxx
@@ -232,10 +232,10 @@ class SVX_DLLPUBLIC SvxColorToolBoxControl : public SfxToolBoxControl
     using SfxToolBoxControl::StateChanged;
 
     std::unique_ptr<svx::ToolboxButtonColorUpdater> m_xBtnUpdater;
-    PaletteManager mPaletteManager;
-    BorderColorStatus maBorderColorStatus;
-    bool bSidebarType;
-    ColorSelectFunction maColorSelectFunction;
+    PaletteManager m_aPaletteManager;
+    BorderColorStatus m_aBorderColorStatus;
+    bool m_bSplitButton;
+    ColorSelectFunction m_aColorSelectFunction;
     DECL_LINK(SelectedHdl, const Color&, void);
 public:
     SFX_DECL_TOOLBOX_CONTROL();
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 6006c4e..59cef34 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -2621,49 +2621,45 @@ SvxColorToolBoxControl::SvxColorToolBoxControl(
     sal_uInt16 nId,
     ToolBox& rTbx ):
     SfxToolBoxControl( nSlotId, nId, rTbx ),
-    maColorSelectFunction(PaletteManager::DispatchColorCommand)
+    m_bSplitButton(dynamic_cast< sfx2::sidebar::SidebarToolBox* >(&rTbx) == nullptr),
+    m_aColorSelectFunction(PaletteManager::DispatchColorCommand)
 {
-    if ( dynamic_cast< sfx2::sidebar::SidebarToolBox* >(&rTbx) )
-        bSidebarType = true;
-    else
-        bSidebarType = false;
-
     // The following commands are available at the various modules
     switch( nSlotId )
     {
         case SID_ATTR_CHAR_COLOR:
             addStatusListener( ".uno:Color");
-            mPaletteManager.SetLastColor( COL_RED );
-            bSidebarType = false;
+            m_aPaletteManager.SetLastColor( COL_RED );
+            m_bSplitButton = true;
             break;
 
         case SID_ATTR_CHAR_COLOR2:
             addStatusListener( ".uno:CharColorExt");
-            mPaletteManager.SetLastColor( COL_RED );
-            bSidebarType = false;
+            m_aPaletteManager.SetLastColor( COL_RED );
+            m_bSplitButton = true;
             break;
 
         case SID_BACKGROUND_COLOR:
             addStatusListener( ".uno:BackgroundColor");
-            mPaletteManager.SetLastColor( COL_YELLOW );
+            m_aPaletteManager.SetLastColor( COL_YELLOW );
             break;
 
         case SID_ATTR_CHAR_COLOR_BACKGROUND:
             addStatusListener( ".uno:CharBackgroundExt");
-            mPaletteManager.SetLastColor( COL_YELLOW );
-            bSidebarType = false;
+            m_aPaletteManager.SetLastColor( COL_YELLOW );
+            m_bSplitButton = true;
             break;
 
         case SID_ATTR_CHAR_BACK_COLOR:
             addStatusListener( ".uno:CharBackColor");
-            mPaletteManager.SetLastColor( COL_YELLOW );
+            m_aPaletteManager.SetLastColor( COL_YELLOW );
             break;
 
         case SID_FRAME_LINECOLOR:
             addStatusListener( ".uno:FrameLineColor");
             addStatusListener( ".uno:BorderTLBR");
             addStatusListener( ".uno:BorderBLTR");
-            mPaletteManager.SetLastColor( COL_BLUE );
+            m_aPaletteManager.SetLastColor( COL_BLUE );
             break;
 
         case SID_EXTRUSION_3D_COLOR:
@@ -2672,22 +2668,18 @@ SvxColorToolBoxControl::SvxColorToolBoxControl(
 
         case SID_ATTR_LINE_COLOR:
             addStatusListener( ".uno:XLineColor");
-            mPaletteManager.SetLastColor( COL_DEFAULT_SHAPE_STROKE );
+            m_aPaletteManager.SetLastColor( COL_DEFAULT_SHAPE_STROKE );
             break;
 
         case SID_ATTR_FILL_COLOR:
             addStatusListener( ".uno:FillColor");
-            mPaletteManager.SetLastColor( COL_DEFAULT_SHAPE_FILLING );
+            m_aPaletteManager.SetLastColor( COL_DEFAULT_SHAPE_FILLING );
             break;
     }
 
-    if ( bSidebarType )
-        rTbx.SetItemBits( nId, ToolBoxItemBits::DROPDOWNONLY | rTbx.GetItemBits( nId ) );
-    else
-        rTbx.SetItemBits( nId, ToolBoxItemBits::DROPDOWN | rTbx.GetItemBits( nId ) );
-
+    rTbx.SetItemBits( nId, rTbx.GetItemBits( nId ) | ( m_bSplitButton ? ToolBoxItemBits::DROPDOWN : ToolBoxItemBits::DROPDOWNONLY ) );
     m_xBtnUpdater.reset( new svx::ToolboxButtonColorUpdater( nSlotId, nId, &GetToolBox() ) );
-    mPaletteManager.SetBtnUpdater( m_xBtnUpdater.get() );
+    m_aPaletteManager.SetBtnUpdater( m_xBtnUpdater.get() );
 }
 
 SvxColorToolBoxControl::~SvxColorToolBoxControl()
@@ -2696,8 +2688,8 @@ SvxColorToolBoxControl::~SvxColorToolBoxControl()
 
 void SvxColorToolBoxControl::setColorSelectFunction(const ColorSelectFunction& aColorSelectFunction)
 {
-    maColorSelectFunction = aColorSelectFunction;
-    mPaletteManager.SetColorSelectFunction(aColorSelectFunction);
+    m_aColorSelectFunction = aColorSelectFunction;
+    m_aPaletteManager.SetColorSelectFunction(aColorSelectFunction);
 }
 
 VclPtr<SfxPopupWindow> SvxColorToolBoxControl::CreatePopupWindow()
@@ -2706,13 +2698,13 @@ VclPtr<SfxPopupWindow> SvxColorToolBoxControl::CreatePopupWindow()
         VclPtr<SvxColorWindow_Impl>::Create(
 
                             m_aCommandURL,
-                            mPaletteManager,
-                            maBorderColorStatus,
+                            m_aPaletteManager,
+                            m_aBorderColorStatus,
                             GetSlotId(),
                             m_xFrame,
                             SVX_RESSTR( RID_SVXITEMS_EXTRAS_CHARCOLOR ),
                             &GetToolBox(),
-                            maColorSelectFunction);
+                            m_aColorSelectFunction);
 
     switch( GetSlotId() )
     {
@@ -2746,7 +2738,7 @@ VclPtr<SfxPopupWindow> SvxColorToolBoxControl::CreatePopupWindow()
         FloatWinPopupFlags::AllowTearOff|FloatWinPopupFlags::NoAppFocusClose );
     pColorWin->StartSelection();
     SetPopupWindow( pColorWin );
-    if ( !bSidebarType )
+    if ( m_bSplitButton )
         pColorWin->SetSelectedHdl( LINK( this, SvxColorToolBoxControl, SelectedHdl ) );
     return pColorWin;
 }
@@ -2754,7 +2746,7 @@ VclPtr<SfxPopupWindow> SvxColorToolBoxControl::CreatePopupWindow()
 IMPL_LINK(SvxColorToolBoxControl, SelectedHdl, const Color&, rColor, void)
 {
     m_xBtnUpdater->Update( rColor );
-    mPaletteManager.SetLastColor( rColor );
+    m_aPaletteManager.SetLastColor( rColor );
 }
 
 void SvxColorToolBoxControl::StateChanged(
@@ -2762,7 +2754,7 @@ void SvxColorToolBoxControl::StateChanged(
 {
     if ( nSID == SID_ATTR_CHAR_COLOR_EXT || nSID == SID_ATTR_CHAR_COLOR_BACKGROUND_EXT )
         SfxToolBoxControl::StateChanged( nSID, eState, pState );
-    else if ( bSidebarType )
+    else if ( !m_bSplitButton )
     {
         Color aColor( COL_TRANSPARENT );
 
@@ -2770,8 +2762,8 @@ void SvxColorToolBoxControl::StateChanged(
           || nSID == SID_ATTR_BORDER_DIAG_TLBR
           || nSID == SID_ATTR_BORDER_DIAG_BLTR )
         {
-            maBorderColorStatus.StateChanged( nSID, eState, pState );
-            aColor = maBorderColorStatus.GetColor();
+            m_aBorderColorStatus.StateChanged( nSID, eState, pState );
+            aColor = m_aBorderColorStatus.GetColor();
         }
         else if ( SfxItemState::DEFAULT <= eState && pState )
         {
@@ -2783,13 +2775,13 @@ void SvxColorToolBoxControl::StateChanged(
                 aColor = static_cast< const XFillColorItem* >(pState)->GetColorValue();
         }
         m_xBtnUpdater->Update( aColor );
-        mPaletteManager.SetLastColor(aColor);
+        m_aPaletteManager.SetLastColor(aColor);
     }
 }
 
 void SvxColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/)
 {
-    if ( bSidebarType )
+    if ( !m_bSplitButton )
     {
         // Open the popup also when Enter key is pressed.
         css::uno::Reference< css::awt::XWindow > xWin = createPopupWindow();
@@ -2851,17 +2843,17 @@ void SvxColorToolBoxControl::Select(sal_uInt16 /*nSelectModifier*/)
 
     Sequence< PropertyValue > aArgs( 1 );
     aArgs[0].Name  = aParamName;
-    aArgs[0].Value = makeAny( (sal_uInt32)( mPaletteManager.GetLastColor().GetColor() ));
+    aArgs[0].Value = makeAny( (sal_uInt32)( m_aPaletteManager.GetLastColor().GetColor() ));
     Dispatch( aCommand, aArgs );
 }
 
 sal_Bool SvxColorToolBoxControl::opensSubToolbar()
     throw (css::uno::RuntimeException, std::exception)
 {
-    // For a split button (i.e. bSidebarType == false), we mark this controller as
-    // a sub-toolbar controller, so we get notified (through updateImage method) on
-    // button image changes, and could redraw the last used color on top of it.
-    return !bSidebarType;
+    // For a split button, we mark this controller as a sub-toolbar controller,
+    // so we get notified (through updateImage method) on button image changes,
+    // and could redraw the last used color on top of it.
+    return m_bSplitButton;
 }
 
 void SvxColorToolBoxControl::updateImage()
@@ -2871,7 +2863,7 @@ void SvxColorToolBoxControl::updateImage()
     if ( !!aImage )
     {
         GetToolBox().SetItemImage( GetId(), aImage );
-        m_xBtnUpdater->Update( mPaletteManager.GetLastColor(), true );
+        m_xBtnUpdater->Update( m_aPaletteManager.GetLastColor(), true );
     }
 }
 


More information about the Libreoffice-commits mailing list