weld AreaPropertyPanel

Change-Id: I5f4c4b43067b99cd57f8ea941002481ef5977e09
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86144
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/chart2/source/controller/sidebar/ChartAreaPanel.cxx b/chart2/source/controller/sidebar/ChartAreaPanel.cxx
index 61e7231..1260b36 100644
--- a/chart2/source/controller/sidebar/ChartAreaPanel.cxx
+++ b/chart2/source/controller/sidebar/ChartAreaPanel.cxx
@@ -17,6 +17,7 @@
#include <com/sun/star/util/XModifyBroadcaster.hpp>
#include <com/sun/star/chart2/XDiagram.hpp>

#include <sfx2/weldutils.hxx>
#include <svx/xfltrit.hxx>
#include <svx/xflftrit.hxx>
#include <svx/xbtmpit.hxx>
@@ -29,9 +30,9 @@ namespace chart { namespace sidebar {

namespace {

SvxColorToolBoxControl* getColorToolBoxControl(sfx2::sidebar::SidebarToolBox* pToolBoxColor)
SvxColorToolBoxControl* getColorToolBoxControl(ToolbarUnoDispatcher& rColorDispatch)
{
    css::uno::Reference<css::frame::XToolbarController> xController = pToolBoxColor->GetFirstController();
    css::uno::Reference<css::frame::XToolbarController> xController = rColorDispatch.GetControllerForCommand(".uno:FillColor");
    SvxColorToolBoxControl* pToolBoxColorControl = dynamic_cast<SvxColorToolBoxControl*>(xController.get());
    return pToolBoxColorControl;
}
@@ -261,7 +262,7 @@ ChartAreaPanel::ChartAreaPanel(vcl::Window* pParent,
    mxSelectionListener(new ChartSidebarSelectionListener(this)),
    mbUpdate(true),
    mbModelValid(true),
    maFillColorWrapper(mxModel, getColorToolBoxControl(mpToolBoxColor.get()), "FillColor")
    maFillColorWrapper(mxModel, getColorToolBoxControl(*mxColorDispatch), "FillColor")
{
    std::vector<ObjectType> aAcceptedTypes { OBJECTTYPE_PAGE, OBJECTTYPE_DIAGRAM,
        OBJECTTYPE_DATA_SERIES, OBJECTTYPE_DATA_POINT,
@@ -296,7 +297,7 @@ void ChartAreaPanel::Initialize()
    if (xSelectionSupplier.is())
        xSelectionSupplier->addSelectionChangeListener(mxSelectionListener.get());

    SvxColorToolBoxControl* pToolBoxColor = getColorToolBoxControl(mpToolBoxColor.get());
    SvxColorToolBoxControl* pToolBoxColor = getColorToolBoxControl(*mxColorDispatch);
    pToolBoxColor->setColorSelectFunction(maFillColorWrapper);

    updateData();
diff --git a/framework/inc/uielement/complextoolbarcontroller.hxx b/framework/inc/uielement/complextoolbarcontroller.hxx
index fad83e6..5c5bf84 100644
--- a/framework/inc/uielement/complextoolbarcontroller.hxx
+++ b/framework/inc/uielement/complextoolbarcontroller.hxx
@@ -88,7 +88,7 @@ class ComplexToolbarController : public svt::ToolboxController
        void notifyFocusLost();
        void notifyTextChanged( const OUString& aText );

        VclPtr<ToolBox>                                      m_pToolbar;
        VclPtr<ToolBox>                                      m_xToolbar;
        sal_uInt16                                           m_nID;
        bool                                                 m_bMadeInvisible;
        mutable css::util::URL                               m_aURL;
diff --git a/framework/inc/uielement/generictoolbarcontroller.hxx b/framework/inc/uielement/generictoolbarcontroller.hxx
index b1d7c5b..4eee88c 100644
--- a/framework/inc/uielement/generictoolbarcontroller.hxx
+++ b/framework/inc/uielement/generictoolbarcontroller.hxx
@@ -62,7 +62,7 @@ class GenericToolbarController final : public svt::ToolboxController
        };

    private:
        VclPtr<ToolBox>     m_pToolbar;
        VclPtr<ToolBox>     m_xToolbar;
        sal_uInt16          m_nID;
        bool                m_bEnumCommand : 1,
                            m_bMadeInvisible : 1;
diff --git a/framework/source/uielement/FixedImageToolbarController.cxx b/framework/source/uielement/FixedImageToolbarController.cxx
index e3a37e9..19e05f0 100644
--- a/framework/source/uielement/FixedImageToolbarController.cxx
+++ b/framework/source/uielement/FixedImageToolbarController.cxx
@@ -42,8 +42,8 @@ FixedImageToolbarController::FixedImageToolbarController(
    : ComplexToolbarController(rxContext, rFrame, pToolbar, nID, aCommand)
    , m_eSymbolSize(SvtMiscOptions().GetCurrentSymbolsSize())
{
    m_pFixedImageControl = VclPtr<FixedImage>::Create(m_pToolbar, 0);
    m_pToolbar->SetItemWindow(m_nID, m_pFixedImageControl);
    m_pFixedImageControl = VclPtr<FixedImage>::Create(m_xToolbar, 0);
    m_xToolbar->SetItemWindow(m_nID, m_pFixedImageControl);

    bool bBigImages(SvtMiscOptions().AreCurrentSymbolsLarge());

@@ -59,7 +59,7 @@ void SAL_CALL FixedImageToolbarController::dispose()
    SolarMutexGuard aSolarMutexGuard;
    SvtMiscOptions().RemoveListenerLink(
        LINK(this, FixedImageToolbarController, MiscOptionsChanged));
    m_pToolbar->SetItemWindow(m_nID, nullptr);
    m_xToolbar->SetItemWindow(m_nID, nullptr);
    m_pFixedImageControl.disposeAndClear();
    ComplexToolbarController::dispose();
}
diff --git a/framework/source/uielement/FixedTextToolbarController.cxx b/framework/source/uielement/FixedTextToolbarController.cxx
index 97a9809..26208cc 100644
--- a/framework/source/uielement/FixedTextToolbarController.cxx
+++ b/framework/source/uielement/FixedTextToolbarController.cxx
@@ -38,16 +38,16 @@ FixedTextToolbarController::FixedTextToolbarController(
    ToolBox* pToolbar, sal_uInt16 nID, const OUString& aCommand)
    : ComplexToolbarController(rxContext, rFrame, pToolbar, nID, aCommand)
{
    m_pFixedTextControl = VclPtr<FixedText>::Create(m_pToolbar, WB_NOMULTILINE | WB_VCENTER
    m_pFixedTextControl = VclPtr<FixedText>::Create(m_xToolbar, WB_NOMULTILINE | WB_VCENTER
                                                                    | WB_LEFT | WB_NOPOINTERFOCUS);
    m_pToolbar->SetItemWindow(m_nID, m_pFixedTextControl);
    m_pToolbar->SetItemBits(m_nID, ToolBoxItemBits::AUTOSIZE | m_pToolbar->GetItemBits(m_nID));
    m_xToolbar->SetItemWindow(m_nID, m_pFixedTextControl);
    m_xToolbar->SetItemBits(m_nID, ToolBoxItemBits::AUTOSIZE | m_xToolbar->GetItemBits(m_nID));
}

void SAL_CALL FixedTextToolbarController::dispose()
{
    SolarMutexGuard aSolarMutexGuard;
    m_pToolbar->SetItemWindow(m_nID, nullptr);
    m_xToolbar->SetItemWindow(m_nID, nullptr);
    m_pFixedTextControl.disposeAndClear();
    ComplexToolbarController::dispose();
}
diff --git a/framework/source/uielement/comboboxtoolbarcontroller.cxx b/framework/source/uielement/comboboxtoolbarcontroller.cxx
index 699fd67..fedb1b7 100644
--- a/framework/source/uielement/comboboxtoolbarcontroller.cxx
+++ b/framework/source/uielement/comboboxtoolbarcontroller.cxx
@@ -124,7 +124,7 @@ ComboboxToolbarController::ComboboxToolbarController(
    ComplexToolbarController( rxContext, rFrame, pToolbar, nID, aCommand )
    ,   m_pComboBox( nullptr )
{
    m_pComboBox = VclPtr<ComboBoxControl>::Create( m_pToolbar, WB_DROPDOWN, this );
    m_pComboBox = VclPtr<ComboBoxControl>::Create( m_xToolbar, WB_DROPDOWN, this );
    if ( nWidth == 0 )
        nWidth = 100;

@@ -133,7 +133,7 @@ ComboboxToolbarController::ComboboxToolbarController(
    ::Size aPixelSize = m_pComboBox->LogicToPixel(aLogicalSize, MapMode(MapUnit::MapAppFont));

    m_pComboBox->SetSizePixel( ::Size( nWidth, aPixelSize.Height() ));
    m_pToolbar->SetItemWindow( m_nID, m_pComboBox );
    m_xToolbar->SetItemWindow( m_nID, m_pComboBox );
}

ComboboxToolbarController::~ComboboxToolbarController()
@@ -144,7 +144,7 @@ void SAL_CALL ComboboxToolbarController::dispose()
{
    SolarMutexGuard aSolarMutexGuard;

    m_pToolbar->SetItemWindow( m_nID, nullptr );
    m_xToolbar->SetItemWindow( m_nID, nullptr );
    m_pComboBox.disposeAndClear();

    ComplexToolbarController::dispose();
diff --git a/framework/source/uielement/complextoolbarcontroller.cxx b/framework/source/uielement/complextoolbarcontroller.cxx
index 51ede7a..eb4a59f 100644
--- a/framework/source/uielement/complextoolbarcontroller.cxx
+++ b/framework/source/uielement/complextoolbarcontroller.cxx
@@ -53,7 +53,7 @@ ComplexToolbarController::ComplexToolbarController(
    sal_uInt16                            nID,
    const OUString&                       aCommand ) :
    svt::ToolboxController( rxContext, rFrame, aCommand )
    ,   m_pToolbar( pToolbar )
    ,   m_xToolbar( pToolbar )
    ,   m_nID( nID )
    ,   m_bMadeInvisible( false )
{
@@ -68,11 +68,11 @@ void SAL_CALL ComplexToolbarController::dispose()
{
    SolarMutexGuard aSolarMutexGuard;

    m_pToolbar->SetItemWindow( m_nID, nullptr );
    m_xToolbar->SetItemWindow( m_nID, nullptr );
    svt::ToolboxController::dispose();

    m_xURLTransformer.clear();
    m_pToolbar.clear();
    m_xToolbar.clear();
    m_nID = 0;
}

@@ -128,11 +128,11 @@ void ComplexToolbarController::statusChanged( const FeatureStateEvent& Event )
    if ( m_bDisposed )
        return;

    if ( m_pToolbar )
    if ( m_xToolbar )
    {
        m_pToolbar->EnableItem( m_nID, Event.IsEnabled );
        m_xToolbar->EnableItem( m_nID, Event.IsEnabled );

        ToolBoxItemBits nItemBits = m_pToolbar->GetItemBits( m_nID );
        ToolBoxItemBits nItemBits = m_xToolbar->GetItemBits( m_nID );
        nItemBits &= ~ToolBoxItemBits::CHECKABLE;
        TriState eTri = TRISTATE_FALSE;

@@ -146,8 +146,8 @@ void ComplexToolbarController::statusChanged( const FeatureStateEvent& Event )
        {
            // Boolean, treat it as checked/unchecked
            if ( m_bMadeInvisible )
                m_pToolbar->ShowItem( m_nID );
            m_pToolbar->CheckItem( m_nID, bValue );
                m_xToolbar->ShowItem( m_nID );
            m_xToolbar->CheckItem( m_nID, bValue );
            if ( bValue )
                eTri = TRISTATE_TRUE;
            nItemBits |= ToolBoxItemBits::CHECKABLE;
@@ -155,22 +155,22 @@ void ComplexToolbarController::statusChanged( const FeatureStateEvent& Event )
        else if ( Event.State >>= aStrValue )
        {
            OUString aText( MnemonicGenerator::EraseAllMnemonicChars( aStrValue ) );
            m_pToolbar->SetItemText( m_nID, aText );
            m_pToolbar->SetQuickHelpText( m_nID, aText );
            m_xToolbar->SetItemText( m_nID, aText );
            m_xToolbar->SetQuickHelpText( m_nID, aText );

            if ( m_bMadeInvisible )
                m_pToolbar->ShowItem( m_nID );
                m_xToolbar->ShowItem( m_nID );
        }
        else if ( Event.State >>= aItemState )
        {
            eTri = TRISTATE_INDET;
            nItemBits |= ToolBoxItemBits::CHECKABLE;
            if ( m_bMadeInvisible )
                m_pToolbar->ShowItem( m_nID );
                m_xToolbar->ShowItem( m_nID );
        }
        else if ( Event.State >>= aItemVisibility )
        {
            m_pToolbar->ShowItem( m_nID, aItemVisibility.bVisible );
            m_xToolbar->ShowItem( m_nID, aItemVisibility.bVisible );
            m_bMadeInvisible = !aItemVisibility.bVisible;
        }
        else if ( Event.State >>= aControlCommand )
@@ -183,7 +183,7 @@ void ComplexToolbarController::statusChanged( const FeatureStateEvent& Event )
                    {
                        OUString aHelpText;
                        aControlCommand.Arguments[i].Value >>= aHelpText;
                        m_pToolbar->SetQuickHelpText(m_nID, aHelpText);
                        m_xToolbar->SetQuickHelpText(m_nID, aHelpText);
                        break;
                    }
                }
@@ -193,14 +193,14 @@ void ComplexToolbarController::statusChanged( const FeatureStateEvent& Event )
                executeControlCommand( aControlCommand );
            }
            if ( m_bMadeInvisible )
                m_pToolbar->ShowItem( m_nID );
                m_xToolbar->ShowItem( m_nID );
        }

        else if ( m_bMadeInvisible )
            m_pToolbar->ShowItem( m_nID );
            m_xToolbar->ShowItem( m_nID );

        m_pToolbar->SetItemState( m_nID, eTri );
        m_pToolbar->SetItemBits( m_nID, nItemBits );
        m_xToolbar->SetItemState( m_nID, eTri );
        m_xToolbar->SetItemBits( m_nID, nItemBits );
    }
}

diff --git a/framework/source/uielement/dropdownboxtoolbarcontroller.cxx b/framework/source/uielement/dropdownboxtoolbarcontroller.cxx
index ef73758..6eacd13 100644
--- a/framework/source/uielement/dropdownboxtoolbarcontroller.cxx
+++ b/framework/source/uielement/dropdownboxtoolbarcontroller.cxx
@@ -116,7 +116,7 @@ DropdownToolbarController::DropdownToolbarController(
    ComplexToolbarController( rxContext, rFrame, pToolbar, nID, aCommand )
    ,   m_pListBoxControl( nullptr )
{
    m_pListBoxControl = VclPtr<ListBoxControl>::Create( m_pToolbar, WB_DROPDOWN|WB_AUTOHSCROLL|WB_BORDER, this );
    m_pListBoxControl = VclPtr<ListBoxControl>::Create( m_xToolbar, WB_DROPDOWN|WB_AUTOHSCROLL|WB_BORDER, this );
    if ( nWidth == 0 )
        nWidth = 100;

@@ -125,7 +125,7 @@ DropdownToolbarController::DropdownToolbarController(
    ::Size aPixelSize = m_pListBoxControl->LogicToPixel(aLogicalSize, MapMode(MapUnit::MapAppFont));

    m_pListBoxControl->SetSizePixel( ::Size( nWidth, aPixelSize.Height() ));
    m_pToolbar->SetItemWindow( m_nID, m_pListBoxControl );
    m_xToolbar->SetItemWindow( m_nID, m_pListBoxControl );
    m_pListBoxControl->SetDropDownLineCount( 5 );
}

@@ -137,7 +137,7 @@ void SAL_CALL DropdownToolbarController::dispose()
{
    SolarMutexGuard aSolarMutexGuard;

    m_pToolbar->SetItemWindow( m_nID, nullptr );
    m_xToolbar->SetItemWindow( m_nID, nullptr );
    m_pListBoxControl.disposeAndClear();

    ComplexToolbarController::dispose();
diff --git a/framework/source/uielement/edittoolbarcontroller.cxx b/framework/source/uielement/edittoolbarcontroller.cxx
index 0ec00b7..2e61641 100644
--- a/framework/source/uielement/edittoolbarcontroller.cxx
+++ b/framework/source/uielement/edittoolbarcontroller.cxx
@@ -116,7 +116,7 @@ EditToolbarController::EditToolbarController(
    ComplexToolbarController( rxContext, rFrame, pToolbar, nID, aCommand )
    ,   m_pEditControl( nullptr )
{
    m_pEditControl = VclPtr<EditControl>::Create( m_pToolbar, WB_BORDER, this );
    m_pEditControl = VclPtr<EditControl>::Create( m_xToolbar, WB_BORDER, this );
    if ( nWidth == 0 )
        nWidth = 100;

@@ -124,7 +124,7 @@ EditToolbarController::EditToolbarController(
    sal_Int32 nHeight = getFontSizePixel( m_pEditControl ) + 6 + 1;

    m_pEditControl->SetSizePixel( ::Size( nWidth, nHeight ));
    m_pToolbar->SetItemWindow( m_nID, m_pEditControl );
    m_xToolbar->SetItemWindow( m_nID, m_pEditControl );
}

EditToolbarController::~EditToolbarController()
@@ -135,7 +135,7 @@ void SAL_CALL EditToolbarController::dispose()
{
    SolarMutexGuard aSolarMutexGuard;

    m_pToolbar->SetItemWindow( m_nID, nullptr );
    m_xToolbar->SetItemWindow( m_nID, nullptr );
    m_pEditControl.disposeAndClear();

    ComplexToolbarController::dispose();
diff --git a/framework/source/uielement/generictoolbarcontroller.cxx b/framework/source/uielement/generictoolbarcontroller.cxx
index 746f4e1..770f586 100644
--- a/framework/source/uielement/generictoolbarcontroller.cxx
+++ b/framework/source/uielement/generictoolbarcontroller.cxx
@@ -92,7 +92,7 @@ GenericToolbarController::GenericToolbarController( const Reference< XComponentC
                                                    sal_uInt16                               nID,
                                                    const OUString&                          aCommand ) :
    svt::ToolboxController( rxContext, rFrame, aCommand )
    ,   m_pToolbar( pToolbar )
    ,   m_xToolbar( pToolbar )
    ,   m_nID( nID )
    ,   m_bEnumCommand( isEnumCommand( aCommand ))
    ,   m_bMadeInvisible( false )
@@ -112,7 +112,7 @@ void SAL_CALL GenericToolbarController::dispose()

    svt::ToolboxController::dispose();

    m_pToolbar.clear();
    m_xToolbar.clear();
    m_nID = 0;
}

@@ -167,11 +167,11 @@ void GenericToolbarController::statusChanged( const FeatureStateEvent& Event )
    if ( m_bDisposed )
        return;

    if ( m_pToolbar )
    if ( m_xToolbar )
    {
        m_pToolbar->EnableItem( m_nID, Event.IsEnabled );
        m_xToolbar->EnableItem( m_nID, Event.IsEnabled );

        ToolBoxItemBits nItemBits = m_pToolbar->GetItemBits( m_nID );
        ToolBoxItemBits nItemBits = m_xToolbar->GetItemBits( m_nID );
        nItemBits &= ~ToolBoxItemBits::CHECKABLE;
        TriState eTri = TRISTATE_FALSE;

@@ -185,8 +185,8 @@ void GenericToolbarController::statusChanged( const FeatureStateEvent& Event )
        {
            // Boolean, treat it as checked/unchecked
            if ( m_bMadeInvisible )
                m_pToolbar->ShowItem( m_nID );
            m_pToolbar->CheckItem( m_nID, bValue );
                m_xToolbar->ShowItem( m_nID );
            m_xToolbar->CheckItem( m_nID, bValue );
            if ( bValue )
                eTri = TRISTATE_TRUE;
            nItemBits |= ToolBoxItemBits::CHECKABLE;
@@ -197,7 +197,7 @@ void GenericToolbarController::statusChanged( const FeatureStateEvent& Event )
            {
                bValue = aStrValue == m_aEnumCommand;

                m_pToolbar->CheckItem( m_nID, bValue );
                m_xToolbar->CheckItem( m_nID, bValue );
                if ( bValue )
                    eTri = TRISTATE_TRUE;
                nItemBits |= ToolBoxItemBits::CHECKABLE;
@@ -217,24 +217,24 @@ void GenericToolbarController::statusChanged( const FeatureStateEvent& Event )
                {
                    aStrValue = FwkResId(STR_SAVECOPYDOC) + aStrValue.copy( 4 );
                }
                m_pToolbar->SetItemText( m_nID, aStrValue );
                m_xToolbar->SetItemText( m_nID, aStrValue );
                // tdf#124267 strip mnemonic from tooltip
                m_pToolbar->SetQuickHelpText(m_nID, aStrValue.replaceFirst("~", ""));
                m_xToolbar->SetQuickHelpText(m_nID, aStrValue.replaceFirst("~", ""));
            }

            if ( m_bMadeInvisible )
                m_pToolbar->ShowItem( m_nID );
                m_xToolbar->ShowItem( m_nID );
        }
        else if (( Event.State >>= aItemState ) && !m_bEnumCommand )
        {
            eTri = TRISTATE_INDET;
            nItemBits |= ToolBoxItemBits::CHECKABLE;
            if ( m_bMadeInvisible )
                m_pToolbar->ShowItem( m_nID );
                m_xToolbar->ShowItem( m_nID );
        }
        else if ( Event.State >>= aItemVisibility )
        {
            m_pToolbar->ShowItem( m_nID, aItemVisibility.bVisible );
            m_xToolbar->ShowItem( m_nID, aItemVisibility.bVisible );
            m_bMadeInvisible = !aItemVisibility.bVisible;
        }
        else if ( Event.State >>= aControlCommand )
@@ -247,19 +247,19 @@ void GenericToolbarController::statusChanged( const FeatureStateEvent& Event )
                    {
                        OUString aHelpText;
                        aControlCommand.Arguments[i].Value >>= aHelpText;
                        m_pToolbar->SetQuickHelpText(m_nID, aHelpText);
                        m_xToolbar->SetQuickHelpText(m_nID, aHelpText);
                        break;
                    }
                }
            }
            if ( m_bMadeInvisible )
                m_pToolbar->ShowItem( m_nID );
                m_xToolbar->ShowItem( m_nID );
        }
        else if ( m_bMadeInvisible )
            m_pToolbar->ShowItem( m_nID );
            m_xToolbar->ShowItem( m_nID );

        m_pToolbar->SetItemState( m_nID, eTri );
        m_pToolbar->SetItemBits( m_nID, nItemBits );
        m_xToolbar->SetItemState( m_nID, eTri );
        m_xToolbar->SetItemBits( m_nID, nItemBits );
    }
}

diff --git a/framework/source/uielement/imagebuttontoolbarcontroller.cxx b/framework/source/uielement/imagebuttontoolbarcontroller.cxx
index 18b23dd..9ad5cc47 100644
--- a/framework/source/uielement/imagebuttontoolbarcontroller.cxx
+++ b/framework/source/uielement/imagebuttontoolbarcontroller.cxx
@@ -66,7 +66,7 @@ ImageButtonToolbarController::ImageButtonToolbarController(
    Image aImage = AddonsOptions().GetImageFromURL( aCommand, bBigImages, true );

    // Height will be controlled by scaling according to button height
    m_pToolbar->SetItemImage( m_nID, aImage );
    m_xToolbar->SetItemImage( m_nID, aImage );
}

ImageButtonToolbarController::~ImageButtonToolbarController()
@@ -100,7 +100,7 @@ void ImageButtonToolbarController::executeControlCommand( const css::frame::Cont
                                       aURL,
                                       aImage ))
                {
                    m_pToolbar->SetItemImage( m_nID, aImage );
                    m_xToolbar->SetItemImage( m_nID, aImage );

                    // send notification
                    uno::Sequence< beans::NamedValue > aInfo { { "URL", css::uno::makeAny(aURL) } };
diff --git a/framework/source/uielement/spinfieldtoolbarcontroller.cxx b/framework/source/uielement/spinfieldtoolbarcontroller.cxx
index ae51cc6..0f329d9 100644
--- a/framework/source/uielement/spinfieldtoolbarcontroller.cxx
+++ b/framework/source/uielement/spinfieldtoolbarcontroller.cxx
@@ -160,7 +160,7 @@ SpinfieldToolbarController::SpinfieldToolbarController(
    ,   m_nStep( 0.0 )
    ,   m_pSpinfieldControl( nullptr )
{
    m_pSpinfieldControl = VclPtr<SpinfieldControl>::Create( m_pToolbar, WB_SPIN|WB_BORDER, this );
    m_pSpinfieldControl = VclPtr<SpinfieldControl>::Create( m_xToolbar, WB_SPIN|WB_BORDER, this );
    if ( nWidth == 0 )
        nWidth = 100;

@@ -168,7 +168,7 @@ SpinfieldToolbarController::SpinfieldToolbarController(
    sal_Int32 nHeight = getFontSizePixel( m_pSpinfieldControl ) + 5 + 1;

    m_pSpinfieldControl->SetSizePixel( ::Size( nWidth, nHeight ));
    m_pToolbar->SetItemWindow( m_nID, m_pSpinfieldControl );
    m_xToolbar->SetItemWindow( m_nID, m_pSpinfieldControl );
}

SpinfieldToolbarController::~SpinfieldToolbarController()
@@ -179,7 +179,7 @@ void SAL_CALL SpinfieldToolbarController::dispose()
{
    SolarMutexGuard aSolarMutexGuard;

    m_pToolbar->SetItemWindow( m_nID, nullptr );
    m_xToolbar->SetItemWindow( m_nID, nullptr );
    m_pSpinfieldControl.disposeAndClear();

    ComplexToolbarController::dispose();
diff --git a/framework/source/uielement/togglebuttontoolbarcontroller.cxx b/framework/source/uielement/togglebuttontoolbarcontroller.cxx
index 8cd8a94..ca2d431 100644
--- a/framework/source/uielement/togglebuttontoolbarcontroller.cxx
+++ b/framework/source/uielement/togglebuttontoolbarcontroller.cxx
@@ -45,9 +45,9 @@ ToggleButtonToolbarController::ToggleButtonToolbarController(
    ComplexToolbarController( rxContext, rFrame, pToolbar, nID, aCommand )
{
    if ( eStyle == Style::DropDownButton )
        m_pToolbar->SetItemBits( m_nID, ToolBoxItemBits::DROPDOWNONLY | m_pToolbar->GetItemBits( m_nID ) );
        m_xToolbar->SetItemBits( m_nID, ToolBoxItemBits::DROPDOWNONLY | m_xToolbar->GetItemBits( m_nID ) );
    else // Style::ToggleDropDownButton
        m_pToolbar->SetItemBits( m_nID, ToolBoxItemBits::DROPDOWN | m_pToolbar->GetItemBits( m_nID ) );
        m_xToolbar->SetItemBits( m_nID, ToolBoxItemBits::DROPDOWN | m_xToolbar->GetItemBits( m_nID ) );
}

ToggleButtonToolbarController::~ToggleButtonToolbarController()
@@ -94,10 +94,10 @@ uno::Reference< awt::XWindow > SAL_CALL ToggleButtonToolbarController::createPop
            aPopup->SetTipHelpText( sal_uInt16( i+1 ), m_aDropdownMenuList[i].mTipHelpText );
    }

    m_pToolbar->SetItemDown( m_nID, true );
    m_xToolbar->SetItemDown( m_nID, true );
    aPopup->SetSelectHdl( LINK( this, ToggleButtonToolbarController, MenuSelectHdl ));
    aPopup->Execute( m_pToolbar, m_pToolbar->GetItemRect( m_nID ));
    m_pToolbar->SetItemDown( m_nID, false );
    aPopup->Execute( m_xToolbar, m_xToolbar->GetItemRect( m_nID ));
    m_xToolbar->SetItemDown( m_nID, false );

    return xWindow;
}
diff --git a/include/sfx2/weldutils.hxx b/include/sfx2/weldutils.hxx
index ccca8b3..e87295c 100644
--- a/include/sfx2/weldutils.hxx
+++ b/include/sfx2/weldutils.hxx
@@ -38,13 +38,14 @@ private:
        ControllerContainer;
    ControllerContainer maControllers;

    css::uno::Reference<css::frame::XToolbarController>
    GetControllerForCommand(const OUString& rCommand) const;

public:
    // fill in the label and icons for actions and dispatch the action on item click
    ToolbarUnoDispatcher(weld::Toolbar& rToolbar,
                         const css::uno::Reference<css::frame::XFrame>& rFrame);

    css::uno::Reference<css::frame::XToolbarController>
    GetControllerForCommand(const OUString& rCommand) const;

    void dispose();
    ~ToolbarUnoDispatcher();
};
diff --git a/include/svtools/popupwindowcontroller.hxx b/include/svtools/popupwindowcontroller.hxx
index 41de1cb..1666c8a 100644
--- a/include/svtools/popupwindowcontroller.hxx
+++ b/include/svtools/popupwindowcontroller.hxx
@@ -32,6 +32,11 @@

namespace vcl { class Window; }

namespace svtools
{
    class ToolbarPopupBase;
}

namespace svt
{
class PopupWindowControllerImpl;
@@ -45,6 +50,8 @@ public:
                           const OUString& aCommandURL );
    virtual ~PopupWindowController() override;

    void EndPopupMode();

    virtual VclPtr<vcl::Window> createPopupWindow( vcl::Window* pParent ) = 0;

    // XServiceInfo
@@ -61,6 +68,9 @@ public:
    // XToolbarController
    virtual css::uno::Reference< css::awt::XWindow > SAL_CALL createPopupWindow() override;

protected:
    std::unique_ptr<svtools::ToolbarPopupBase> mxPopover;

private:
    std::unique_ptr<PopupWindowControllerImpl, o3tl::default_delete<PopupWindowControllerImpl>>  mxImpl;
};
diff --git a/include/svtools/toolboxcontroller.hxx b/include/svtools/toolboxcontroller.hxx
index 5d86aeb..0ec7228 100644
--- a/include/svtools/toolboxcontroller.hxx
+++ b/include/svtools/toolboxcontroller.hxx
@@ -45,6 +45,11 @@ namespace com :: sun :: star :: util { class XURLTransformer; }

class ToolBox;

namespace weld
{
    class Toolbar;
}

namespace svt
{

@@ -165,8 +170,9 @@ class SVT_DLLPUBLIC ToolboxController :
        // TODO remove
        const css::uno::Reference< css::awt::XWindow >& getParent() const { return m_xParentWindow;}

        bool                                                      m_bInitialized : 1,
                                                                  m_bDisposed : 1;
        bool                                                      m_bInitialized,
                                                                  m_bDisposed,
                                                                  m_bSidebar;
        sal_uInt16                                                m_nToolBoxId;
        css::uno::Reference< css::frame::XFrame >                 m_xFrame;
        css::uno::Reference< css::uno::XComponentContext >        m_xContext;
@@ -177,6 +183,7 @@ class SVT_DLLPUBLIC ToolboxController :
        css::uno::Reference< css::awt::XWindow >                  m_xParentWindow;
        css::uno::Reference< css::util::XURLTransformer >         m_xUrlTransformer;
        OUString                                                  m_sModuleName;
        weld::Toolbar*                                            m_pToolbar;
};

}
diff --git a/include/svx/PaletteManager.hxx b/include/svx/PaletteManager.hxx
index 81621e4..d468f01 100644
--- a/include/svx/PaletteManager.hxx
+++ b/include/svx/PaletteManager.hxx
@@ -29,7 +29,7 @@

class SvxColorValueSet;
namespace com::sun::star::uno { class XComponentContext; }
namespace svx { class ToolboxButtonColorUpdater; }
namespace svx { class ToolboxButtonColorUpdaterBase; }
namespace weld { class Window; }

class SVX_DLLPUBLIC PaletteManager
@@ -40,7 +40,7 @@ class SVX_DLLPUBLIC PaletteManager
    sal_uInt16              mnCurrentPalette;

    long                    mnColorCount;
    svx::ToolboxButtonColorUpdater* mpBtnUpdater;
    svx::ToolboxButtonColorUpdaterBase* mpBtnUpdater;

    XColorListRef           pColorList;
    std::deque<NamedColor>  maRecentColors;
@@ -69,7 +69,7 @@ public:
    long        GetRecentColorCount() const;
    void        AddRecentColor(const Color& rRecentColor, const OUString& rColorName, bool bFront = true);

    void        SetBtnUpdater(svx::ToolboxButtonColorUpdater* pBtnUpdater);
    void        SetBtnUpdater(svx::ToolboxButtonColorUpdaterBase* pBtnUpdater);
    void        PopupColorPicker(weld::Window* pParent, const OUString& aCommand, const Color& rInitialColor);

    void        SetColorSelectFunction(const std::function<void(const OUString&, const NamedColor&)>& aColorSelectFunction);
diff --git a/include/svx/colorwindow.hxx b/include/svx/colorwindow.hxx
index acc1814..257d1e6 100644
--- a/include/svx/colorwindow.hxx
+++ b/include/svx/colorwindow.hxx
@@ -132,6 +132,7 @@ private:
    std::unique_ptr<weld::Builder> m_xBuilder;

    const sal_uInt16    theSlotId;
    OUString            maCommand;
    weld::Window* const mpParentWindow;
    MenuOrToolMenuButton maMenuButton;
    std::shared_ptr<PaletteManager> mxPaletteManager;
@@ -150,6 +151,7 @@ private:
    std::unique_ptr<weld::CustomWeld> mxRecentColorSetWin;
    weld::Button* mpDefaultButton;

    Link<const NamedColor&, void> maSelectedLink;
    DECL_LINK(SelectHdl, SvtValueSet*, void);
    DECL_LINK(SelectPaletteHdl, weld::ComboBox&, void);
    DECL_LINK(AutoColorClickHdl, weld::Button&, void);
@@ -160,13 +162,14 @@ private:
    NamedColor GetAutoColor() const;

public:
    ColorWindow(std::shared_ptr<PaletteManager> const & rPaletteManager,
    ColorWindow(const OUString& rCommand,
                std::shared_ptr<PaletteManager> const & rPaletteManager,
                ColorStatus& rColorStatus,
                sal_uInt16 nSlotId,
                const css::uno::Reference< css::frame::XFrame >& rFrame,
                weld::Window* pParentWindow, const MenuOrToolMenuButton &rMenuButton,
                ColorSelectFunction const& rColorSelectFunction);
    weld::Container* GetWidget() { return mxTopLevel.get(); }
    weld::Container* getTopLevel() { return mxTopLevel.get(); }
    virtual ~ColorWindow() override;
    void                ShowNoneButton();
    void                SetNoSelection();
@@ -179,6 +182,7 @@ public:

    virtual void        statusChanged( const css::frame::FeatureStateEvent& rEvent ) override;

    void SetSelectedHdl( const Link<const NamedColor&, void>& rLink ) { maSelectedLink = rLink; }
};

#endif
diff --git a/include/svx/itemwin.hxx b/include/svx/itemwin.hxx
index 4f4c3ec..889a51358 100644
--- a/include/svx/itemwin.hxx
+++ b/include/svx/itemwin.hxx
@@ -113,6 +113,7 @@ public:
    void Fill( const XPatternListRef  &pList );

    static void Fill(weld::ComboBox&, const XHatchListRef &pList);
    static void Fill(weld::ComboBox&, const XGradientListRef &pList);
    static void Fill(weld::ComboBox&, const XBitmapListRef &pList);
    static void Fill(weld::ComboBox&, const XPatternListRef &pList);

diff --git a/include/svx/sidebar/AreaPropertyPanelBase.hxx b/include/svx/sidebar/AreaPropertyPanelBase.hxx
index abe5a60..bc72b8b 100644
--- a/include/svx/sidebar/AreaPropertyPanelBase.hxx
+++ b/include/svx/sidebar/AreaPropertyPanelBase.hxx
@@ -32,15 +32,11 @@
#include <svx/xflhtit.hxx>
#include <svx/xbtmpit.hxx>
#include <svx/sidebar/PanelLayout.hxx>
#include <vcl/lstbox.hxx>
#include <vcl/field.hxx>
#include <vcl/slider.hxx>
#include <vcl/fixed.hxx>
#include <vcl/vclptr.hxx>
#include <svl/intitem.hxx>
#include <svx/svxdllapi.h>
#include <sfx2/sidebar/Panel.hxx>

class ToolbarUnoDispatcher;
class XFillFloatTransparenceItem;
class XFillTransparenceItem;
class XFillStyleItem;
@@ -117,20 +113,22 @@ protected:
    XGradient                                           maGradientRect;

    //ui controls
    VclPtr<FixedText>                                          mpColorTextFT;
    VclPtr<SvxFillTypeBox>                                     mpLbFillType;
    VclPtr<SvxFillAttrBox>                                     mpLbFillAttr;
    VclPtr<SvxColorListBox>                                    mpLbFillGradFrom;
    VclPtr<SvxColorListBox>                                    mpLbFillGradTo;
    VclPtr<sfx2::sidebar::SidebarToolBox>                      mpToolBoxColor; // for new color picker
    VclPtr<FixedText>                                          mpTrspTextFT;
    VclPtr<ListBox>                                            mpLBTransType;
    VclPtr<MetricField>                                        mpMTRTransparent;
    VclPtr<Slider>                                             mpSldTransparent;
    VclPtr<ToolBox>                                            mpBTNGradient;
    VclPtr<MetricField>                                        mpMTRAngle;
    VclPtr<ListBox>                                            mpGradientStyle;
    VclPtr<PushButton>                                         mpBmpImport;
    std::unique_ptr<weld::Label> mxColorTextFT;
    std::unique_ptr<weld::ComboBox> mxLbFillType;
    std::unique_ptr<weld::ComboBox> mxLbFillAttr;
    std::unique_ptr<ColorListBox> mxLbFillGradFrom;
    std::unique_ptr<ColorListBox> mxLbFillGradTo;
    std::unique_ptr<weld::Toolbar> mxToolBoxColor; // for new color picker
    std::unique_ptr<ToolbarUnoDispatcher> mxColorDispatch;
    std::unique_ptr<weld::Label> mxTrspTextFT;
    std::unique_ptr<weld::ComboBox> mxLBTransType;
    std::unique_ptr<weld::MetricSpinButton> mxMTRTransparent;
    std::unique_ptr<weld::Scale> mxSldTransparent;
    std::unique_ptr<weld::Toolbar> mxBTNGradient;
    std::unique_ptr<weld::MetricSpinButton> mxMTRAngle;
    std::unique_ptr<weld::ComboBox> mxGradientStyle;
    std::unique_ptr<weld::Button> mxBmpImport;
    std::unique_ptr<AreaTransparencyGradientPopup> mxTrGrPopup;

    std::unique_ptr< XFillStyleItem >               mpStyleItem;
    std::unique_ptr< XFillColorItem >               mpColorItem;
@@ -138,30 +136,27 @@ protected:
    std::unique_ptr< XFillHatchItem >               mpHatchItem;
    std::unique_ptr< XFillBitmapItem >              mpBitmapItem;

    Image                                               maImgAxial;
    Image                                               maImgElli;
    Image                                               maImgQuad;
    Image                                               maImgRadial;
    Image                                               maImgSquare;
    Image                                               maImgLinear;
    OUString maImgAxial;
    OUString maImgElli;
    OUString maImgQuad;
    OUString maImgRadial;
    OUString maImgSquare;
    OUString  maImgLinear;

    VclPtr<AreaTransparencyGradientPopup>           mxTrGrPopup;
    VclPtr<sfx2::sidebar::Panel>                    mpPanel;

    std::unique_ptr< XFillFloatTransparenceItem >   mpFloatTransparenceItem;
    std::unique_ptr< SfxUInt16Item >                mpTransparanceItem;

    DECL_LINK(SelectFillTypeHdl, ListBox&, void );
    DECL_LINK(SelectFillAttrHdl, ListBox&, void );
    DECL_LINK(SelectFillColorHdl, SvxColorListBox&, void);
    DECL_LINK(ChangeGradientAngle, Edit&, void);
    DECL_LINK(ChangeTrgrTypeHdl_Impl, ListBox&, void);
    DECL_LINK(ModifyTransparentHdl_Impl, Edit&, void);
    DECL_LINK(ModifyTransSliderHdl, Slider*, void);
    DECL_LINK(ClickImportBitmapHdl, Button*, void);

    // for transparency gradient
    DECL_LINK( ClickTrGrHdl_Impl, ToolBox*, void );
    DECL_LINK(SelectFillTypeHdl, weld::ComboBox&, void );
    DECL_LINK(SelectFillAttrHdl, weld::ComboBox&, void );
    DECL_LINK(SelectFillColorHdl, ColorListBox&, void);
    DECL_LINK(ChangeGradientAngle, weld::MetricSpinButton&, void);
    DECL_LINK(ChangeTrgrTypeHdl_Impl, weld::ComboBox&, void);
    DECL_LINK(ModifyTransparentHdl_Impl, weld::MetricSpinButton&, void);
    DECL_LINK(ModifyTransSliderHdl, weld::Scale&, void);
    DECL_LINK(ClickImportBitmapHdl, weld::Button&, void);
    DECL_LINK(ToolbarHdl_Impl, const OString&, void);

    void Initialize();
    void Update();
diff --git a/include/svx/sidebar/AreaTransparencyGradientPopup.hxx b/include/svx/sidebar/AreaTransparencyGradientPopup.hxx
index cbdc5e9..67abcbf 100644
--- a/include/svx/sidebar/AreaTransparencyGradientPopup.hxx
+++ b/include/svx/sidebar/AreaTransparencyGradientPopup.hxx
@@ -19,12 +19,8 @@
#ifndef INCLUDED_SVX_SOURCE_SIDEBAR_AREA_AREATRANSPARENCYGRADIENTPOPUP_HXX
#define INCLUDED_SVX_SOURCE_SIDEBAR_AREA_AREATRANSPARENCYGRADIENTPOPUP_HXX

#include <vcl/edit.hxx>
#include <vcl/field.hxx>
#include <vcl/floatwin.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/weld.hxx>

class VclContainer;
class XFillFloatTransparenceItem;

namespace svx { namespace sidebar {
@@ -32,31 +28,35 @@ namespace svx { namespace sidebar {
class AreaTransparencyGradientControl;
class AreaPropertyPanelBase;

class AreaTransparencyGradientPopup final : public FloatingWindow
class AreaTransparencyGradientPopup final
{
private:
    AreaPropertyPanelBase& mrAreaPropertyPanel;
    VclPtr<VclContainer>   maCenterGrid;
    VclPtr<VclContainer>   maAngleGrid;
    VclPtr<MetricField>    maMtrTrgrCenterX;
    VclPtr<MetricField>    maMtrTrgrCenterY;
    VclPtr<MetricField>    maMtrTrgrAngle;
    VclPtr<ToolBox>        maBtnLeft45;
    VclPtr<ToolBox>        maBtnRight45;
    VclPtr<MetricField>    maMtrTrgrStartValue;
    VclPtr<MetricField>    maMtrTrgrEndValue;
    VclPtr<MetricField>    maMtrTrgrBorder;
    std::unique_ptr<weld::Builder> mxBuilder;
    std::unique_ptr<weld::Widget> mxTopLevel;
    std::unique_ptr<weld::Widget> mxCenterGrid;
    std::unique_ptr<weld::Widget> mxAngleGrid;
    std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrCenterX;
    std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrCenterY;
    std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrAngle;
    std::unique_ptr<weld::Toolbar> mxBtnLeft45;
    std::unique_ptr<weld::Toolbar> mxBtnRight45;
    std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrStartValue;
    std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrEndValue;
    std::unique_ptr<weld::MetricSpinButton> mxMtrTrgrBorder;

    void InitStatus(XFillFloatTransparenceItem const * pGradientItem);
    void ExecuteValueModify(sal_uInt8 nStartCol, sal_uInt8 nEndCol);
    DECL_LINK(ModifiedTrgrHdl_Impl, Edit&, void);
    DECL_LINK(Left_Click45_Impl, ToolBox*, void);
    DECL_LINK(Right_Click45_Impl, ToolBox*, void);
    DECL_LINK(ModifiedTrgrHdl_Impl, weld::MetricSpinButton&, void);
    DECL_LINK(Left_Click45_Impl, const OString&, void);
    DECL_LINK(Right_Click45_Impl, const OString&, void);
public:
    AreaTransparencyGradientPopup(AreaPropertyPanelBase& rPanel);
    virtual ~AreaTransparencyGradientPopup() override;
    void Rearrange (XFillFloatTransparenceItem const * pItem);
    virtual void dispose() override;
    AreaTransparencyGradientPopup(AreaPropertyPanelBase& rPanel, weld::Widget* pParent);
    ~AreaTransparencyGradientPopup();

    weld::Widget* getTopLevel() const { return mxTopLevel.get(); }

    void Rearrange(XFillFloatTransparenceItem const * pItem);
};

} } // end of namespace svx::sidebar
diff --git a/include/svx/tbcontrl.hxx b/include/svx/tbcontrl.hxx
index 315fd9e..226160e 100644
--- a/include/svx/tbcontrl.hxx
+++ b/include/svx/tbcontrl.hxx
@@ -150,7 +150,7 @@ class PaletteManager;

namespace svx
{
    class ToolboxButtonColorUpdater;
    class ToolboxButtonColorUpdaterBase;
}

class SVX_DLLPUBLIC SvxStyleToolBoxControl final : public SfxToolBoxControl
@@ -204,13 +204,15 @@ typedef std::function<void(const OUString&, const NamedColor&)> ColorSelectFunct
class SVX_DLLPUBLIC SvxColorToolBoxControl final : public cppu::ImplInheritanceHelper< svt::PopupWindowController,
                                                                                 css::frame::XSubToolbarController >
{
    std::unique_ptr<svx::ToolboxButtonColorUpdater> m_xBtnUpdater;
    std::unique_ptr<svx::ToolboxButtonColorUpdaterBase> m_xBtnUpdater;
    std::shared_ptr<PaletteManager> m_xPaletteManager;
    ColorStatus m_aColorStatus;
    bool m_bSplitButton;
    sal_uInt16 m_nSlotId;
    ColorSelectFunction m_aColorSelectFunction;
    DECL_LINK(SelectedHdl, const NamedColor&, void);
    DECL_LINK(ToolbarHdl_Impl, const OString&, void);

public:
    explicit SvxColorToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext );
    virtual ~SvxColorToolBoxControl() override;
@@ -265,8 +267,6 @@ private:
    LanguageType m_eLanguage;
    sal_uInt32   m_nFormatKey;

    weld::Toolbar* m_pToolbar;
    std::unique_ptr<svtools::ToolbarPopupBase> m_xPopover;
public:
    static void GetCurrencySymbols( std::vector<OUString>& rList, bool bFlag,
                                    std::vector<sal_uInt16>& rCurrencyList );
@@ -277,14 +277,9 @@ public:
    // XToolbarController
    virtual void SAL_CALL execute( sal_Int16 nSelectModifier ) override;

    // XComponent
    virtual void SAL_CALL dispose() override;

    using svt::ToolboxController::createPopupWindow;
    virtual VclPtr<vcl::Window> createPopupWindow( vcl::Window* pParent ) override;

    void EndPopupMode();

    // XServiceInfo
    virtual OUString SAL_CALL getImplementationName() override;
    virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
diff --git a/include/svx/tbxcolorupdate.hxx b/include/svx/tbxcolorupdate.hxx
index e37f7f1..460635c 100644
--- a/include/svx/tbxcolorupdate.hxx
+++ b/include/svx/tbxcolorupdate.hxx
@@ -24,13 +24,18 @@

#include <tools/gen.hxx>
#include <tools/color.hxx>
#include <vcl/vclenum.hxx>
#include <vcl/vclptr.hxx>

#include <svx/Palette.hxx>
#include <com/sun/star/frame/XFrame.hpp>

class ToolBox;
class VirtualDevice;

namespace weld
{
    class Toolbar;
}

namespace svx
{
@@ -42,12 +47,14 @@ namespace svx

        formerly known as SvxTbxButtonColorUpdater_Impl, residing in svx/source/tbxctrls/colorwindow.hxx.
    */
    class ToolboxButtonColorUpdater
    class ToolboxButtonColorUpdaterBase
    {
    public:
                    ToolboxButtonColorUpdater( sal_uInt16 nSlotId, sal_uInt16 nTbxBtnId, ToolBox* ptrTbx, bool bWideButton,
                                              const OUString& rCommandLabel );
                    ~ToolboxButtonColorUpdater();
        ToolboxButtonColorUpdaterBase(bool bWideButton, const OUString& rCommandLabel,
                                      const OUString& rCommandURL,
                                      const css::uno::Reference<css::frame::XFrame>& rFrame);

        virtual ~ToolboxButtonColorUpdaterBase();

        void        Update( const NamedColor& rNamedColor );
        void        Update( const Color& rColor, bool bForceUpdate = false );
@@ -55,23 +62,68 @@ namespace svx
        OUString    GetCurrentColorName();

    private:
        ToolboxButtonColorUpdater(ToolboxButtonColorUpdater const &) = delete;
        ToolboxButtonColorUpdater& operator =(ToolboxButtonColorUpdater const &) = delete;
        ToolboxButtonColorUpdaterBase(ToolboxButtonColorUpdaterBase const &) = delete;
        ToolboxButtonColorUpdaterBase& operator =(ToolboxButtonColorUpdaterBase const &) = delete;

        bool const            mbWideButton;
        sal_uInt16 const      mnBtnId;
        VclPtr<ToolBox> mpTbx;
    protected:
        bool const  mbWideButton;
        bool        mbWasHiContrastMode;
        Color       maCurColor;
        tools::Rectangle   maUpdRect;
        Size        maBmpSize;
        bool        mbWasHiContrastMode;
        OUString    maCommandLabel;
        OUString    maCommandURL;
        css::uno::Reference<css::frame::XFrame> mxFrame;

        void Init(sal_uInt16 nSlotId);

        virtual void SetQuickHelpText(const OUString& rText) = 0;
        virtual OUString GetQuickHelpText() const = 0;
        virtual void SetImage(VirtualDevice* pVirDev) = 0;
        virtual VclPtr<VirtualDevice> CreateVirtualDevice() const = 0;
        virtual vcl::ImageType GetImageSize() const = 0;
        virtual Size GetItemSize() const = 0;
    };

    class VclToolboxButtonColorUpdater : public ToolboxButtonColorUpdaterBase
    {
    public:
        VclToolboxButtonColorUpdater(sal_uInt16 nSlotId, sal_uInt16 nTbxBtnId, ToolBox* ptrTbx, bool bWideButton,
                                     const OUString& rCommandLabel, const OUString& rCommandURL,
                                     const css::uno::Reference<css::frame::XFrame>& rFrame);


    private:
        sal_uInt16 const      mnBtnId;
        VclPtr<ToolBox> mpTbx;

        virtual void SetQuickHelpText(const OUString& rText) override;
        virtual OUString GetQuickHelpText() const override;
        virtual void SetImage(VirtualDevice* pVirDev) override;
        virtual VclPtr<VirtualDevice> CreateVirtualDevice() const override;
        virtual vcl::ImageType GetImageSize() const override;
        virtual Size GetItemSize() const override;
    };

    class ToolboxButtonColorUpdater : public ToolboxButtonColorUpdaterBase
    {
    public:
        ToolboxButtonColorUpdater(sal_uInt16 nSlotId, const OString& rTbxBtnId, weld::Toolbar* ptrTbx, bool bWideButton,
                                  const OUString& rCommandLabel, const css::uno::Reference<css::frame::XFrame>& rFrame);

    private:
        OString msBtnId;
        weld::Toolbar* mpTbx;

        virtual void SetQuickHelpText(const OUString& rText) override;
        virtual OUString GetQuickHelpText() const override;
        virtual void SetImage(VirtualDevice* pVirDev) override;
        virtual VclPtr<VirtualDevice> CreateVirtualDevice() const override;
        virtual vcl::ImageType GetImageSize() const override;
        virtual Size GetItemSize() const override;
    };
}


#endif // INCLUDED_SVX_TBXCOLORUPDATE_HXX

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 8c20ef5..c8ccf42 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -1973,6 +1973,12 @@ public:
    virtual void set_item_label(const OString& rIdent, const OUString& rLabel) = 0;
    virtual OUString get_item_label(const OString& rIdent) const = 0;
    virtual void set_item_tooltip_text(const OString& rIdent, const OUString& rTip) = 0;
    virtual OUString get_item_tooltip_text(const OString& rIdent) const = 0;
    virtual void set_item_icon_name(const OString& rIdent, const OUString& rIconName) = 0;
    virtual void set_item_image(const OString& rIdent,
                                const css::uno::Reference<css::graphic::XGraphic>& rIcon)
        = 0;
    virtual void set_item_image(const OString& rIdent, VirtualDevice* pDevice) = 0;

    virtual void insert_separator(int pos, const OUString& rId) = 0;
    void append_separator(const OUString& rId) { insert_separator(-1, rId); }
@@ -1981,7 +1987,8 @@ public:
    virtual OString get_item_ident(int nIndex) const = 0;
    virtual void set_item_ident(int nIndex, const OString& rIdent) = 0;
    virtual void set_item_label(int nIndex, const OUString& rLabel) = 0;
    virtual void set_item_icon(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon)
    virtual void set_item_image(int nIndex,
                                const css::uno::Reference<css::graphic::XGraphic>& rIcon)
        = 0;
    virtual void set_item_tooltip_text(int nIndex, const OUString& rTip) = 0;

diff --git a/reportdesign/source/ui/dlg/Condition.cxx b/reportdesign/source/ui/dlg/Condition.cxx
index f76fe49..b2add1c 100644
--- a/reportdesign/source/ui/dlg/Condition.cxx
+++ b/reportdesign/source/ui/dlg/Condition.cxx
@@ -166,6 +166,7 @@ Condition::~Condition()
void Condition::SetBackgroundDropdownClick()
{
    m_xBackColorFloat.reset(new ColorWindow(
                            OUString() /*m_aCommandURL*/,
                            m_xPaletteManager,
                            m_aColorStatus,
                            SID_BACKGROUND_COLOR,
@@ -174,12 +175,13 @@ void Condition::SetBackgroundDropdownClick()
                            MenuOrToolMenuButton(m_xActions.get(), "background"),
                            m_aBackColorWrapper));

    m_xActions->set_item_popover("background", m_xBackColorFloat->GetWidget());
    m_xActions->set_item_popover("background", m_xBackColorFloat->getTopLevel());
}

void Condition::SetForegroundDropdownClick()
{
    m_xForeColorFloat.reset(new ColorWindow(
                            OUString() /*m_aCommandURL*/,
                            m_xPaletteManager,
                            m_aColorStatus,
                            SID_ATTR_CHAR_COLOR2,
@@ -188,7 +190,7 @@ void Condition::SetForegroundDropdownClick()
                            MenuOrToolMenuButton(m_xActions.get(), "foreground"),
                            m_aForeColorWrapper));

    m_xActions->set_item_popover("foreground", m_xForeColorFloat->GetWidget());
    m_xActions->set_item_popover("foreground", m_xForeColorFloat->getTopLevel());
}


diff --git a/reportdesign/source/ui/dlg/Condition.hxx b/reportdesign/source/ui/dlg/Condition.hxx
index 4f263f8..641c1a2 100644
--- a/reportdesign/source/ui/dlg/Condition.hxx
+++ b/reportdesign/source/ui/dlg/Condition.hxx
@@ -32,8 +32,6 @@

#include <memory>

namespace svx { class ToolboxButtonColorUpdater; }

namespace rptui
{
    class OColorPopup;
diff --git a/sc/inc/pch/precompiled_sc.hxx b/sc/inc/pch/precompiled_sc.hxx
index 424eaa0..fabc4b8 100644
--- a/sc/inc/pch/precompiled_sc.hxx
+++ b/sc/inc/pch/precompiled_sc.hxx
@@ -13,7 +13,7 @@
 manual changes will be rewritten by the next run of update_pch.sh (which presumably
 also fixes all possible problems, so it's usually better to use it).

 Generated on 2019-12-03 09:20:23 using:
 Generated on 2020-01-02 15:21:26 using:
 ./bin/update_pch sc sc --cutoff=12 --exclude:system --include:module --include:local

 If after updating build fails, use the following command to locate conflicting headers:
@@ -472,6 +472,7 @@
#include <formula/token.hxx>
#include <formula/vectortoken.hxx>
#include <formulacell.hxx>
#include <funcdesc.hxx>
#include <global.hxx>
#include <globalnames.hxx>
#include <hints.hxx>
diff --git a/sc/inc/pch/precompiled_scfilt.hxx b/sc/inc/pch/precompiled_scfilt.hxx
index d13e9f4..e647035 100644
--- a/sc/inc/pch/precompiled_scfilt.hxx
+++ b/sc/inc/pch/precompiled_scfilt.hxx
@@ -13,7 +13,7 @@
 manual changes will be rewritten by the next run of update_pch.sh (which presumably
 also fixes all possible problems, so it's usually better to use it).

 Generated on 2019-10-17 16:10:56 using:
 Generated on 2020-01-02 15:19:32 using:
 ./bin/update_pch sc scfilt --cutoff=4 --exclude:system --exclude:module --include:local

 If after updating build fails, use the following command to locate conflicting headers:
@@ -40,12 +40,12 @@
#include <string.h>
#include <string_view>
#include <type_traits>
#include <typeinfo>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
#include <o3tl/optional.hxx>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ptree_fwd.hpp>
#endif // PCH_LEVEL >= 1
#if PCH_LEVEL >= 2
#include <osl/diagnose.h>
@@ -102,7 +102,9 @@
#include <com/sun/star/awt/Point.hpp>
#include <com/sun/star/awt/Size.hpp>
#include <com/sun/star/beans/PropertyState.hpp>
#include <com/sun/star/beans/XMultiPropertySet.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/beans/XPropertyState.hpp>
#include <com/sun/star/chart/XChartDocument.hpp>
#include <com/sun/star/container/XIndexAccess.hpp>
#include <com/sun/star/container/XIndexContainer.hpp>
@@ -116,6 +118,7 @@
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XTypeProvider.hpp>
#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <com/sun/star/sheet/DataPilotFieldGroupBy.hpp>
#include <com/sun/star/sheet/DataPilotFieldReferenceItemType.hpp>
#include <com/sun/star/sheet/FormulaLanguage.hpp>
@@ -134,11 +137,13 @@
#include <com/sun/star/xml/sax/XFastContextHandler.hpp>
#include <comphelper/comphelperdllapi.h>
#include <comphelper/processfactory.hxx>
#include <comphelper/servicehelper.hxx>
#include <comphelper/string.hxx>
#include <cppu/unotype.hxx>
#include <cppuhelper/implbase.hxx>
#include <cppuhelper/implbase_ex.hxx>
#include <cppuhelper/weak.hxx>
#include <cppuhelper/weakref.hxx>
#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
#include <editeng/borderline.hxx>
#include <editeng/boxitem.hxx>
@@ -161,6 +166,7 @@
#include <filter/msfilter/msfilterdllapi.h>
#include <i18nlangtag/lang.h>
#include <o3tl/cow_wrapper.hxx>
#include <o3tl/optional.hxx>
#include <o3tl/strong_int.hxx>
#include <o3tl/typed_flags_set.hxx>
#include <o3tl/underlyingenumvalue.hxx>
@@ -204,13 +210,16 @@
#include <svl/typedwhich.hxx>
#include <svl/zforlist.hxx>
#include <svtools/svtdllapi.h>
#include <svx/DiagramDataInterface.hxx>
#include <svx/itextprovider.hxx>
#include <svx/msdffdef.hxx>
#include <svx/sdtaditm.hxx>
#include <svx/sdtaitm.hxx>
#include <svx/sdtakitm.hxx>
#include <svx/shapeproperty.hxx>
#include <svx/svddef.hxx>
#include <svx/svdoattr.hxx>
#include <svx/svdobj.hxx>
#include <svx/svdoole2.hxx>
#include <svx/svdorect.hxx>
#include <svx/svdotext.hxx>
@@ -224,6 +233,7 @@
#include <tools/color.hxx>
#include <tools/date.hxx>
#include <tools/datetime.hxx>
#include <tools/diagnose_ex.h>
#include <tools/gen.hxx>
#include <tools/link.hxx>
#include <tools/mapunit.hxx>
@@ -232,6 +242,7 @@
#include <tools/time.hxx>
#include <tools/toolsdllapi.h>
#include <tools/urlobj.hxx>
#include <tools/weakbase.h>
#include <typelib/typedescription.h>
#include <uno/data.h>
#include <unotools/charclass.hxx>
diff --git a/sc/inc/pch/precompiled_scui.hxx b/sc/inc/pch/precompiled_scui.hxx
index 61dee39..e01d112 100644
--- a/sc/inc/pch/precompiled_scui.hxx
+++ b/sc/inc/pch/precompiled_scui.hxx
@@ -13,7 +13,7 @@
 manual changes will be rewritten by the next run of update_pch.sh (which presumably
 also fixes all possible problems, so it's usually better to use it).

 Generated on 2019-10-15 16:58:12 using:
 Generated on 2020-01-02 15:21:50 using:
 ./bin/update_pch sc scui --cutoff=1 --exclude:system --exclude:module --include:local

 If after updating build fails, use the following command to locate conflicting headers:
@@ -34,14 +34,7 @@
#include <rtl/ustrbuf.hxx>
#include <sal/config.h>
#include <sal/types.h>
#include <vcl/button.hxx>
#include <vcl/combobox.hxx>
#include <vcl/edit.hxx>
#include <vcl/event.hxx>
#include <vcl/field.hxx>
#include <vcl/fixed.hxx>
#include <vcl/lstbox.hxx>
#include <vcl/ptrstyle.hxx>
#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
#include <vcl/weld.hxx>
@@ -92,6 +85,7 @@
#include <svtools/ctrlbox.hxx>
#include <svtools/ehdl.hxx>
#include <svtools/inettbc.hxx>
#include <svtools/miscopt.hxx>
#include <svtools/restartdialog.hxx>
#include <svtools/sfxecode.hxx>
#include <svtools/unitconv.hxx>
diff --git a/sd/inc/pch/precompiled_sd.hxx b/sd/inc/pch/precompiled_sd.hxx
index b2c4f93..b3c53e6 100644
--- a/sd/inc/pch/precompiled_sd.hxx
+++ b/sd/inc/pch/precompiled_sd.hxx
@@ -13,7 +13,7 @@
 manual changes will be rewritten by the next run of update_pch.sh (which presumably
 also fixes all possible problems, so it's usually better to use it).

 Generated on 2019-12-01 19:53:21 using:
 Generated on 2020-01-02 15:15:28 using:
 ./bin/update_pch sd sd --cutoff=4 --exclude:system --exclude:module --include:local

 If after updating build fails, use the following command to locate conflicting headers:
@@ -41,6 +41,7 @@
#include <vector>
#include <boost/property_tree/json_parser.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ptree_fwd.hpp>
#endif // PCH_LEVEL >= 1
#if PCH_LEVEL >= 2
#include <osl/diagnose.h>
diff --git a/sd/inc/pch/precompiled_sdui.hxx b/sd/inc/pch/precompiled_sdui.hxx
index bfecafb..7b2124a 100644
--- a/sd/inc/pch/precompiled_sdui.hxx
+++ b/sd/inc/pch/precompiled_sdui.hxx
@@ -13,7 +13,7 @@
 manual changes will be rewritten by the next run of update_pch.sh (which presumably
 also fixes all possible problems, so it's usually better to use it).

 Generated on 2019-12-03 09:20:46 using:
 Generated on 2020-01-02 15:15:40 using:
 ./bin/update_pch sd sdui --cutoff=4 --exclude:system --include:module --include:local

 If after updating build fails, use the following command to locate conflicting headers:
@@ -119,7 +119,6 @@
#include <vcl/image.hxx>
#include <vcl/keycod.hxx>
#include <vcl/keycodes.hxx>
#include <vcl/lstbox.hxx>
#include <vcl/mapmod.hxx>
#include <vcl/menu.hxx>
#include <vcl/metaactiontypes.hxx>
diff --git a/sfx2/source/sidebar/ControllerFactory.cxx b/sfx2/source/sidebar/ControllerFactory.cxx
index 61ed9245..49b67cb 100644
--- a/sfx2/source/sidebar/ControllerFactory.cxx
+++ b/sfx2/source/sidebar/ControllerFactory.cxx
@@ -231,6 +231,10 @@ Reference<frame::XToolbarController> ControllerFactory::CreateToolBarController(
            aPropValue.Value <<= rxToolbar;
            aPropertyVector.push_back( makeAny( aPropValue ));

            aPropValue.Name = "IsSidebar";
            aPropValue.Value <<= true;
            aPropertyVector.push_back( makeAny( aPropValue ));

            if (nWidth > 0)
            {
                aPropValue.Name = "Width";
diff --git a/sfx2/source/toolbox/weldutils.cxx b/sfx2/source/toolbox/weldutils.cxx
index 3f2d097..52cf254 100644
--- a/sfx2/source/toolbox/weldutils.cxx
+++ b/sfx2/source/toolbox/weldutils.cxx
@@ -57,6 +57,8 @@ ToolbarUnoDispatcher::ToolbarUnoDispatcher(weld::Toolbar& rToolbar,
    : m_xFrame(rFrame)
    , m_pToolbar(&rToolbar)
{
    rToolbar.connect_clicked(LINK(this, ToolbarUnoDispatcher, SelectHdl));

    OUString aModuleName(vcl::CommandInfoProvider::GetModuleIdentifier(rFrame));
    vcl::ImageType eSize = rToolbar.get_icon_size();

@@ -75,12 +77,10 @@ ToolbarUnoDispatcher::ToolbarUnoDispatcher(weld::Toolbar& rToolbar,
            vcl::CommandInfoProvider::GetTooltipForCommand(sCommand, aProperties, rFrame));
        rToolbar.set_item_tooltip_text(i, aTooltip);
        auto xImage(vcl::CommandInfoProvider::GetXGraphicForCommand(sCommand, rFrame, eSize));
        rToolbar.set_item_icon(i, xImage);
        rToolbar.set_item_image(i, xImage);

        CreateController(sCommand);
    }

    rToolbar.connect_clicked(LINK(this, ToolbarUnoDispatcher, SelectHdl));
}

void ToolbarUnoDispatcher::CreateController(const OUString& rCommand)
diff --git a/solenv/sanitizers/ui/svx.suppr b/solenv/sanitizers/ui/svx.suppr
index b2d33d3..d089305 100644
--- a/solenv/sanitizers/ui/svx.suppr
+++ b/solenv/sanitizers/ui/svx.suppr
@@ -60,9 +60,6 @@ svx/uiconfig/ui/redlinefilterpage.ui://GtkLabel[@id='and'] orphan-label
svx/uiconfig/ui/safemodedialog.ui://GtkLabel[@id='label1'] orphan-label
svx/uiconfig/ui/safemodedialog.ui://GtkLabel[@id='label3'] orphan-label
svx/uiconfig/ui/safemodedialog.ui://GtkLabel[@id='label4'] orphan-label
svx/uiconfig/ui/sidebararea.ui://GtkLabel[@id='filllabel'] orphan-label
svx/uiconfig/ui/sidebararea.ui://svxlo-SvxFillAttrBox[@id='fillattr'] missing-label-for
svx/uiconfig/ui/sidebararea.ui://svxlo-SvxFillTypeBox[@id='fillstyle'] missing-label-for
svx/uiconfig/ui/sidebararea.ui://GtkLabel[@id='transparencylabel'] orphan-label
svx/uiconfig/ui/sidebarshadow.ui://GtkLabel[@id='transparency_label'] orphan-label
svx/uiconfig/ui/sidebarshadow.ui://GtkSpinButton[@id='FIELD_TRANSPARENCY'] no-labelled-by
diff --git a/svtools/source/uno/popupwindowcontroller.cxx b/svtools/source/uno/popupwindowcontroller.cxx
index 0ffb2f5..cc283adb 100644
--- a/svtools/source/uno/popupwindowcontroller.cxx
+++ b/svtools/source/uno/popupwindowcontroller.cxx
@@ -24,7 +24,9 @@
#include <vcl/toolbox.hxx>
#include <vcl/weldutils.hxx>

#include <svtools/framestatuslistener.hxx>
#include <svtools/popupwindowcontroller.hxx>
#include <svtools/toolbarmenu.hxx>

using namespace ::com::sun::star;
using namespace css::uno;
@@ -174,6 +176,7 @@ sal_Bool SAL_CALL PopupWindowController::supportsService( const OUString& Servic
// XComponent
void SAL_CALL PopupWindowController::dispose()
{
    mxPopover.reset();
    mxImpl.reset();
    svt::ToolboxController::dispose();
}
@@ -233,6 +236,11 @@ Reference< awt::XWindow > SAL_CALL PopupWindowController::createPopupWindow()
    return Reference< awt::XWindow >();
}

void PopupWindowController::EndPopupMode()
{
    m_pToolbar->set_menu_item_active(m_aCommandURL.toUtf8(), false);
}

}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/uno/toolboxcontroller.cxx b/svtools/source/uno/toolboxcontroller.cxx
index 8bd9d94..3ff118f 100644
--- a/svtools/source/uno/toolboxcontroller.cxx
+++ b/svtools/source/uno/toolboxcontroller.cxx
@@ -29,6 +29,7 @@
#include <vcl/svapp.hxx>
#include <toolkit/helper/vclunohelper.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/weldutils.hxx>
#include <comphelper/processfactory.hxx>

const int TOOLBARCONTROLLER_PROPHANDLE_SUPPORTSVISIBLE  = 1;
@@ -54,11 +55,13 @@ ToolboxController::ToolboxController(
    ,   m_bSupportVisible( false )
    ,   m_bInitialized( false )
    ,   m_bDisposed( false )
    ,   m_bSidebar( false )
    ,   m_nToolBoxId( SAL_MAX_UINT16 )
    ,   m_xFrame( xFrame )
    ,   m_xContext( rxContext )
    ,   m_aCommandURL( aCommandURL )
    ,   m_aListenerContainer( m_aMutex )
    ,   m_pToolbar(nullptr)
{
    OSL_ASSERT( m_xContext.is() );
    registerProperty( TOOLBARCONTROLLER_PROPNAME_SUPPORTSVISIBLE,
@@ -80,8 +83,10 @@ ToolboxController::ToolboxController() :
    ,   m_bSupportVisible(false)
    ,   m_bInitialized( false )
    ,   m_bDisposed( false )
    ,   m_bSidebar( false )
    ,   m_nToolBoxId( SAL_MAX_UINT16 )
    ,   m_aListenerContainer( m_aMutex )
    ,   m_pToolbar(nullptr)
{
    registerProperty( TOOLBARCONTROLLER_PROPNAME_SUPPORTSVISIBLE,
        TOOLBARCONTROLLER_PROPHANDLE_SUPPORTSVISIBLE,
@@ -191,6 +196,8 @@ void SAL_CALL ToolboxController::initialize( const Sequence< Any >& aArguments )
                aPropValue.Value >>= m_sModuleName;
            else if ( aPropValue.Name == "Identifier" )
                aPropValue.Value >>= m_nToolBoxId;
            else if ( aPropValue.Name == "IsSidebar" )
                aPropValue.Value >>= m_bSidebar;
        }
    }

@@ -205,6 +212,12 @@ void SAL_CALL ToolboxController::initialize( const Sequence< Any >& aArguments )

    if ( !m_aCommandURL.isEmpty() )
        m_aListenerMap.emplace( m_aCommandURL, Reference< XDispatch >() );

    if (weld::TransportAsXWindow* pTunnel = dynamic_cast<weld::TransportAsXWindow*>(getParent().get()))
    {
        m_pToolbar = dynamic_cast<weld::Toolbar*>(pTunnel->getWidget());
        assert(m_pToolbar && "must be a toolbar");
    }
}

void SAL_CALL ToolboxController::update()
diff --git a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
index 0b050bb..e53bd5d 100644
--- a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
+++ b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
@@ -35,13 +35,14 @@
#include <svtools/toolbarmenu.hxx>
#include <svx/tbcontrl.hxx>
#include <sfx2/opengrf.hxx>
#include <sfx2/weldutils.hxx>
#include <tools/urlobj.hxx>
#include <bitmaps.hlst>

using namespace css;
using namespace css::uno;

const char UNO_SIDEBARGRADIENT[] = ".uno:sidebargradient";
const char SIDEBARGRADIENT[] = "sidebargradient";

namespace svx { namespace sidebar {

@@ -69,7 +70,7 @@ const sal_Int32 AreaPropertyPanelBase::DEFAULT_BORDER = 0;
AreaPropertyPanelBase::AreaPropertyPanelBase(
    vcl::Window* pParent,
    const css::uno::Reference<css::frame::XFrame>& rxFrame)
    : PanelLayout(pParent, "AreaPropertyPanel", "svx/ui/sidebararea.ui", rxFrame),
    : PanelLayout(pParent, "AreaPropertyPanel", "svx/ui/sidebararea.ui", rxFrame, true),
      meLastXFS(static_cast<sal_uInt16>(-1)),
      mnLastPosHatch(0),
      mnLastPosBitmap(0),
@@ -81,37 +82,36 @@ AreaPropertyPanelBase::AreaPropertyPanelBase(
      maGradientElliptical(),
      maGradientSquare(),
      maGradientRect(),
      mxColorTextFT(m_xBuilder->weld_label("filllabel")),
      mxLbFillType(m_xBuilder->weld_combo_box("fillstyle")),
      mxLbFillAttr(m_xBuilder->weld_combo_box("fillattr")),
      mxLbFillGradFrom(new ColorListBox(m_xBuilder->weld_menu_button("fillgrad1"), GetFrameWeld())),
      mxLbFillGradTo(new ColorListBox(m_xBuilder->weld_menu_button("fillgrad2"), GetFrameWeld())),
      mxToolBoxColor(m_xBuilder->weld_toolbar("selectcolor")),
      mxColorDispatch(new ToolbarUnoDispatcher(*mxToolBoxColor, rxFrame)),
      mxTrspTextFT(m_xBuilder->weld_label("transparencylabel")),
      mxLBTransType(m_xBuilder->weld_combo_box("transtype")),
      mxMTRTransparent(m_xBuilder->weld_metric_spin_button("settransparency", FieldUnit::PERCENT)),
      mxSldTransparent(m_xBuilder->weld_scale("transparencyslider")),
      mxBTNGradient(m_xBuilder->weld_toolbar("selectgradient")),
      mxMTRAngle(m_xBuilder->weld_metric_spin_button("gradangle", FieldUnit::DEGREE)),
      mxGradientStyle(m_xBuilder->weld_combo_box("gradientstyle")),
      mxBmpImport(m_xBuilder->weld_button("bmpimport")),
      mpStyleItem(),
      mpColorItem(),
      mpFillGradientItem(),
      mpHatchItem(),
      mpBitmapItem(),
      maImgAxial(StockImage::Yes, BMP_AXIAL),
      maImgElli(StockImage::Yes, BMP_ELLI),
      maImgQuad(StockImage::Yes, BMP_QUAD),
      maImgRadial(StockImage::Yes, BMP_RADIAL),
      maImgSquare(StockImage::Yes, BMP_SQUARE),
      maImgLinear(StockImage::Yes, BMP_LINEAR),
      maImgAxial(BMP_AXIAL),
      maImgElli(BMP_ELLI),
      maImgQuad(BMP_QUAD),
      maImgRadial(BMP_RADIAL),
      maImgSquare(BMP_SQUARE),
      maImgLinear(BMP_LINEAR),
      mpFloatTransparenceItem(),
      mpTransparanceItem()
{
    get(mpColorTextFT,    "filllabel");
    get(mpLbFillType,     "fillstyle");
    get(mpLbFillAttr,     "fillattr");
    get(mpTrspTextFT,     "transparencylabel");
    get(mpToolBoxColor,   "selectcolor");
    get(mpLBTransType,    "transtype");
    get(mpMTRTransparent, "settransparency");
    get(mpSldTransparent, "transparencyslider");
    get(mpBTNGradient,    "selectgradient");
    get(mpMTRAngle, "gradangle");
    get(mpLbFillGradFrom, "fillgrad1");
    get(mpLbFillGradTo, "fillgrad2");
    get(mpGradientStyle, "gradientstyle");
    get(mpBmpImport, "bmpimport");
    mpPanel = dynamic_cast<sfx2::sidebar::Panel*>(pParent);

    Initialize();
}

AreaPropertyPanelBase::~AreaPropertyPanelBase()
@@ -121,21 +121,22 @@ AreaPropertyPanelBase::~AreaPropertyPanelBase()

void AreaPropertyPanelBase::dispose()
{
    mxTrGrPopup.disposeAndClear();
    mpColorTextFT.clear();
    mpLbFillType.clear();
    mpLbFillAttr.clear();
    mpToolBoxColor.clear();
    mpTrspTextFT.clear();
    mpLBTransType.clear();
    mpMTRTransparent.clear();
    mpSldTransparent.clear();
    mpBTNGradient.clear();
    mpMTRAngle.clear();
    mpLbFillGradFrom.clear();
    mpLbFillGradTo.clear();
    mpGradientStyle.clear();
    mpBmpImport.clear();
    mxTrGrPopup.reset();
    mxColorTextFT.reset();
    mxLbFillType.reset();
    mxLbFillAttr.reset();
    mxColorDispatch.reset();
    mxToolBoxColor.reset();
    mxTrspTextFT.reset();
    mxLBTransType.reset();
    mxMTRTransparent.reset();
    mxSldTransparent.reset();
    mxBTNGradient.reset();
    mxMTRAngle.reset();
    mxLbFillGradFrom.reset();
    mxLbFillGradTo.reset();
    mxGradientStyle.reset();
    mxBmpImport.reset();
    mpPanel.clear();

    PanelLayout::dispose();
@@ -143,6 +144,8 @@ void AreaPropertyPanelBase::dispose()

void AreaPropertyPanelBase::Initialize()
{
    FillTypeLB::Fill(*mxLbFillType);

    maGradientLinear.SetXOffset(DEFAULT_CENTERX);
    maGradientLinear.SetYOffset(DEFAULT_CENTERY);
    maGradientLinear.SetAngle(DEFAULT_ANGLE);
@@ -167,39 +170,44 @@ void AreaPropertyPanelBase::Initialize()
    maGradientRect.SetGradientStyle(css::awt::GradientStyle_RECT);


    mpLbFillType->SetSelectHdl( LINK( this, AreaPropertyPanelBase, SelectFillTypeHdl ) );
    mxLbFillType->connect_changed( LINK( this, AreaPropertyPanelBase, SelectFillTypeHdl ) );

    Link<ListBox&,void> aLink = LINK( this, AreaPropertyPanelBase, SelectFillAttrHdl );
    Link<SvxColorListBox&,void> aLink3 = LINK( this, AreaPropertyPanelBase, SelectFillColorHdl );
    mpLbFillAttr->SetSelectHdl( aLink );
    mpGradientStyle->SetSelectHdl( aLink );
    mpLbFillGradFrom->SetSelectHdl( aLink3 );
    mpLbFillGradTo->SetSelectHdl( aLink3 );
    mpMTRAngle->SetModifyHdl(LINK(this,AreaPropertyPanelBase, ChangeGradientAngle));
    Link<weld::ComboBox&,void> aLink = LINK( this, AreaPropertyPanelBase, SelectFillAttrHdl );
    mxLbFillAttr->connect_changed( aLink );
    mxGradientStyle->connect_changed( aLink );
    Link<ColorListBox&,void> aLink3 = LINK( this, AreaPropertyPanelBase, SelectFillColorHdl );
    mxLbFillGradFrom->SetSelectHdl( aLink3 );
    mxLbFillGradTo->SetSelectHdl( aLink3 );
    mxMTRAngle->connect_value_changed(LINK(this,AreaPropertyPanelBase, ChangeGradientAngle));

    mpLBTransType->SetSelectHdl(LINK(this, AreaPropertyPanelBase, ChangeTrgrTypeHdl_Impl));
    mxLBTransType->connect_changed(LINK(this, AreaPropertyPanelBase, ChangeTrgrTypeHdl_Impl));

    SetTransparency( 50 );
    mpMTRTransparent->SetModifyHdl(LINK(this, AreaPropertyPanelBase, ModifyTransparentHdl_Impl));
    mpSldTransparent->SetSlideHdl(LINK(this, AreaPropertyPanelBase, ModifyTransSliderHdl));
    mxMTRTransparent->connect_value_changed(LINK(this, AreaPropertyPanelBase, ModifyTransparentHdl_Impl));
    mxSldTransparent->connect_value_changed(LINK(this, AreaPropertyPanelBase, ModifyTransSliderHdl));

    const sal_uInt16 nIdGradient = mpBTNGradient->GetItemId(UNO_SIDEBARGRADIENT);
    mpBTNGradient->SetItemBits( nIdGradient, mpBTNGradient->GetItemBits( nIdGradient ) | ToolBoxItemBits::DROPDOWNONLY );
    Link<ToolBox *, void> aLink2 = LINK( this, AreaPropertyPanelBase, ClickTrGrHdl_Impl );
    mpBTNGradient->SetDropdownClickHdl( aLink2 );
    mpBTNGradient->SetSelectHdl( aLink2 );
    mpBTNGradient->SetItemImage(nIdGradient,maImgLinear);
    mpBTNGradient->Hide();
    mpBmpImport->SetClickHdl( LINK(this, AreaPropertyPanelBase, ClickImportBitmapHdl));
    mxTrGrPopup = std::make_unique<AreaTransparencyGradientPopup>(*this, mxBTNGradient.get());

    mxBTNGradient->set_item_popover(SIDEBARGRADIENT, mxTrGrPopup->getTopLevel());
    mxBTNGradient->connect_clicked(LINK(this, AreaPropertyPanelBase, ToolbarHdl_Impl));

    mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgLinear);
    mxBTNGradient->hide();
    mxBmpImport->connect_clicked( LINK(this, AreaPropertyPanelBase, ClickImportBitmapHdl));
}

IMPL_LINK_NOARG(AreaPropertyPanelBase, ToolbarHdl_Impl, const OString&, void)
{
    mxBTNGradient->set_menu_item_active(SIDEBARGRADIENT, !mxBTNGradient->get_menu_item_active(SIDEBARGRADIENT));
}

void AreaPropertyPanelBase::SetTransparency(sal_uInt16 nVal)
{
    mpSldTransparent->SetThumbPos(nVal);
    mpMTRTransparent->SetValue(nVal);
    mxSldTransparent->set_value(nVal);
    mxMTRTransparent->set_value(nVal, FieldUnit::PERCENT);
}

IMPL_LINK_NOARG(AreaPropertyPanelBase, ClickImportBitmapHdl, Button*, void)
IMPL_LINK_NOARG(AreaPropertyPanelBase, ClickImportBitmapHdl, weld::Button&, void)
{
    SvxOpenGraphicDialog aDlg("Import", GetFrameWeld());
    aDlg.EnableLink(false);
@@ -232,18 +240,18 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, ClickImportBitmapHdl, Button*, void)

            pList->Insert(std::make_unique<XBitmapEntry>(aGraphic, aName));
            pList->Save();
            mpLbFillAttr->Clear();
            mpLbFillAttr->Fill(pList);
            mpLbFillAttr->SelectEntry(aName);
            SelectFillAttrHdl(*mpLbFillAttr);
            mxLbFillAttr->clear();
            SvxFillAttrBox::Fill(*mxLbFillAttr, pList);
            mxLbFillAttr->set_active_text(aName);
            SelectFillAttrHdl(*mxLbFillAttr);
        }
    }
}

IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void)
IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, weld::ComboBox&, void)
{
    sal_Int32 nPos = static_cast<eFillStyle>(mpLbFillType->GetSelectedEntryPos());
    mpLbFillAttr->Clear();
    sal_Int32 nPos = static_cast<eFillStyle>(mxLbFillType->get_active());
    mxLbFillAttr->clear();
    SfxObjectShell* pSh = SfxObjectShell::Current();
    if(!pSh)
        return;
@@ -257,15 +265,14 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void)
        default:
        case NONE:
        {
            mpLbFillAttr->Show();
            mpLbFillGradFrom->Hide();
            mpLbFillGradTo->Hide();
            mpGradientStyle->Hide();
            mpMTRAngle->Hide();
            mpToolBoxColor->Hide();
            mpBmpImport->Hide();
            mpLbFillType->Selected();
            mpLbFillAttr->Disable();
            mxLbFillAttr->show();
            mxLbFillGradFrom->hide();
            mxLbFillGradTo->hide();
            mxGradientStyle->hide();
            mxMTRAngle->hide();
            mxToolBoxColor->hide();
            mxBmpImport->hide();
            mxLbFillAttr->set_sensitive(false);

            // #i122676# need to call a single SID_ATTR_FILL_STYLE change
            setFillStyle(XFillStyleItem(drawing::FillStyle_NONE));
@@ -273,13 +280,13 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void)
        }
        case SOLID:
        {
            mpLbFillAttr->Hide();
            mpLbFillGradFrom->Hide();
            mpLbFillGradTo->Hide();
            mpGradientStyle->Hide();
            mpMTRAngle->Hide();
            mpBmpImport->Hide();
            mpToolBoxColor->Show();
            mxLbFillAttr->hide();
            mxLbFillGradFrom->hide();
            mxLbFillGradTo->hide();
            mxGradientStyle->hide();
            mxMTRAngle->hide();
            mxBmpImport->hide();
            mxToolBoxColor->show();
            const OUString aTmpStr;
            const Color aColor = mpColorItem ? mpColorItem->GetColorValue() : COL_AUTO;
            const XFillColorItem aXFillColorItem( aTmpStr, aColor );
@@ -291,20 +298,20 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void)
        }
        case GRADIENT:
        {
            mpLbFillAttr->Hide();
            mpLbFillGradFrom->Show();
            mpLbFillGradTo->Show();
            mpGradientStyle->Show();
            mpMTRAngle->Show();
            mpToolBoxColor->Hide();
            mpBmpImport->Hide();
            mxLbFillAttr->hide();
            mxLbFillGradFrom->show();
            mxLbFillGradTo->show();
            mxGradientStyle->show();
            mxMTRAngle->show();
            mxToolBoxColor->hide();
            mxBmpImport->hide();

            mpLbFillAttr->Enable();
            mpLbFillGradTo->Enable();
            mpLbFillGradFrom->Enable();
            mpGradientStyle->Enable();
            mpMTRAngle->Enable();
            mpLbFillAttr->Clear();
            mxLbFillAttr->set_sensitive(true);
            mxLbFillGradTo->set_sensitive(true);
            mxLbFillGradFrom->set_sensitive(true);
            mxGradientStyle->set_sensitive(true);
            mxMTRAngle->set_sensitive(true);
            mxLbFillAttr->clear();

            const SvxGradientListItem * pItem = pSh->GetItem(SID_GRADIENT_LIST);

@@ -317,36 +324,34 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void)
                // #i122676# change FillStyle and Gradient in one call
                XFillStyleItem aXFillStyleItem(drawing::FillStyle_GRADIENT);
                setFillStyleAndGradient(&aXFillStyleItem, aXFillGradientItem);
                mpLbFillGradFrom->SelectEntry(aGradient.GetStartColor());
                mpLbFillGradTo->SelectEntry(aGradient.GetEndColor());
                mxLbFillGradFrom->SelectEntry(aGradient.GetStartColor());
                mxLbFillGradTo->SelectEntry(aGradient.GetEndColor());

                mpMTRAngle->SetValue(aGradient.GetAngle() / 10);
                mxMTRAngle->set_value(aGradient.GetAngle() / 10, FieldUnit::DEGREE);
                css::awt::GradientStyle eXGS = aGradient.GetGradientStyle();
                mpGradientStyle->SelectEntryPos(sal::static_int_cast< sal_Int32 >( eXGS ));
                mxGradientStyle->set_active(sal::static_int_cast< sal_Int32 >( eXGS ));
            }
            break;
        }
        case HATCH:
        {
            mpLbFillAttr->Show();
            mpLbFillGradFrom->Hide();
            mpLbFillGradTo->Hide();
            mpMTRAngle->Hide();
            mpGradientStyle->Hide();
            mpToolBoxColor->Hide();
            mpBmpImport->Hide();
            mxLbFillAttr->show();
            mxLbFillGradFrom->hide();
            mxLbFillGradTo->hide();
            mxMTRAngle->hide();
            mxGradientStyle->hide();
            mxToolBoxColor->hide();
            mxBmpImport->hide();

            const SvxHatchListItem* pItem( pSh->GetItem(SID_HATCH_LIST) );
            if(pItem)
            {
                const XHatchListRef& pXHatchList(pItem->GetHatchList());
                mpLbFillAttr->Enable();
                mpLbFillAttr->Clear();
                mpLbFillAttr->Fill(pXHatchList);
                mxLbFillAttr->set_sensitive(true);
                mxLbFillAttr->clear();
                SvxFillAttrBox::Fill(*mxLbFillAttr, pXHatchList);

                mpLbFillAttr->AdaptDropDownLineCountToMaximum();

                if(LISTBOX_ENTRY_NOTFOUND != mnLastPosHatch)
                if (mnLastPosHatch != -1)
                {
                    if(mnLastPosHatch < pXHatchList->Count())
                    {
@@ -357,81 +362,78 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void)
                        // #i122676# change FillStyle and Hatch in one call
                        XFillStyleItem aXFillStyleItem(drawing::FillStyle_HATCH);
                        setFillStyleAndHatch(&aXFillStyleItem, aXFillHatchItem);
                        mpLbFillAttr->SelectEntryPos(mnLastPosHatch);
                        mxLbFillAttr->set_active(mnLastPosHatch);
                    }
                }
            }
            else
            {
                mpLbFillAttr->Disable();
                mxLbFillAttr->set_sensitive(false);
            }
            break;
        }
        case BITMAP:
        case PATTERN:
        {
            mpLbFillAttr->Show();
            mpLbFillAttr->Enable();
            mpLbFillAttr->Clear();
            mpLbFillGradFrom->Hide();
            mpLbFillGradTo->Hide();
            mpMTRAngle->Hide();
            mpGradientStyle->Hide();
            mpToolBoxColor->Hide();
            mxLbFillAttr->show();
            mxLbFillAttr->set_sensitive(true);
            mxLbFillAttr->clear();
            mxLbFillGradFrom->hide();
            mxLbFillGradTo->hide();
            mxMTRAngle->hide();
            mxGradientStyle->hide();
            mxToolBoxColor->hide();

            OUString aName;
            GraphicObject aBitmap;
            if(nPos == static_cast< sal_Int32 >(BITMAP))
            {
                mpBmpImport->Show();
                mxBmpImport->show();
                const SvxBitmapListItem* pItem = pSh->GetItem(SID_BITMAP_LIST);
                if(pItem)
                {
                    const XBitmapListRef& pXBitmapList(pItem->GetBitmapList());
                    mpLbFillAttr->Fill(pXBitmapList);
                    SvxFillAttrBox::Fill(*mxLbFillAttr, pXBitmapList);

                    mpLbFillAttr->AdaptDropDownLineCountToMaximum();

                    if(LISTBOX_ENTRY_NOTFOUND != mnLastPosBitmap)
                    if (mnLastPosBitmap != -1)
                    {
                        if(mnLastPosBitmap < pXBitmapList->Count())
                        {
                            const XBitmapEntry* pXBitmapEntry = pXBitmapList->GetBitmap(mnLastPosBitmap);
                            aBitmap = pXBitmapEntry->GetGraphicObject();
                            aName = pXBitmapEntry->GetName();
                            mpLbFillAttr->SelectEntryPos(mnLastPosBitmap);
                            mxLbFillAttr->set_active(mnLastPosBitmap);
                        }
                    }
                }
                else
                {
                    mpLbFillAttr->Hide();
                    mxLbFillAttr->hide();
                }
            }
            else if(nPos == static_cast< sal_Int32 >(PATTERN))
            {
                mpBmpImport->Hide();
                mxBmpImport->hide();
                const SvxPatternListItem* pItem = pSh->GetItem(SID_PATTERN_LIST);
                if(pItem)
                {
                    const XPatternListRef& pXPatternList(pItem->GetPatternList());
                    mpLbFillAttr->Fill(pXPatternList);
                    SvxFillAttrBox::Fill(*mxLbFillAttr, pXPatternList);

                    mpLbFillAttr->AdaptDropDownLineCountToMaximum();
                    if(LISTBOX_ENTRY_NOTFOUND != mnLastPosPattern)
                    if (mnLastPosPattern != -1)
                    {
                        if(mnLastPosPattern < pXPatternList->Count())
                        {
                            const XBitmapEntry* pXPatternEntry = pXPatternList->GetBitmap(mnLastPosPattern);
                            aBitmap = pXPatternEntry->GetGraphicObject();
                            aName = pXPatternEntry->GetName();
                            mpLbFillAttr->SelectEntryPos(mnLastPosPattern);
                            mxLbFillAttr->set_active(mnLastPosPattern);
                        }
                    }
                }
                else
                {
                    mpLbFillAttr->Hide();
                    mxLbFillAttr->hide();
                }
            }
            const XFillBitmapItem aXFillBitmapItem( aName, aBitmap );
@@ -443,25 +445,21 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillTypeHdl, ListBox&, void)

    meLastXFS = static_cast<sal_uInt16>(nPos);

    if(eFillStyle::NONE != static_cast<eFillStyle>(nPos))
    {
        mpLbFillType->Selected();
    }
    if(mpPanel)
        mpPanel->TriggerDeckLayouting();
}

IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillColorHdl, SvxColorListBox&, void)
IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillColorHdl, ColorListBox&, void)
{
    SelectFillAttrHdl_Impl();
}

IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillAttrHdl, ListBox&, void)
IMPL_LINK_NOARG(AreaPropertyPanelBase, SelectFillAttrHdl, weld::ComboBox&, void)
{
    SelectFillAttrHdl_Impl();
}

IMPL_LINK_NOARG(AreaPropertyPanelBase, ChangeGradientAngle, Edit&, void)
IMPL_LINK_NOARG(AreaPropertyPanelBase, ChangeGradientAngle, weld::MetricSpinButton&, void)
{
    SelectFillAttrHdl_Impl();
}
@@ -473,7 +471,7 @@ void AreaPropertyPanelBase::DataChanged(

void AreaPropertyPanelBase::SelectFillAttrHdl_Impl()
{
    sal_Int32 nPosFillStyle = static_cast<eFillStyle>(mpLbFillType->GetSelectedEntryPos());
    sal_Int32 nPosFillStyle = static_cast<eFillStyle>(mxLbFillType->get_active());
    SfxObjectShell* pSh = SfxObjectShell::Current();

    // #i122676# dependent from bFillStyleChange, do execute a single or two
@@ -507,12 +505,12 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl()
            if(pSh && pSh->GetItem(SID_COLOR_TABLE))
            {
                XGradient aGradient;
                aGradient.SetAngle(mpMTRAngle->GetValue() * 10);
                aGradient.SetGradientStyle(static_cast<css::awt::GradientStyle>(mpGradientStyle->GetSelectedEntryPos()));
                aGradient.SetStartColor(mpLbFillGradFrom->GetSelectEntryColor());
                aGradient.SetEndColor(mpLbFillGradTo->GetSelectEntryColor());
                aGradient.SetAngle(mxMTRAngle->get_value(FieldUnit::DEGREE) * 10);
                aGradient.SetGradientStyle(static_cast<css::awt::GradientStyle>(mxGradientStyle->get_active()));
                aGradient.SetStartColor(mxLbFillGradFrom->GetSelectEntryColor());
                aGradient.SetEndColor(mxLbFillGradTo->GetSelectEntryColor());

                const XFillGradientItem aXFillGradientItem(mpLbFillAttr->GetSelectedEntry(), aGradient);
                const XFillGradientItem aXFillGradientItem(mxLbFillAttr->get_active_text(), aGradient);

                    // #i122676# Change FillStyle and Gradinet in one call
                XFillStyleItem aXFillStyleItem(drawing::FillStyle_GRADIENT);
@@ -522,21 +520,21 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl()
        }
        case eFillStyle::HATCH:
        {
            sal_Int32 nPos = mpLbFillAttr->GetSelectedEntryPos();
            sal_Int32 nPos = mxLbFillAttr->get_active();

            if(LISTBOX_ENTRY_NOTFOUND == nPos)
            if (nPos == -1)
            {
                nPos = mnLastPosHatch;
            }

            if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_HATCH_LIST))
            if (nPos != -1 && pSh && pSh->GetItem(SID_HATCH_LIST))
            {
                const SvxHatchListItem * pItem = pSh->GetItem(SID_HATCH_LIST);

                if(nPos < pItem->GetHatchList()->Count())
                {
                    const XHatch aHatch = pItem->GetHatchList()->GetHatch(nPos)->GetHatch();
                    const XFillHatchItem aXFillHatchItem( mpLbFillAttr->GetSelectedEntry(), aHatch);
                    const XFillHatchItem aXFillHatchItem( mxLbFillAttr->get_active_text(), aHatch);

                    // #i122676# Change FillStyle and Hatch in one call
                    XFillStyleItem aXFillStyleItem(drawing::FillStyle_HATCH);
@@ -544,7 +542,7 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl()
                }
            }

            if(LISTBOX_ENTRY_NOTFOUND != nPos)
            if (nPos != -1)
            {
                mnLastPosHatch = nPos;
            }
@@ -552,21 +550,21 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl()
        }
        case eFillStyle::BITMAP:
        {
            sal_Int32 nPos = mpLbFillAttr->GetSelectedEntryPos();
            sal_Int32 nPos = mxLbFillAttr->get_active();

            if(LISTBOX_ENTRY_NOTFOUND == nPos)
            if (nPos == -1)
            {
                nPos = mnLastPosBitmap;
            }

            if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_BITMAP_LIST))
            if (nPos != -1 && pSh && pSh->GetItem(SID_BITMAP_LIST))
            {
                const SvxBitmapListItem * pItem = pSh->GetItem(SID_BITMAP_LIST);

                if(nPos < pItem->GetBitmapList()->Count())
                {
                    const XBitmapEntry* pXBitmapEntry = pItem->GetBitmapList()->GetBitmap(nPos);
                    const XFillBitmapItem aXFillBitmapItem(mpLbFillAttr->GetSelectedEntry(), pXBitmapEntry->GetGraphicObject());
                    const XFillBitmapItem aXFillBitmapItem(mxLbFillAttr->get_active_text(), pXBitmapEntry->GetGraphicObject());

                    // #i122676# Change FillStyle and Bitmap in one call
                    XFillStyleItem aXFillStyleItem(drawing::FillStyle_BITMAP);
@@ -574,7 +572,7 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl()
                }
            }

            if(LISTBOX_ENTRY_NOTFOUND != nPos)
            if (nPos != -1)
            {
                mnLastPosBitmap = nPos;
            }
@@ -582,21 +580,21 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl()
        }
        case eFillStyle::PATTERN:
        {
            sal_Int32 nPos = mpLbFillAttr->GetSelectedEntryPos();
            sal_Int32 nPos = mxLbFillAttr->get_active();

            if(LISTBOX_ENTRY_NOTFOUND == nPos)
            if (nPos == -1)
            {
                nPos = mnLastPosPattern;
            }

            if(LISTBOX_ENTRY_NOTFOUND != nPos && pSh && pSh->GetItem(SID_PATTERN_LIST))
            if (nPos != -1 && pSh && pSh->GetItem(SID_PATTERN_LIST))
            {
                const SvxPatternListItem * pItem = pSh->GetItem(SID_PATTERN_LIST);

                if(nPos < pItem->GetPatternList()->Count())
                {
                    const XBitmapEntry* pXPatternEntry = pItem->GetPatternList()->GetBitmap(nPos);
                    const XFillBitmapItem aXFillBitmapItem(mpLbFillAttr->GetSelectedEntry(), pXPatternEntry->GetGraphicObject());
                    const XFillBitmapItem aXFillBitmapItem(mxLbFillAttr->get_active_text(), pXPatternEntry->GetGraphicObject());

                    // #i122676# Change FillStyle and Bitmap in one call
                    XFillStyleItem aXFillStyleItem(drawing::FillStyle_BITMAP);
@@ -604,7 +602,7 @@ void AreaPropertyPanelBase::SelectFillAttrHdl_Impl()
                }
            }

            if(LISTBOX_ENTRY_NOTFOUND != nPos)
            if (nPos != -1)
            {
                mnLastPosPattern = nPos;
            }
@@ -631,20 +629,20 @@ void AreaPropertyPanelBase::ImpUpdateTransparencies()
            }
            else if(nValue <= 100)
            {
                mpLBTransType->Enable();
                mpTrspTextFT->Enable();
                mpLBTransType->SelectEntryPos(1);
                mpBTNGradient->Hide();
                mpMTRTransparent->Show();
                mpSldTransparent->Show();
                mpMTRTransparent->Enable();
                mpSldTransparent->Enable();
                mxLBTransType->set_sensitive(true);
                mxTrspTextFT->set_sensitive(true);
                mxLBTransType->set_active(1);
                mxBTNGradient->hide();
                mxMTRTransparent->show();
                mxSldTransparent->show();
                mxMTRTransparent->set_sensitive(true);
                mxSldTransparent->set_sensitive(true);
                SetTransparency(nValue);
            }

            if (!bZeroValue && mxTrGrPopup)
            {
                mxTrGrPopup->EndPopupMode();
                mxBTNGradient->set_menu_item_active(SIDEBARGRADIENT, false);
            }
        }

@@ -654,14 +652,14 @@ void AreaPropertyPanelBase::ImpUpdateTransparencies()
            {
                const XGradient& rGradient = mpFloatTransparenceItem->GetGradientValue();
                sal_Int32 nEntryPos(0);
                Image* pImage = nullptr;
                OUString* pImage = nullptr;

                mpLBTransType->Enable();
                mpTrspTextFT->Enable();
                mpMTRTransparent->Hide();
                mpSldTransparent->Hide();
                mpBTNGradient->Enable();
                mpBTNGradient->Show();
                mxLBTransType->set_sensitive(true);
                mxTrspTextFT->set_sensitive(true);
                mxMTRTransparent->hide();
                mxSldTransparent->hide();
                mxBTNGradient->set_sensitive(true);
                mxBTNGradient->show();

                switch(rGradient.GetGradientStyle())
                {
@@ -703,10 +701,9 @@ void AreaPropertyPanelBase::ImpUpdateTransparencies()
                        break;
                    }
                }

                const sal_uInt16 nIdGradient = mpBTNGradient->GetItemId(UNO_SIDEBARGRADIENT);
                mpLBTransType->SelectEntryPos(nEntryPos);
                mpBTNGradient->SetItemImage(nIdGradient, *pImage);
                mxLBTransType->set_active(nEntryPos);
                mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, *pImage);
                mxTrGrPopup->Rearrange(mpFloatTransparenceItem.get());
                bZeroValue = false;
            }
            else
@@ -717,29 +714,29 @@ void AreaPropertyPanelBase::ImpUpdateTransparencies()

        if(bZeroValue)
        {
            mpLBTransType->Enable();
            mpTrspTextFT->Enable();
            mpLBTransType->SelectEntryPos(0);
            mpBTNGradient->Hide();
            mpMTRTransparent->Enable();
            mpSldTransparent->Enable();
            mpMTRTransparent->Show();
            mpSldTransparent->Show();
            mxLBTransType->set_sensitive(true);
            mxTrspTextFT->set_sensitive(true);
            mxLBTransType->set_active(0);
            mxBTNGradient->hide();
            mxMTRTransparent->set_sensitive(true);
            mxSldTransparent->set_sensitive(true);
            mxMTRTransparent->show();
            mxSldTransparent->show();
            SetTransparency(0);
        }
    }
    else
    {
        // no transparency at all
        mpLBTransType->SetNoSelection();
        mpLBTransType->Disable();
        mpTrspTextFT->Disable();
        mpMTRTransparent->Disable();
        mpSldTransparent->Disable();
        mpMTRTransparent->Show();
        mpSldTransparent->Show();
        mpBTNGradient->Disable();
        mpBTNGradient->Hide();
        mxLBTransType->set_active(-1);
        mxLBTransType->set_sensitive(false);
        mxTrspTextFT->set_sensitive(false);
        mxMTRTransparent->set_sensitive(false);
        mxSldTransparent->set_sensitive(false);
        mxMTRTransparent->show();
        mxSldTransparent->show();
        mxBTNGradient->set_sensitive(false);
        mxBTNGradient->hide();
    }
}

@@ -804,13 +801,13 @@ void AreaPropertyPanelBase::updateFillStyle(bool bDisabled, bool bDefaultOrSet, 
{
    if(bDisabled)
    {
        mpLbFillType->Disable();
        mpColorTextFT->Disable();
        mpLbFillType->SetNoSelection();
        mpLbFillAttr->Show();
        mpLbFillAttr->Disable();
        mpLbFillAttr->SetNoSelection();
        mpToolBoxColor->Hide();
        mxLbFillType->set_sensitive(false);
        mxColorTextFT->set_sensitive(false);
        mxLbFillType->set_active(-1);
        mxLbFillAttr->show();
        mxLbFillAttr->set_sensitive(false);
        mxLbFillAttr->set_active(-1);
        mxToolBoxColor->hide();
        meLastXFS = static_cast<sal_uInt16>(-1);
        mpStyleItem.reset();
    }
@@ -818,8 +815,8 @@ void AreaPropertyPanelBase::updateFillStyle(bool bDisabled, bool bDefaultOrSet, 
    {
        const XFillStyleItem* pItem = static_cast<const XFillStyleItem*>(pState);
        mpStyleItem.reset(pItem->Clone());
        mpLbFillType->Enable();
        mpColorTextFT->Enable();
        mxLbFillType->set_sensitive(true);
        mxColorTextFT->set_sensitive(true);
        drawing::FillStyle eXFS = mpStyleItem->GetValue();
        eFillStyle nPos = NONE;
        switch(eXFS)
@@ -827,8 +824,8 @@ void AreaPropertyPanelBase::updateFillStyle(bool bDisabled, bool bDefaultOrSet, 
            default:
            case drawing::FillStyle_NONE:
            {
                mpLbFillAttr->SetNoSelection();
                mpLbFillAttr->Disable();
                mxLbFillAttr->set_active(-1);
                mxLbFillAttr->set_sensitive(false);
                nPos = NONE;
                break;
            }
@@ -855,17 +852,17 @@ void AreaPropertyPanelBase::updateFillStyle(bool bDisabled, bool bDefaultOrSet, 
                break;
            }
        }
        meLastXFS = static_cast< sal_uInt16 >(mpLbFillType->GetSelectedEntryPos());
        mpLbFillType->SelectEntryPos(static_cast< sal_Int32 >(nPos));
        meLastXFS = static_cast< sal_uInt16 >(mxLbFillType->get_active());
        mxLbFillType->set_active(static_cast< sal_Int32 >(nPos));
        Update();
        return;
    }

    mpLbFillType->SetNoSelection();
    mpLbFillAttr->Show();
    mpLbFillAttr->Disable();
    mpLbFillAttr->SetNoSelection();
    mpToolBoxColor->Hide();
    mxLbFillType->set_active(-1);
    mxLbFillAttr->show();
    mxLbFillAttr->set_sensitive(false);
    mxLbFillAttr->set_active(-1);
    mxToolBoxColor->hide();
    meLastXFS = static_cast<sal_uInt16>(-1);
    mpStyleItem.reset();
    if(mpPanel)
@@ -882,31 +879,31 @@ void AreaPropertyPanelBase::updateFillGradient(bool bDisabled, bool bDefaultOrSe

    if(mpStyleItem && drawing::FillStyle_GRADIENT == mpStyleItem->GetValue())
    {
        mpLbFillAttr->Hide();
        mpLbFillGradFrom->Show();
        mpLbFillGradTo->Show();
        mpMTRAngle->Show();
        mpGradientStyle->Show();
        mpToolBoxColor->Hide();
        mxLbFillAttr->hide();
        mxLbFillGradFrom->show();
        mxLbFillGradTo->show();
        mxMTRAngle->show();
        mxGradientStyle->show();
        mxToolBoxColor->hide();

        if (bDefaultOrSet)
        {
            mpLbFillType->SelectEntryPos(GRADIENT);
            mxLbFillType->set_active(GRADIENT);
            Update();
        }
        else if(bDisabled)
        {
            mpLbFillGradFrom->SetNoSelection();
            mpLbFillGradTo->SetNoSelection();
            mpLbFillGradFrom->Disable();
            mpLbFillGradTo->Disable();
            mpMTRAngle->Disable();
            mpGradientStyle->Disable();
            mxLbFillGradFrom->SetNoSelection();
            mxLbFillGradTo->SetNoSelection();
            mxLbFillGradFrom->set_sensitive(false);
            mxLbFillGradTo->set_sensitive(false);
            mxMTRAngle->set_sensitive(false);
            mxGradientStyle->set_sensitive(false);
        }
        else
        {
            mpLbFillGradFrom->SetNoSelection();
            mpLbFillGradTo->SetNoSelection();
            mxLbFillGradFrom->SetNoSelection();
            mxLbFillGradTo->SetNoSelection();
        }
    }
    if(mpPanel)
@@ -923,23 +920,23 @@ void AreaPropertyPanelBase::updateFillHatch(bool bDisabled, bool bDefaultOrSet, 

    if(mpStyleItem && drawing::FillStyle_HATCH == mpStyleItem->GetValue())
    {
        mpLbFillAttr->Show();
        mpToolBoxColor->Hide();
        mxLbFillAttr->show();
        mxToolBoxColor->hide();

        if (bDefaultOrSet)
        {
            mpLbFillAttr->Enable();
            mpLbFillType->SelectEntryPos(HATCH);
            mxLbFillAttr->set_sensitive(true);
            mxLbFillType->set_active(HATCH);
            Update();
        }
        else if(bDisabled)
        {
            mpLbFillAttr->Disable();
            mpLbFillAttr->SetNoSelection();
            mxLbFillAttr->set_sensitive(false);
            mxLbFillAttr->set_active(-1);
        }
        else
        {
            mpLbFillAttr->SetNoSelection();
            mxLbFillAttr->set_active(-1);
        }
    }
    if(mpPanel)
@@ -956,9 +953,9 @@ void AreaPropertyPanelBase::updateFillColor(bool bDefaultOrSet, const SfxPoolIte

    if(mpStyleItem && drawing::FillStyle_SOLID == mpStyleItem->GetValue())
    {
        mpLbFillAttr->Hide();
        mpToolBoxColor->Show();
        mpLbFillType->SelectEntryPos(SOLID);
        mxLbFillAttr->hide();
        mxToolBoxColor->show();
        mxLbFillType->set_active(SOLID);
        Update();
    }
    if(mpPanel)
@@ -975,25 +972,25 @@ void AreaPropertyPanelBase::updateFillBitmap(bool bDisabled, bool bDefaultOrSet,

    if(mpStyleItem && drawing::FillStyle_BITMAP == mpStyleItem->GetValue())
    {
        mpLbFillAttr->Show();
        mpToolBoxColor->Hide();
        mxLbFillAttr->show();
        mxToolBoxColor->hide();

        if (bDefaultOrSet)
        {
            if(mpBitmapItem->isPattern())
                mpLbFillType->SelectEntryPos(PATTERN);
                mxLbFillType->set_active(PATTERN);
            else
                mpLbFillType->SelectEntryPos(BITMAP);
                mxLbFillType->set_active(BITMAP);
            Update();
        }
        else if(bDisabled)
        {
            mpLbFillAttr->Hide();
            mpLbFillAttr->SetNoSelection();
            mxLbFillAttr->hide();
            mxLbFillAttr->set_active(-1);
        }
        else
        {
            mpLbFillAttr->SetNoSelection();
            mxLbFillAttr->set_active(-1);
        }
    }
    if(mpPanel)
@@ -1043,14 +1040,14 @@ void AreaPropertyPanelBase::NotifyItemUpdate(
                        const OUString aString( mpFillGradientItem->GetName() );
                        const SfxObjectShell* pSh = SfxObjectShell::Current();

                        mpLbFillAttr->Clear();
                        mpLbFillAttr->Enable();
                        mpLbFillAttr->Fill(pSh->GetItem(SID_GRADIENT_LIST)->GetGradientList());
                        mpLbFillAttr->SelectEntry(aString);
                        mxLbFillAttr->clear();
                        mxLbFillAttr->set_sensitive(true);
                        SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_GRADIENT_LIST)->GetGradientList());
                        mxLbFillAttr->set_active_text(aString);
                    }
                    else
                    {
                        mpLbFillAttr->SetNoSelection();
                        mxLbFillAttr->set_active(-1);
                    }
                }
            }
@@ -1067,14 +1064,14 @@ void AreaPropertyPanelBase::NotifyItemUpdate(
                        const OUString aString( mpHatchItem->GetName() );
                        const SfxObjectShell* pSh = SfxObjectShell::Current();

                        mpLbFillAttr->Clear();
                        mpLbFillAttr->Enable();
                        mpLbFillAttr->Fill(pSh->GetItem(SID_HATCH_LIST)->GetHatchList());
                        mpLbFillAttr->SelectEntry(aString);
                        mxLbFillAttr->clear();
                        mxLbFillAttr->set_sensitive(true);
                        SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_HATCH_LIST)->GetHatchList());
                        mxLbFillAttr->set_active_text(aString);
                    }
                    else
                    {
                        mpLbFillAttr->SetNoSelection();
                        mxLbFillAttr->set_active(-1);
                    }
                }
            }
@@ -1091,21 +1088,21 @@ void AreaPropertyPanelBase::NotifyItemUpdate(
                    {
                        const OUString aString( mpBitmapItem->GetName() );
                        const SfxObjectShell* pSh = SfxObjectShell::Current();
                        mpLbFillAttr->Clear();
                        mpLbFillAttr->Show();
                        mxLbFillAttr->clear();
                        mxLbFillAttr->show();
                        if(nSID == SID_BITMAP_LIST)
                        {
                            mpLbFillAttr->Fill(pSh->GetItem(SID_BITMAP_LIST)->GetBitmapList());
                            SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_BITMAP_LIST)->GetBitmapList());
                        }
                        else if(nSID == SID_PATTERN_LIST)
                        {
                            mpLbFillAttr->Fill(pSh->GetItem(SID_PATTERN_LIST)->GetPatternList());
                            SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_PATTERN_LIST)->GetPatternList());
                        }
                        mpLbFillAttr->SelectEntry(aString);
                        mxLbFillAttr->set_active_text(aString);
                    }
                    else
                    {
                        mpLbFillAttr->SetNoSelection();
                        mxLbFillAttr->set_active(-1);
                    }
                }
            }
@@ -1116,147 +1113,147 @@ void AreaPropertyPanelBase::NotifyItemUpdate(

void AreaPropertyPanelBase::Update()
{
        const eFillStyle eXFS = static_cast<eFillStyle>(mpLbFillType->GetSelectedEntryPos());
        const eFillStyle eXFS = static_cast<eFillStyle>(mxLbFillType->get_active());
        SfxObjectShell* pSh = SfxObjectShell::Current();

        switch( eXFS )
        {
            case eFillStyle::NONE:
            {
                mpLbFillAttr->Show();
                mpLbFillGradFrom->Hide();
                mpLbFillGradTo->Hide();
                mpMTRAngle->Hide();
                mpGradientStyle->Hide();
                mpToolBoxColor->Hide();
                mpBmpImport->Hide();
                mxLbFillAttr->show();
                mxLbFillGradFrom->hide();
                mxLbFillGradTo->hide();
                mxMTRAngle->hide();
                mxGradientStyle->hide();
                mxToolBoxColor->hide();
                mxBmpImport->hide();
                break;
            }
            case eFillStyle::SOLID:
            {
                if(mpColorItem)
                {
                    mpLbFillAttr->Hide();
                    mpLbFillGradFrom->Hide();
                    mpLbFillGradTo->Hide();
                    mpMTRAngle->Hide();
                    mpGradientStyle->Hide();
                    mpToolBoxColor->Show();
                    mpBmpImport->Hide();
                    mxLbFillAttr->hide();
                    mxLbFillGradFrom->hide();
                    mxLbFillGradTo->hide();
                    mxMTRAngle->hide();
                    mxGradientStyle->hide();
                    mxToolBoxColor->show();
                    mxBmpImport->hide();
                }
                break;
            }
            case eFillStyle::GRADIENT:
            {
                mpLbFillAttr->Hide();
                mpLbFillGradFrom->Show();
                mpLbFillGradTo->Show();
                mpMTRAngle->Enable();
                mpMTRAngle->Show();
                mpGradientStyle->Show();
                mpToolBoxColor->Hide();
                mpBmpImport->Hide();
                mxLbFillAttr->hide();
                mxLbFillGradFrom->show();
                mxLbFillGradTo->show();
                mxMTRAngle->set_sensitive(true);
                mxMTRAngle->show();
                mxGradientStyle->show();
                mxToolBoxColor->hide();
                mxBmpImport->hide();

                if(pSh && pSh->GetItem(SID_GRADIENT_LIST))
                {
                    mpLbFillAttr->Enable();
                    mpLbFillAttr->Clear();
                    mpLbFillAttr->Fill(pSh->GetItem(SID_GRADIENT_LIST)->GetGradientList());
                    mpLbFillGradTo->SetNoSelection();
                    mpLbFillGradFrom->SetNoSelection();
                    mxLbFillAttr->set_sensitive(true);
                    mxLbFillAttr->clear();
                    SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_GRADIENT_LIST)->GetGradientList());
                    mxLbFillGradTo->SetNoSelection();
                    mxLbFillGradFrom->SetNoSelection();
                    if (mpFillGradientItem)
                    {
                        const OUString aString(mpFillGradientItem->GetName());
                        mpLbFillAttr->SelectEntry(aString);
                        mxLbFillAttr->set_active_text(aString);
                        const XGradient aGradient = mpFillGradientItem->GetGradientValue();
                        mpLbFillGradFrom->SelectEntry(aGradient.GetStartColor());
                        mpLbFillGradTo->SelectEntry(aGradient.GetEndColor());
                        mpGradientStyle->SelectEntryPos(sal::static_int_cast< sal_Int32 >( aGradient.GetGradientStyle() ));
                        if(mpGradientStyle->GetSelectedEntryPos() == sal_Int32(GradientStyle::Radial))
                            mpMTRAngle->Disable();
                        mxLbFillGradFrom->SelectEntry(aGradient.GetStartColor());
                        mxLbFillGradTo->SelectEntry(aGradient.GetEndColor());
                        mxGradientStyle->set_active(sal::static_int_cast< sal_Int32 >( aGradient.GetGradientStyle() ));
                        if(mxGradientStyle->get_active() == sal_Int32(GradientStyle::Radial))
                            mxMTRAngle->set_sensitive(false);
                        else
                            mpMTRAngle->SetValue( aGradient.GetAngle() /10 );
                            mxMTRAngle->set_value(aGradient.GetAngle() / 10, FieldUnit::DEGREE);
                    }
                    else
                    {
                        mpLbFillAttr->SetNoSelection();
                        mxLbFillAttr->set_active(-1);
                    }
                }
                else
                {
                    mpLbFillAttr->SetNoSelection();
                    mxLbFillAttr->set_active(-1);
                }
                break;
            }
            case eFillStyle::HATCH:
            {
                mpLbFillAttr->Show();
                mpLbFillGradFrom->Hide();
                mpLbFillGradTo->Hide();
                mpMTRAngle->Hide();
                mpGradientStyle->Hide();
                mpToolBoxColor->Hide();
                mpBmpImport->Hide();
                mpBmpImport->Hide();
                mxLbFillAttr->show();
                mxLbFillGradFrom->hide();
                mxLbFillGradTo->hide();
                mxMTRAngle->hide();
                mxGradientStyle->hide();
                mxToolBoxColor->hide();
                mxBmpImport->hide();
                mxBmpImport->hide();

                if(pSh && pSh->GetItem(SID_HATCH_LIST))
                {
                    mpLbFillAttr->Enable();
                    mpLbFillAttr->Clear();
                    mpLbFillAttr->Fill(pSh->GetItem(SID_HATCH_LIST)->GetHatchList());
                    mxLbFillAttr->set_sensitive(true);
                    mxLbFillAttr->clear();
                    SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_HATCH_LIST)->GetHatchList());

                    if(mpHatchItem)
                    {
                        const OUString aString(mpHatchItem->GetName());

                        mpLbFillAttr->SelectEntry( aString );
                        mxLbFillAttr->set_active_text( aString );
                    }
                    else
                    {
                        mpLbFillAttr->SetNoSelection();
                        mxLbFillAttr->set_active(-1);
                    }
                }
                else
                {
                    mpLbFillAttr->SetNoSelection();
                    mxLbFillAttr->set_active(-1);
                }
                break;
            }
            case eFillStyle::BITMAP:
            case eFillStyle::PATTERN:
            {
                mpLbFillAttr->Show();
                mpLbFillAttr->Enable();
                mpLbFillAttr->Clear();
                mpToolBoxColor->Hide();
                mpLbFillGradFrom->Hide();
                mpLbFillGradTo->Hide();
                mpMTRAngle->Hide();
                mpGradientStyle->Hide();
                mxLbFillAttr->show();
                mxLbFillAttr->set_sensitive(true);
                mxLbFillAttr->clear();
                mxToolBoxColor->hide();
                mxLbFillGradFrom->hide();
                mxLbFillGradTo->hide();
                mxMTRAngle->hide();
                mxGradientStyle->hide();

                if(mpBitmapItem)
                {
                    if(pSh && pSh->GetItem(SID_BITMAP_LIST) && eXFS == BITMAP)
                    {
                        mpBmpImport->Show();
                        mpLbFillType->SelectEntryPos(sal_uInt32(BITMAP));
                        mpLbFillAttr->Fill(pSh->GetItem(SID_BITMAP_LIST)->GetBitmapList());
                        mxBmpImport->show();
                        mxLbFillType->set_active(sal_uInt32(BITMAP));
                        SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_BITMAP_LIST)->GetBitmapList());

                        const OUString aString(mpBitmapItem->GetName());
                        mpLbFillAttr->SelectEntry(aString);
                        mxLbFillAttr->set_active_text(aString);
                    }
                    else if(pSh && pSh->GetItem(SID_PATTERN_LIST) && eXFS == PATTERN)
                    {
                        mpBmpImport->Hide();
                        mpLbFillType->SelectEntryPos(sal_uInt32(PATTERN));
                        mpLbFillAttr->Fill(pSh->GetItem(SID_PATTERN_LIST)->GetPatternList());
                        mxBmpImport->hide();
                        mxLbFillType->set_active(sal_uInt32(PATTERN));
                        SvxFillAttrBox::Fill(*mxLbFillAttr, pSh->GetItem(SID_PATTERN_LIST)->GetPatternList());

                        const OUString aString(mpBitmapItem->GetName());
                        mpLbFillAttr->SelectEntry(aString);
                        mxLbFillAttr->set_active_text(aString);
                    }
                }
                else
                    mpLbFillAttr->SetNoSelection();
                    mxLbFillAttr->set_active(-1);
                break;
            }
            default:
@@ -1267,80 +1264,69 @@ void AreaPropertyPanelBase::Update()
            mpPanel->TriggerDeckLayouting();
}

IMPL_LINK_NOARG(AreaPropertyPanelBase, ModifyTransSliderHdl, Slider*, void)
IMPL_LINK_NOARG(AreaPropertyPanelBase, ModifyTransSliderHdl, weld::Scale&, void)
{
    const sal_uInt16 nVal = mpSldTransparent->GetThumbPos();
    const sal_uInt16 nVal = mxSldTransparent->get_value();
    SetTransparency(nVal);
    const XFillTransparenceItem aLinearItem(nVal);
    setFillTransparence(aLinearItem);
}

IMPL_LINK( AreaPropertyPanelBase, ClickTrGrHdl_Impl, ToolBox*, pToolBox, void )
IMPL_LINK_NOARG(AreaPropertyPanelBase, ChangeTrgrTypeHdl_Impl, weld::ComboBox&, void)
{
    if (!mxTrGrPopup)
        mxTrGrPopup = VclPtr<AreaTransparencyGradientPopup>::Create(*this);
    if (mpFloatTransparenceItem)
        mxTrGrPopup->Rearrange(mpFloatTransparenceItem.get());
    OSL_ASSERT( pToolBox->GetItemCommand(pToolBox->GetCurItemId()) == UNO_SIDEBARGRADIENT);
    mxTrGrPopup->StartPopupMode(pToolBox, FloatWinPopupFlags::GrabFocus);
}

IMPL_LINK_NOARG(AreaPropertyPanelBase, ChangeTrgrTypeHdl_Impl, ListBox&, void)
{
    sal_Int32 nSelectType = mpLBTransType->GetSelectedEntryPos();
    sal_Int32 nSelectType = mxLBTransType->get_active();
    bool bGradient = false;
    sal_uInt16 nTrans = 0;

    if(!nSelectType)
    {
        mpBTNGradient->Hide();
        mpMTRTransparent->Show();
        mpSldTransparent->Show();
        mpMTRTransparent->Enable();
        mpSldTransparent->Enable();
        mxBTNGradient->hide();
        mxMTRTransparent->show();
        mxSldTransparent->show();
        mxMTRTransparent->set_sensitive(true);
        mxSldTransparent->set_sensitive(true);
        SetTransparency(0);
    }
    else if(1 == nSelectType)
    {
        mpBTNGradient->Hide();
        mpMTRTransparent->Show();
        mpSldTransparent->Show();
        mxBTNGradient->hide();
        mxMTRTransparent->show();
        mxSldTransparent->show();
        nTrans = mnLastTransSolid;
        mpMTRTransparent->SetValue(nTrans);
        mpLBTransType->SelectEntryPos(1);
        mpMTRTransparent->Enable();
        mpSldTransparent->Enable();
        mxMTRTransparent->set_value(nTrans, FieldUnit::PERCENT);
        mxLBTransType->set_active(1);
        mxMTRTransparent->set_sensitive(true);
        mxSldTransparent->set_sensitive(true);
    }
    else
    {
        mpBTNGradient->Show();
        mxBTNGradient->show();

        const sal_uInt16 nIdGradient = mpBTNGradient->GetItemId(UNO_SIDEBARGRADIENT);
        switch (nSelectType)
        {
            case 2:
                mpBTNGradient->SetItemImage(nIdGradient, maImgLinear);
                mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgLinear);
                break;
            case 3:
                mpBTNGradient->SetItemImage(nIdGradient, maImgAxial);
                mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgAxial);
                break;
            case 4:
                mpBTNGradient->SetItemImage(nIdGradient, maImgRadial);
                mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgRadial);
                break;
            case 5:
                mpBTNGradient->SetItemImage(nIdGradient, maImgElli );
                mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgElli);
                break;
            case 6:
                mpBTNGradient->SetItemImage(nIdGradient, maImgQuad );
                mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgQuad);
                break;
            case 7:
                mpBTNGradient->SetItemImage(nIdGradient, maImgSquare);
                mxBTNGradient->set_item_icon_name(SIDEBARGRADIENT, maImgSquare);
                break;
        }

        mpMTRTransparent->Hide();
        mpSldTransparent->Hide();
        mpBTNGradient->Enable();
        mxMTRTransparent->hide();
        mxSldTransparent->hide();
        mxBTNGradient->set_sensitive(true);
        bGradient = true;
    }

@@ -1382,16 +1368,16 @@ IMPL_LINK_NOARG(AreaPropertyPanelBase, ChangeTrgrTypeHdl_Impl, ListBox&, void)
    setFillFloatTransparence(aGradientItem);
}

IMPL_LINK_NOARG(AreaPropertyPanelBase, ModifyTransparentHdl_Impl, Edit&, void)
IMPL_LINK_NOARG(AreaPropertyPanelBase, ModifyTransparentHdl_Impl, weld::MetricSpinButton&, void)
{
    const sal_uInt16 nTrans = static_cast<sal_uInt16>(mpMTRTransparent->GetValue());
    const sal_uInt16 nTrans = static_cast<sal_uInt16>(mxMTRTransparent->get_value(FieldUnit::PERCENT));
    mnLastTransSolid = nTrans;
    SetTransparency(nTrans);
    const sal_Int32 nSelectType = mpLBTransType->GetSelectedEntryPos();
    const sal_Int32 nSelectType = mxLBTransType->get_active();

    if(nTrans && !nSelectType)
    {
        mpLBTransType->SelectEntryPos(1);
        mxLBTransType->set_active(1);
    }

    const XFillTransparenceItem aLinearItem(nTrans);
@@ -1447,7 +1433,7 @@ void AreaPropertyPanelBase::SetGradient (const XGradient& rGradient)

sal_Int32 AreaPropertyPanelBase::GetSelectedTransparencyTypeIndex() const
{
    return mpLBTransType->GetSelectedEntryPos();
    return mxLBTransType->get_active();
}

} } // end of namespace svx::sidebar
diff --git a/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx
index e3c0ae3..7bb8128 100644
--- a/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx
+++ b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx
@@ -18,7 +18,6 @@
 */

#include <sfx2/app.hxx>
#include <vcl/layout.hxx>
#include <svx/sidebar/AreaTransparencyGradientPopup.hxx>
#include <svx/sidebar/AreaPropertyPanelBase.hxx>
#include <svx/xflftrit.hxx>
@@ -26,35 +25,34 @@

namespace svx { namespace sidebar {

AreaTransparencyGradientPopup::AreaTransparencyGradientPopup(AreaPropertyPanelBase& rPanel)
    : FloatingWindow(SfxGetpApp()->GetTopWindow(), "FloatingAreaStyle", "svx/ui/floatingareastyle.ui")
    , mrAreaPropertyPanel(rPanel)
AreaTransparencyGradientPopup::AreaTransparencyGradientPopup(AreaPropertyPanelBase& rPanel, weld::Widget* pParent)
    : mrAreaPropertyPanel(rPanel)
    , mxBuilder(Application::CreateBuilder(pParent, "svx/ui/floatingareastyle.ui"))
    , mxTopLevel(mxBuilder->weld_widget("FloatingAreaStyle"))
    , mxCenterGrid(mxBuilder->weld_widget("centergrid"))
    , mxAngleGrid(mxBuilder->weld_widget("anglegrid"))
    , mxMtrTrgrCenterX(mxBuilder->weld_metric_spin_button("centerx", FieldUnit::PERCENT))
    , mxMtrTrgrCenterY(mxBuilder->weld_metric_spin_button("centery", FieldUnit::PERCENT))
    , mxMtrTrgrAngle(mxBuilder->weld_metric_spin_button("angle", FieldUnit::DEGREE))
    , mxBtnLeft45(mxBuilder->weld_toolbar("lefttoolbox"))
    , mxBtnRight45(mxBuilder->weld_toolbar("righttoolbox"))
    , mxMtrTrgrStartValue(mxBuilder->weld_metric_spin_button("start", FieldUnit::PERCENT))
    , mxMtrTrgrEndValue(mxBuilder->weld_metric_spin_button("end", FieldUnit::PERCENT))
    , mxMtrTrgrBorder(mxBuilder->weld_metric_spin_button("border", FieldUnit::PERCENT))
{
    get(maCenterGrid, "centergrid");
    get(maAngleGrid, "anglegrid");
    get(maMtrTrgrCenterX, "centerx");
    get(maMtrTrgrCenterY, "centery");
    get(maMtrTrgrAngle, "angle");
    get(maBtnLeft45, "lefttoolbox");
    get(maBtnRight45, "righttoolbox");
    get(maMtrTrgrStartValue, "start");
    get(maMtrTrgrEndValue, "end");
    get(maMtrTrgrBorder, "border");

    Link<Edit&,void> aLink = LINK(this, AreaTransparencyGradientPopup, ModifiedTrgrHdl_Impl);
    maMtrTrgrCenterX->SetModifyHdl(aLink);
    maMtrTrgrCenterY->SetModifyHdl(aLink);
    maMtrTrgrAngle->SetModifyHdl(aLink);
    maMtrTrgrBorder->SetModifyHdl(aLink);
    maMtrTrgrStartValue->SetModifyHdl(aLink);
    maMtrTrgrEndValue->SetModifyHdl(aLink);
    maBtnLeft45->SetSelectHdl(LINK(this, AreaTransparencyGradientPopup, Left_Click45_Impl));
    maBtnRight45->SetSelectHdl(LINK(this, AreaTransparencyGradientPopup, Right_Click45_Impl));
    Link<weld::MetricSpinButton&,void> aLink = LINK(this, AreaTransparencyGradientPopup, ModifiedTrgrHdl_Impl);
    mxMtrTrgrCenterX->connect_value_changed(aLink);
    mxMtrTrgrCenterY->connect_value_changed(aLink);
    mxMtrTrgrAngle->connect_value_changed(aLink);
    mxMtrTrgrBorder->connect_value_changed(aLink);
    mxMtrTrgrStartValue->connect_value_changed(aLink);
    mxMtrTrgrEndValue->connect_value_changed(aLink);
    mxBtnLeft45->connect_clicked(LINK(this, AreaTransparencyGradientPopup, Left_Click45_Impl));
    mxBtnRight45->connect_clicked(LINK(this, AreaTransparencyGradientPopup, Right_Click45_Impl));
}

AreaTransparencyGradientPopup::~AreaTransparencyGradientPopup()
{
    disposeOnce();
}

void AreaTransparencyGradientPopup::InitStatus(XFillFloatTransparenceItem const * pGradientItem)
@@ -78,12 +76,12 @@ void AreaTransparencyGradientPopup::InitStatus(XFillFloatTransparenceItem const 
    {
        aGradient = rGradient;
    }
    maMtrTrgrCenterX->SetValue(aGradient.GetXOffset());
    maMtrTrgrCenterY->SetValue(aGradient.GetYOffset());
    maMtrTrgrAngle->SetValue(aGradient.GetAngle() / 10);
    maMtrTrgrStartValue->SetValue(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(aGradient.GetStartColor().GetRed()) + 1) * 100) / 255));
    maMtrTrgrEndValue->SetValue(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(aGradient.GetEndColor().GetRed()) + 1) * 100) / 255));
    maMtrTrgrBorder->SetValue(aGradient.GetBorder());
    mxMtrTrgrCenterX->set_value(aGradient.GetXOffset(), FieldUnit::PERCENT);
    mxMtrTrgrCenterY->set_value(aGradient.GetYOffset(), FieldUnit::PERCENT);
    mxMtrTrgrAngle->set_value(aGradient.GetAngle() / 10, FieldUnit::DEGREE);
    mxMtrTrgrStartValue->set_value(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(aGradient.GetStartColor().GetRed()) + 1) * 100) / 255), FieldUnit::PERCENT);
    mxMtrTrgrEndValue->set_value(static_cast<sal_uInt16>(((static_cast<sal_uInt16>(aGradient.GetEndColor().GetRed()) + 1) * 100) / 255), FieldUnit::PERCENT);
    mxMtrTrgrBorder->set_value(aGradient.GetBorder(), FieldUnit::PERCENT);
}

void AreaTransparencyGradientPopup::Rearrange(XFillFloatTransparenceItem const * pGradientItem)
@@ -96,18 +94,18 @@ void AreaTransparencyGradientPopup::Rearrange(XFillFloatTransparenceItem const *
    {
        case css::awt::GradientStyle_LINEAR:
        case css::awt::GradientStyle_AXIAL:
            maCenterGrid->Hide();
            maAngleGrid->Show();
            mxCenterGrid->hide();
            mxAngleGrid->show();
            break;
        case css::awt::GradientStyle_RADIAL:
            maCenterGrid->Show();
            maAngleGrid->Hide();
            mxCenterGrid->show();
            mxAngleGrid->hide();
            break;
        case css::awt::GradientStyle_ELLIPTICAL:
        case css::awt::GradientStyle_SQUARE:
        case css::awt::GradientStyle_RECT:
            maCenterGrid->Show();
            maAngleGrid->Show();
            mxCenterGrid->show();
            mxAngleGrid->show();
            break;
        default:
            break;
@@ -117,21 +115,21 @@ void AreaTransparencyGradientPopup::Rearrange(XFillFloatTransparenceItem const *
void AreaTransparencyGradientPopup::ExecuteValueModify(sal_uInt8 nStartCol, sal_uInt8 nEndCol)
{
    //Added
    sal_Int16 aMtrValue = static_cast<sal_Int16>(maMtrTrgrAngle->GetValue());
    sal_Int16 aMtrValue = static_cast<sal_Int16>(mxMtrTrgrAngle->get_value(FieldUnit::DEGREE));
    while(aMtrValue<0)
        aMtrValue += 360;
    sal_uInt16 nVal = aMtrValue/360;
    nVal = aMtrValue - nVal*360;
    maMtrTrgrAngle->SetValue(nVal);
    mxMtrTrgrAngle->set_value(nVal, FieldUnit::DEGREE);
    //End of new code
    XGradient aTmpGradient(
        Color(nStartCol, nStartCol, nStartCol),
        Color(nEndCol, nEndCol, nEndCol),
        static_cast<css::awt::GradientStyle>(mrAreaPropertyPanel.GetSelectedTransparencyTypeIndex()-2),
        static_cast<sal_uInt16>(maMtrTrgrAngle->GetValue()) * 10,
        static_cast<sal_uInt16>(maMtrTrgrCenterX->GetValue()),
        static_cast<sal_uInt16>(maMtrTrgrCenterY->GetValue()),
        static_cast<sal_uInt16>(maMtrTrgrBorder->GetValue()),
        static_cast<sal_uInt16>(mxMtrTrgrAngle->get_value(FieldUnit::DEGREE)) * 10,
        static_cast<sal_uInt16>(mxMtrTrgrCenterX->get_value(FieldUnit::PERCENT)),
        static_cast<sal_uInt16>(mxMtrTrgrCenterY->get_value(FieldUnit::PERCENT)),
        static_cast<sal_uInt16>(mxMtrTrgrBorder->get_value(FieldUnit::PERCENT)),
        100, 100);

    mrAreaPropertyPanel.SetGradient(aTmpGradient);
@@ -141,52 +139,37 @@ void AreaTransparencyGradientPopup::ExecuteValueModify(sal_uInt8 nStartCol, sal_
    mrAreaPropertyPanel.setFillFloatTransparence(aGradientItem);
}

IMPL_LINK_NOARG(AreaTransparencyGradientPopup, ModifiedTrgrHdl_Impl, Edit&, void)
IMPL_LINK_NOARG(AreaTransparencyGradientPopup, ModifiedTrgrHdl_Impl, weld::MetricSpinButton&, void)
{
    sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrStartValue->GetValue()) * 255) / 100);
    sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrEndValue->GetValue()) * 255) / 100);
    sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrStartValue->get_value(FieldUnit::PERCENT)) * 255) / 100);
    sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrEndValue->get_value(FieldUnit::PERCENT)) * 255) / 100);
    ExecuteValueModify( nStartCol, nEndCol );
}

IMPL_LINK_NOARG(AreaTransparencyGradientPopup, Left_Click45_Impl, ToolBox *, void)
IMPL_LINK_NOARG(AreaTransparencyGradientPopup, Left_Click45_Impl, const OString&, void)
{
    sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrStartValue->GetValue()) * 255) / 100);
    sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrEndValue->GetValue()) * 255) / 100);
    sal_uInt16 nTemp = static_cast<sal_uInt16>(maMtrTrgrAngle->GetValue());
    sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrStartValue->get_value(FieldUnit::PERCENT)) * 255) / 100);
    sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrEndValue->get_value(FieldUnit::PERCENT)) * 255) / 100);
    sal_uInt16 nTemp = static_cast<sal_uInt16>(mxMtrTrgrAngle->get_value(FieldUnit::DEGREE));
    if (nTemp>=315)
        nTemp -= 360;
    nTemp += 45;
    maMtrTrgrAngle->SetValue(nTemp);
    mxMtrTrgrAngle->set_value(nTemp, FieldUnit::DEGREE);
    ExecuteValueModify(nStartCol, nEndCol);
}

IMPL_LINK_NOARG(AreaTransparencyGradientPopup, Right_Click45_Impl, ToolBox *, void)
IMPL_LINK_NOARG(AreaTransparencyGradientPopup, Right_Click45_Impl, const OString&, void)
{
    sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrStartValue->GetValue()) * 255) / 100);
    sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(maMtrTrgrEndValue->GetValue()) * 255) / 100);
    sal_uInt16 nTemp = static_cast<sal_uInt16>(maMtrTrgrAngle->GetValue());
    sal_uInt8 nStartCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrStartValue->get_value(FieldUnit::PERCENT)) * 255) / 100);
    sal_uInt8 nEndCol = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxMtrTrgrEndValue->get_value(FieldUnit::PERCENT)) * 255) / 100);
    sal_uInt16 nTemp = static_cast<sal_uInt16>(mxMtrTrgrAngle->get_value(FieldUnit::DEGREE));
    if (nTemp<45)
        nTemp += 360;
    nTemp -= 45;
    maMtrTrgrAngle->SetValue(nTemp);
    mxMtrTrgrAngle->set_value(nTemp, FieldUnit::DEGREE);
    ExecuteValueModify(nStartCol, nEndCol);
}

void AreaTransparencyGradientPopup::dispose()
{
    maCenterGrid.clear();
    maAngleGrid.clear();
    maMtrTrgrCenterX.clear();
    maMtrTrgrCenterY.clear();
    maMtrTrgrAngle.clear();
    maBtnLeft45.clear();
    maBtnRight45.clear();
    maMtrTrgrStartValue.clear();
    maMtrTrgrEndValue.clear();
    maMtrTrgrBorder.clear();
    FloatingWindow::dispose();
}

} } // end of namespace svx::sidebar

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx
index 0dba161..f8bfd20 100644
--- a/svx/source/tbxctrls/PaletteManager.cxx
+++ b/svx/source/tbxctrls/PaletteManager.cxx
@@ -341,7 +341,7 @@ void PaletteManager::AddRecentColor(const Color& rRecentColor, const OUString& r
    batch->commit();
}

void PaletteManager::SetBtnUpdater(svx::ToolboxButtonColorUpdater* pBtnUpdater)
void PaletteManager::SetBtnUpdater(svx::ToolboxButtonColorUpdaterBase* pBtnUpdater)
{
    mpBtnUpdater = pBtnUpdater;
}
diff --git a/svx/source/tbxctrls/itemwin.cxx b/svx/source/tbxctrls/itemwin.cxx
index f879c0a..c6b07d3 100644
--- a/svx/source/tbxctrls/itemwin.cxx
+++ b/svx/source/tbxctrls/itemwin.cxx
@@ -732,6 +732,33 @@ void SvxFillAttrBox::Fill(weld::ComboBox& rBox, const XHatchListRef &pList)
    rBox.thaw();
}

void SvxFillAttrBox::Fill(weld::ComboBox& rBox, const XGradientListRef &pList)
{
    if( !pList.is() )
        return;

    long nCount = pList->Count();
    ScopedVclPtrInstance< VirtualDevice > pVD;
    rBox.freeze();

    for( long i = 0; i < nCount; i++ )
    {
        const XGradientEntry* pEntry = pList->GetGradient(i);
        const BitmapEx aBitmapEx = pList->GetUiBitmap( i );
        if( !aBitmapEx.IsEmpty() )
        {
            const Size aBmpSize(aBitmapEx.GetSizePixel());
            pVD->SetOutputSizePixel(aBmpSize, false);
            pVD->DrawBitmapEx(Point(), aBitmapEx);
            rBox.append("", pEntry->GetName(), *pVD);
        }
        else
            rBox.append_text(pEntry->GetName());
    }

    rBox.thaw();
}

void SvxFillAttrBox::Fill(weld::ComboBox& rBox, const XBitmapListRef &pList)
{
    if( !pList.is() )
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index b4c7ca5..10ad677 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -32,7 +32,6 @@
#include <vcl/bitmapaccess.hxx>
#include <vcl/menubtn.hxx>
#include <vcl/vclptr.hxx>
#include <vcl/weldutils.hxx>
#include <svtools/valueset.hxx>
#include <svtools/ctrlbox.hxx>
#include <svl/style.hxx>
@@ -1775,7 +1774,8 @@ SvxColorWindow::SvxColorWindow(const OUString&            rCommand,
    }
}

ColorWindow::ColorWindow(std::shared_ptr<PaletteManager> const & rPaletteManager,
ColorWindow::ColorWindow(const OUString& rCommand,
                         std::shared_ptr<PaletteManager> const & rPaletteManager,
                         ColorStatus&               rColorStatus,
                         sal_uInt16                 nSlotId,
                         const Reference< XFrame >& rFrame,
@@ -1785,6 +1785,7 @@ ColorWindow::ColorWindow(std::shared_ptr<PaletteManager> const & rPaletteManager
    : ToolbarPopupBase(rFrame)
    , m_xBuilder(Application::CreateBuilder(rMenuButton.get_widget(), "svx/ui/colorwindow.ui"))
    , theSlotId(nSlotId)
    , maCommand(rCommand)
    , mpParentWindow(pParentWindow)
    , maMenuButton(rMenuButton)
    , mxPaletteManager(rPaletteManager)
@@ -1877,6 +1878,12 @@ ColorWindow::ColorWindow(std::shared_ptr<PaletteManager> const & rPaletteManager
    mxRecentColorSet->set_size_request(aSize.Width(), aSize.Height());

    AddStatusListener( ".uno:ColorTableState" );
    AddStatusListener( maCommand );
    if ( maCommand == ".uno:FrameLineColor" )
    {
        AddStatusListener( ".uno:BorderTLBR" );
        AddStatusListener( ".uno:BorderBLTR" );
    }
}

IMPL_LINK_NOARG(ColorWindow, FocusHdl, weld::Widget&, void)
@@ -2036,7 +2043,9 @@ IMPL_LINK(ColorWindow, SelectHdl, SvtValueSet*, pColorSet, void)
    if (maMenuButton.get_active())
        maMenuButton.set_active(false);

    maColorSelectFunction(OUString(), aNamedColor);
    maSelectedLink.Call(aNamedColor);

    maColorSelectFunction(maCommand, aNamedColor);
}

IMPL_LINK_NOARG(SvxColorWindow, SelectPaletteHdl, ListBox&, void)
@@ -2092,7 +2101,9 @@ IMPL_LINK(ColorWindow, AutoColorClickHdl, weld::Button&, rButton, void)
    if (maMenuButton.get_active())
        maMenuButton.set_active(false);

    maColorSelectFunction(OUString(), aNamedColor);
    maSelectedLink.Call(aNamedColor);

    maColorSelectFunction(maCommand, aNamedColor);
}

IMPL_LINK_NOARG(SvxColorWindow, OpenPickerClickHdl, Button*, void)
@@ -2119,7 +2130,7 @@ IMPL_LINK_NOARG(ColorWindow, OpenPickerClickHdl, weld::Button&, void)
{
    if (maMenuButton.get_active())
        maMenuButton.set_active(false);
    mxPaletteManager->PopupColorPicker(mpParentWindow, OUString(), GetSelectEntryColor().first);
    mxPaletteManager->PopupColorPicker(mpParentWindow, maCommand, GetSelectEntryColor().first);
}

void SvxColorWindow::StartSelection()
@@ -3456,25 +3467,54 @@ void SvxColorToolBoxControl::initialize( const css::uno::Sequence<css::uno::Any>
{
    PopupWindowController::initialize( rArguments );

    ToolBox* pToolBox = nullptr;
    sal_uInt16 nId = 0;
    if ( !getToolboxId( nId, &pToolBox ) )
    {
        SAL_WARN("svx.tbxcrtls", "ToolBox not found!");
        return;
    }

    m_nSlotId = MapCommandToSlotId( m_aCommandURL );

    if ( m_nSlotId == SID_ATTR_LINE_COLOR || m_nSlotId == SID_ATTR_FILL_COLOR ||
         m_nSlotId == SID_FRAME_LINECOLOR || m_nSlotId == SID_BACKGROUND_COLOR )
    {
        // Sidebar uses wide buttons for those.
        m_bSplitButton = typeid( *pToolBox ) != typeid( sfx2::sidebar::SidebarToolBox );
        m_bSplitButton = !m_bSidebar;
    }

    auto aProperties = vcl::CommandInfoProvider::GetCommandProperties(getCommandURL(), getModuleName());
    OUString aCommandLabel = vcl::CommandInfoProvider::GetLabelForCommand(aProperties);

    m_xBtnUpdater.reset( new svx::ToolboxButtonColorUpdater( m_nSlotId, nId, pToolBox, !m_bSplitButton,  aCommandLabel ) );
    pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ( m_bSplitButton ? ToolBoxItemBits::DROPDOWN : ToolBoxItemBits::DROPDOWNONLY ) );
    if (m_pToolbar)
    {
        EnsurePaletteManager();

        const css::uno::Reference<css::awt::XWindow> xParent = m_xFrame->getContainerWindow();
        weld::Window* pParentFrame = Application::GetFrameWeld(xParent);

        const OString aId(m_aCommandURL.toUtf8());

        auto xPopover = std::make_unique<ColorWindow>(
                            m_aCommandURL,
                            m_xPaletteManager,
                            m_aColorStatus,
                            m_nSlotId,
                            m_xFrame,
                            pParentFrame,
                            MenuOrToolMenuButton(m_pToolbar, aId),
                            m_aColorSelectFunction);

        if ( m_bSplitButton )
            xPopover->SetSelectedHdl( LINK( this, SvxColorToolBoxControl, SelectedHdl ) );

        m_pToolbar->set_item_popover(aId, xPopover->getTopLevel());
        mxPopover = std::move(xPopover);

        m_xBtnUpdater.reset(new svx::ToolboxButtonColorUpdater(m_nSlotId, aId, m_pToolbar, !m_bSplitButton, aCommandLabel, m_xFrame));
        return;
    }

    ToolBox* pToolBox = nullptr;
    sal_uInt16 nId = 0;
    if (getToolboxId(nId, &pToolBox))
    {
        m_xBtnUpdater.reset( new svx::VclToolboxButtonColorUpdater( m_nSlotId, nId, pToolBox, !m_bSplitButton,  aCommandLabel, m_aCommandURL, m_xFrame ) );
        pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ( m_bSplitButton ? ToolBoxItemBits::DROPDOWN : ToolBoxItemBits::DROPDOWNONLY ) );
    }
}

void SvxColorToolBoxControl::update()
@@ -3552,11 +3592,15 @@ void SvxColorToolBoxControl::statusChanged( const css::frame::FeatureStateEvent&
{
    ToolBox* pToolBox = nullptr;
    sal_uInt16 nId = 0;
    if ( !getToolboxId( nId, &pToolBox ) )
        return;
    getToolboxId(nId, &pToolBox);

    if ( rEvent.FeatureURL.Complete == m_aCommandURL )
        pToolBox->EnableItem( nId, rEvent.IsEnabled );
    {
        if (m_pToolbar)
            m_pToolbar->set_item_sensitive(m_aCommandURL.toUtf8(), rEvent.IsEnabled);
        else
            pToolBox->EnableItem( nId, rEvent.IsEnabled );
    }

    bool bValue;
    if ( !m_bSplitButton )
@@ -3565,15 +3609,29 @@ void SvxColorToolBoxControl::statusChanged( const css::frame::FeatureStateEvent&
        m_xBtnUpdater->Update( m_aColorStatus.GetColor() );
    }
    else if ( rEvent.State >>= bValue )
        pToolBox->CheckItem( nId, bValue );
    {
        if (m_pToolbar)
            m_pToolbar->set_item_active(m_aCommandURL.toUtf8(), bValue);
        else if (pToolBox)
            pToolBox->CheckItem( nId, bValue );
    }
}

void SvxColorToolBoxControl::execute(sal_Int16 /*nSelectModifier*/)
{
    if ( !m_bSplitButton )
    {
        // Open the popup also when Enter key is pressed.
        createPopupWindow();
        if (m_pToolbar)
        {
            // Toggle the popup also when toolbutton is activated
            const OString aId(m_aCommandURL.toUtf8());
            m_pToolbar->set_menu_item_active(aId, !m_pToolbar->get_menu_item_active(aId));
        }
        else
        {
            // Open the popup also when Enter key is pressed.
            createPopupWindow();
        }
        return;
    }

@@ -3611,17 +3669,7 @@ sal_Bool SvxColorToolBoxControl::opensSubToolbar()

void SvxColorToolBoxControl::updateImage()
{
    ToolBox* pToolBox = nullptr;
    sal_uInt16 nId = 0;
    if ( !getToolboxId( nId, &pToolBox ) )
        return;

    Image aImage = vcl::CommandInfoProvider::GetImageForCommand(m_aCommandURL, m_xFrame, pToolBox->GetImageSize());
    if ( !!aImage )
    {
        pToolBox->SetItemImage( nId, aImage );
        m_xBtnUpdater->Update(m_xBtnUpdater->GetCurrentColor(), true);
    }
    m_xBtnUpdater->Update(m_xBtnUpdater->GetCurrentColor(), true);
}

OUString SvxColorToolBoxControl::getSubToolbarName()
@@ -3741,8 +3789,7 @@ void SvxSimpleUndoRedoController::StateChanged( sal_uInt16, SfxItemState eState,
SvxCurrencyToolBoxControl::SvxCurrencyToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext ) :
    PopupWindowController( rContext, nullptr, OUString() ),
    m_eLanguage( Application::GetSettings().GetLanguageTag().getLanguageType() ),
    m_nFormatKey( NUMBERFORMAT_ENTRY_NOT_FOUND ),
    m_pToolbar(nullptr)
    m_nFormatKey( NUMBERFORMAT_ENTRY_NOT_FOUND )
{
}

@@ -3877,28 +3924,15 @@ namespace
    }
}

void SvxCurrencyToolBoxControl::EndPopupMode()
{
    m_pToolbar->set_menu_item_active(m_aCommandURL.toUtf8(), false);
}

void SvxCurrencyToolBoxControl::dispose()
{
    m_xPopover.reset();
    svt::PopupWindowController::dispose();
}

void SvxCurrencyToolBoxControl::initialize( const css::uno::Sequence< css::uno::Any >& rArguments )
{
    PopupWindowController::initialize(rArguments);

    if (weld::TransportAsXWindow* pTunnel = dynamic_cast<weld::TransportAsXWindow*>(getParent().get()))
    if (m_pToolbar)
    {
        m_pToolbar = dynamic_cast<weld::Toolbar*>(pTunnel->getWidget());
        assert(m_pToolbar && "must be a toolbar");
        auto xPopover = std::make_unique<CurrencyList_Impl>(this, m_pToolbar, m_aFormatString, m_eLanguage);
        m_pToolbar->set_item_popover(m_aCommandURL.toUtf8(), xPopover->getTopLevel());
        m_xPopover = std::move(xPopover);
        mxPopover = std::move(xPopover);
        return;
    }

@@ -4310,6 +4344,7 @@ void ColorListBox::createColorWindow()
    EnsurePaletteManager();

    m_xColorWindow.reset(new ColorWindow(
                            OUString() /*m_aCommandURL*/,
                            m_xPaletteManager,
                            m_aColorStatus,
                            m_nSlotId,
@@ -4319,7 +4354,7 @@ void ColorListBox::createColorWindow()
                            m_aColorWrapper));

    SetNoSelection();
    m_xButton->set_popover(m_xColorWindow->GetWidget());
    m_xButton->set_popover(m_xColorWindow->getTopLevel());
    if (m_bShowNoneButton)
        m_xColorWindow->ShowNoneButton();
    m_xColorWindow->SelectEntry(m_aSelectedColor);
diff --git a/svx/source/tbxctrls/tbxcolorupdate.cxx b/svx/source/tbxctrls/tbxcolorupdate.cxx
index 547ae1c..2895f25 100644
--- a/svx/source/tbxctrls/tbxcolorupdate.cxx
+++ b/svx/source/tbxctrls/tbxcolorupdate.cxx
@@ -21,9 +21,11 @@
#include <svx/svxids.hrc>
#include <svx/xdef.hxx>

#include <vcl/commandinfoprovider.hxx>
#include <vcl/svapp.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/virdev.hxx>
#include <vcl/weld.hxx>
#include <vcl/settings.hxx>
#include <tools/debug.hxx>

@@ -32,16 +34,20 @@

namespace svx
{
    ToolboxButtonColorUpdater::ToolboxButtonColorUpdater(
            sal_uInt16 nSlotId, sal_uInt16 nTbxBtnId, ToolBox* pToolBox, bool bWideButton, const OUString& rCommandLabel)
    ToolboxButtonColorUpdaterBase::ToolboxButtonColorUpdaterBase(bool bWideButton, const OUString& rCommandLabel,
                                                                 const OUString& rCommandURL,
                                                                 const css::uno::Reference<css::frame::XFrame>& rFrame)
        : mbWideButton(bWideButton)
        , mnBtnId(nTbxBtnId)
        , mpTbx(pToolBox)
        , mbWasHiContrastMode(Application::GetSettings().GetStyleSettings().GetHighContrastMode())
        , maCurColor(COL_TRANSPARENT)
        , maCommandLabel(rCommandLabel)
        , maCommandURL(rCommandURL)
        , mxFrame(rFrame)
    {
        DBG_ASSERT(pToolBox, "ToolBox not found :-(");
        mbWasHiContrastMode = pToolBox && pToolBox->GetSettings().GetStyleSettings().GetHighContrastMode();
    }

    void ToolboxButtonColorUpdaterBase::Init(sal_uInt16 nSlotId)
    {
        switch (nSlotId)
        {
            case SID_ATTR_CHAR_COLOR:
@@ -68,10 +74,57 @@ namespace svx
        }
    }

    ToolboxButtonColorUpdater::~ToolboxButtonColorUpdater()
    VclToolboxButtonColorUpdater::VclToolboxButtonColorUpdater(
            sal_uInt16 nSlotId, sal_uInt16 nTbxBtnId, ToolBox* pToolBox, bool bWideButton,
            const OUString& rCommandLabel, const OUString& rCommandURL,
            const css::uno::Reference<css::frame::XFrame>& rFrame)
        : ToolboxButtonColorUpdaterBase(bWideButton, rCommandLabel, rCommandURL, rFrame)
        , mnBtnId(nTbxBtnId)
        , mpTbx(pToolBox)
    {
        Init(nSlotId);
    }

    void VclToolboxButtonColorUpdater::SetQuickHelpText(const OUString& rText)
    {
        mpTbx->SetQuickHelpText(mnBtnId, rText);
    }

    OUString VclToolboxButtonColorUpdater::GetQuickHelpText() const
    {
        return mpTbx->GetQuickHelpText(mnBtnId);
    }

    void VclToolboxButtonColorUpdater::SetImage(VirtualDevice* pVirDev)
    {
        mpTbx->SetItemImage(mnBtnId, Image(pVirDev->GetBitmapEx(Point(0,0), maBmpSize)));
    }

    VclPtr<VirtualDevice> VclToolboxButtonColorUpdater::CreateVirtualDevice() const
    {
        auto xRet = VclPtr<VirtualDevice>::Create(*mpTbx,
            DeviceFormat::DEFAULT, DeviceFormat::DEFAULT);
        xRet->SetBackground(mpTbx->GetControlBackground());
        return xRet;
    }

    vcl::ImageType VclToolboxButtonColorUpdater::GetImageSize() const
    {
        return mpTbx->GetImageSize();
    }

    Size VclToolboxButtonColorUpdater::GetItemSize() const
    {
        if (mbWideButton)
            return mpTbx->GetItemContentSize(mnBtnId);
        Image aImage(mpTbx->GetItemImage(mnBtnId));
        return aImage.GetSizePixel();
    }

    ToolboxButtonColorUpdaterBase::~ToolboxButtonColorUpdaterBase()
    {}

    void ToolboxButtonColorUpdater::Update(const NamedColor &rNamedColor)
    void ToolboxButtonColorUpdaterBase::Update(const NamedColor &rNamedColor)
    {
        Update(rNamedColor.first);
        if (!mbWideButton)
@@ -80,14 +133,14 @@ namespace svx
            OUString colorSuffix = OUString(" (%1)").replaceFirst("%1", rNamedColor.second);
            OUString colorHelpText = maCommandLabel + colorSuffix;

            mpTbx->SetQuickHelpText(mnBtnId, colorHelpText);
            SetQuickHelpText(colorHelpText);
        }
    }

    void ToolboxButtonColorUpdater::Update(const Color& rColor, bool bForceUpdate)
    void ToolboxButtonColorUpdaterBase::Update(const Color& rColor, bool bForceUpdate)
    {
        Image aImage(mpTbx->GetItemImage(mnBtnId));
        Size aItemSize(mbWideButton ? mpTbx->GetItemContentSize(mnBtnId) : aImage.GetSizePixel());
        Size aItemSize(GetItemSize());

#ifdef IOS // tdf#126966
        // Oddly enough, it is in the "not wide button" case that we want the larger ones, hmm.
        if (!mbWideButton)
@@ -102,7 +155,7 @@ namespace svx
        }
#endif
        const bool bSizeChanged = (maBmpSize != aItemSize);
        const bool bDisplayModeChanged = (mbWasHiContrastMode != mpTbx->GetSettings().GetStyleSettings().GetHighContrastMode());
        const bool bDisplayModeChanged = (mbWasHiContrastMode != Application::GetSettings().GetStyleSettings().GetHighContrastMode());
        Color aColor(rColor);

        // !!! #109290# Workaround for SetFillColor with COL_AUTO
@@ -115,19 +168,20 @@ namespace svx
        if (!aItemSize.Width() || !aItemSize.Height())
            return;

        ScopedVclPtr<VirtualDevice> pVirDev(VclPtr<VirtualDevice>::Create(*Application::GetDefaultDevice(),
            DeviceFormat::DEFAULT, DeviceFormat::DEFAULT));
        ScopedVclPtr<VirtualDevice> pVirDev(CreateVirtualDevice());
        pVirDev->SetOutputSizePixel(aItemSize);
        maBmpSize = aItemSize;

        mbWasHiContrastMode = mpTbx->GetSettings().GetStyleSettings().GetHighContrastMode();
        auto xImage = vcl::CommandInfoProvider::GetXGraphicForCommand(maCommandURL, mxFrame, GetImageSize());
        pVirDev->DrawImage(Point(0, 0), Image(xImage));

        const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
        mbWasHiContrastMode = rStyleSettings.GetHighContrastMode();

        if ((COL_TRANSPARENT != aColor) && (maBmpSize.Width() == maBmpSize.Height()))
            pVirDev->SetLineColor(aColor);
        else if( mpTbx->GetBackground().GetColor().IsDark() )
            pVirDev->SetLineColor(COL_WHITE);
        else
            pVirDev->SetLineColor(COL_BLACK);
            pVirDev->SetLineColor(rStyleSettings.GetDisableColor());

        // use not only COL_TRANSPARENT for detection of transparence,
        // but the method/way which is designed to do that
@@ -151,12 +205,12 @@ namespace svx

        pVirDev->DrawRect(maUpdRect);

        mpTbx->SetItemOverlayImage(mnBtnId, Image(pVirDev->GetBitmapEx(Point(0,0), aItemSize)));
        SetImage(pVirDev.get());
    }

    OUString ToolboxButtonColorUpdater::GetCurrentColorName()
    OUString ToolboxButtonColorUpdaterBase::GetCurrentColorName()
    {
        OUString sColorName = mpTbx->GetQuickHelpText(mnBtnId);
        OUString sColorName = GetQuickHelpText();
        // The obtained string is of format: color context (color name)
        // Generate a substring which contains only the color name
        sal_Int32 nStart = sColorName.indexOf('(');
@@ -166,6 +220,61 @@ namespace svx
            sColorName = sColorName.copy( 0, nLength - 1);
        return sColorName;
    }

    ToolboxButtonColorUpdater::ToolboxButtonColorUpdater(sal_uInt16 nSlotId, const OString& rTbxBtnId, weld::Toolbar* ptrTbx, bool bWideButton,
                                                         const OUString& rCommandLabel, const css::uno::Reference<css::frame::XFrame>& rFrame)
        : ToolboxButtonColorUpdaterBase(bWideButton, rCommandLabel, OUString::fromUtf8(rTbxBtnId), rFrame)
        , msBtnId(rTbxBtnId)
        , mpTbx(ptrTbx)
    {
        Init(nSlotId);
    }

    void ToolboxButtonColorUpdater::SetQuickHelpText(const OUString& rText)
    {
        mpTbx->set_item_tooltip_text(msBtnId, rText);
    }

    OUString ToolboxButtonColorUpdater::GetQuickHelpText() const
    {
        return mpTbx->get_item_tooltip_text(msBtnId);
    }

    void ToolboxButtonColorUpdater::SetImage(VirtualDevice* pVirDev)
    {
        mpTbx->set_item_image(msBtnId, pVirDev);
    }

    VclPtr<VirtualDevice> ToolboxButtonColorUpdater::CreateVirtualDevice() const
    {
        return mpTbx->create_virtual_device();
    }

    vcl::ImageType ToolboxButtonColorUpdater::GetImageSize() const
    {
        return mpTbx->get_icon_size();
    }

    Size ToolboxButtonColorUpdater::GetItemSize() const
    {
        vcl::ImageType eImageType = GetImageSize();
        int nHeight(16);
        switch (eImageType)
        {
            case vcl::ImageType::Size16:
                nHeight = 16;
                break;
            case vcl::ImageType::Size26:
                nHeight = 26;
                break;
            case vcl::ImageType::Size32:
                nHeight = 32;
                break;
        }
        int nWidth = mbWideButton ? nHeight * 5 : nHeight;
        return Size(nWidth, nHeight);
    }

}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/uiconfig/ui/floatingareastyle.ui b/svx/uiconfig/ui/floatingareastyle.ui
index 5ba56ad..bef7b24 100644
--- a/svx/uiconfig/ui/floatingareastyle.ui
+++ b/svx/uiconfig/ui/floatingareastyle.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<!-- Generated with glade 3.22.1 -->
<interface domain="svx">
  <requires lib="gtk+" version="3.18"/>
  <object class="GtkAdjustment" id="adjustment1">
@@ -12,16 +12,30 @@
    <property name="step_increment">5</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkWindow" id="FloatingAreaStyle">
  <object class="GtkAdjustment" id="adjustment3">
    <property name="upper">100</property>
    <property name="step_increment">5</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustment4">
    <property name="upper">100</property>
    <property name="step_increment">5</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustment5">
    <property name="upper">100</property>
    <property name="step_increment">5</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustment6">
    <property name="upper">100</property>
    <property name="step_increment">5</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkPopover" id="FloatingAreaStyle">
    <property name="can_focus">False</property>
    <property name="hexpand">True</property>
    <property name="vexpand">True</property>
    <property name="no_show_all">True</property>
    <property name="border_width">4</property>
    <property name="resizable">False</property>
    <property name="destroy_with_parent">True</property>
    <property name="type_hint">popup-menu</property>
    <property name="skip_pager_hint">True</property>
    <property name="deletable">False</property>
    <child>
      <object class="GtkGrid">
        <property name="visible">True</property>
@@ -42,7 +56,7 @@
                <property name="halign">start</property>
                <property name="label" translatable="yes" context="floatingareastyle|label1">_Angle:</property>
                <property name="use_underline">True</property>
                <property name="mnemonic_widget">angle:0degrees</property>
                <property name="mnemonic_widget">angle</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
@@ -56,7 +70,7 @@
                <property name="column_spacing">12</property>
                <property name="column_homogeneous">True</property>
                <child>
                  <object class="GtkSpinButton" id="angle:0degrees">
                  <object class="GtkSpinButton" id="angle">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="tooltip_text" translatable="yes" context="floatingareastyle|angle|tooltip_text">Specify the angle of rotation for the gradient shading style.</property>
@@ -75,6 +89,9 @@
                      <object class="GtkToolbar" id="lefttoolbox">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="toolbar_style">icons</property>
                        <property name="show_arrow">False</property>
                        <property name="icon_size">2</property>
                        <child>
                          <object class="GtkToolButton" id="left">
                            <property name="visible">True</property>
@@ -84,7 +101,7 @@
                          </object>
                          <packing>
                            <property name="expand">False</property>
                            <property name="homogeneous">True</property>
                            <property name="homogeneous">False</property>
                          </packing>
                        </child>
                      </object>
@@ -97,6 +114,9 @@
                      <object class="GtkToolbar" id="righttoolbox">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="toolbar_style">icons</property>
                        <property name="show_arrow">False</property>
                        <property name="icon_size">2</property>
                        <child>
                          <object class="GtkToolButton" id="right">
                            <property name="visible">True</property>
@@ -106,7 +126,7 @@
                          </object>
                          <packing>
                            <property name="expand">False</property>
                            <property name="homogeneous">True</property>
                            <property name="homogeneous">False</property>
                          </packing>
                        </child>
                      </object>
@@ -146,7 +166,7 @@
                <property name="halign">start</property>
                <property name="label" translatable="yes" context="floatingareastyle|label4">_Start value:</property>
                <property name="use_underline">True</property>
                <property name="mnemonic_widget">start:0%</property>
                <property name="mnemonic_widget">start</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
@@ -160,7 +180,7 @@
                <property name="halign">start</property>
                <property name="label" translatable="yes" context="floatingareastyle|label5">_End value:</property>
                <property name="use_underline">True</property>
                <property name="mnemonic_widget">end:0%</property>
                <property name="mnemonic_widget">end</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
@@ -168,11 +188,11 @@
              </packing>
            </child>
            <child>
              <object class="GtkSpinButton" id="start:0%">
              <object class="GtkSpinButton" id="start">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="tooltip_text" translatable="yes" context="floatingareastyle|start|tooltip_text">Enter a transparency value for the beginning point of the gradient, where 0% is fully opaque and 100% is fully transparent.</property>
                <property name="adjustment">adjustment2</property>
                <property name="adjustment">adjustment4</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
@@ -180,11 +200,11 @@
              </packing>
            </child>
            <child>
              <object class="GtkSpinButton" id="end:0%">
              <object class="GtkSpinButton" id="end">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="tooltip_text" translatable="yes" context="floatingareastyle|end|tooltip_text">Enter a transparency value for the endpoint of the gradient, where 0% is fully opaque and 100% is fully transparent.</property>
                <property name="adjustment">adjustment2</property>
                <property name="adjustment">adjustment5</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
@@ -209,7 +229,7 @@
                <property name="halign">start</property>
                <property name="label" translatable="yes" context="floatingareastyle|label6">_Border:</property>
                <property name="use_underline">True</property>
                <property name="mnemonic_widget">border:0%</property>
                <property name="mnemonic_widget">border</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
@@ -217,11 +237,11 @@
              </packing>
            </child>
            <child>
              <object class="GtkSpinButton" id="border:0%">
              <object class="GtkSpinButton" id="border">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="tooltip_text" translatable="yes" context="floatingareastyle|border|tooltip_text">Specify the border value of gradient transparency.</property>
                <property name="adjustment">adjustment2</property>
                <property name="adjustment">adjustment6</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
@@ -247,7 +267,7 @@
                <property name="halign">start</property>
                <property name="label" translatable="yes" context="floatingareastyle|label2">Center _X:</property>
                <property name="use_underline">True</property>
                <property name="mnemonic_widget">centerx:0%</property>
                <property name="mnemonic_widget">centerx</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
@@ -261,7 +281,7 @@
                <property name="halign">start</property>
                <property name="label" translatable="yes" context="floatingareastyle|label3">Center _Y:</property>
                <property name="use_underline">True</property>
                <property name="mnemonic_widget">centery:0%</property>
                <property name="mnemonic_widget">centery</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
@@ -269,7 +289,7 @@
              </packing>
            </child>
            <child>
              <object class="GtkSpinButton" id="centerx:0%">
              <object class="GtkSpinButton" id="centerx">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="tooltip_text" translatable="yes" context="floatingareastyle|centerx|tooltip_text">Specify the horizontal offset percentage from the center for the gradient shading style. 50% is the horizontal center.</property>
@@ -281,11 +301,11 @@
              </packing>
            </child>
            <child>
              <object class="GtkSpinButton" id="centery:0%">
              <object class="GtkSpinButton" id="centery">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="tooltip_text" translatable="yes" context="floatingareastyle|centery|tooltip_text">Specify the vertical offset percentage from the center for the gradient shading style.  50% is the vertical center.</property>
                <property name="adjustment">adjustment2</property>
                <property name="adjustment">adjustment3</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
@@ -301,4 +321,14 @@
      </object>
    </child>
  </object>
  <object class="GtkSizeGroup">
    <widgets>
      <widget name="angle"/>
      <widget name="start"/>
      <widget name="end"/>
      <widget name="border"/>
      <widget name="centerx"/>
      <widget name="centery"/>
    </widgets>
  </object>
</interface>
diff --git a/svx/uiconfig/ui/sidebararea.ui b/svx/uiconfig/ui/sidebararea.ui
index ba5169a..79e5299 100644
--- a/svx/uiconfig/ui/sidebararea.ui
+++ b/svx/uiconfig/ui/sidebararea.ui
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<!-- Generated with glade 3.22.1 -->
<interface domain="svx">
  <requires lib="LibreOffice" version="1.0"/>
  <requires lib="gtk+" version="3.18"/>
  <object class="GtkAdjustment" id="adjustment1">
    <property name="upper">100</property>
@@ -13,6 +12,23 @@
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustment4">
    <property name="upper">100</property>
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkListStore" id="liststore4">
    <columns>
      <!-- column-name text -->
      <column type="gchararray"/>
      <!-- column-name id -->
      <column type="gchararray"/>
      <!-- column-name image -->
      <column type="GdkPixbuf"/>
      <!-- column-name surface -->
      <column type="CairoSurface"/>
    </columns>
  </object>
  <object class="GtkGrid" id="AreaPropertyPanel">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
@@ -38,15 +54,14 @@
                <property name="can_focus">False</property>
                <property name="has_tooltip">True</property>
                <property name="tooltip_text" translatable="yes" context="sidebararea|filllabel|tooltip_text">Fill:</property>
                <property name="xalign">0</property>
                <property name="label" translatable="yes" context="sidebararea|filllabel">_Fill:</property>
                <property name="use_underline">True</property>
                <property name="mnemonic_widget">fillstyle</property>
                <property name="xalign">0</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
                <property name="top_attach">0</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
@@ -55,21 +70,23 @@
                <property name="can_focus">False</property>
                <property name="hexpand">True</property>
                <child>
                  <object class="sfxlo-SidebarToolBox" id="selectcolor">
                  <object class="GtkToolbar" id="selectcolor">
                    <property name="can_focus">True</property>
                    <property name="halign">start</property>
                    <property name="toolbar_style">icons</property>
                    <property name="show_arrow">False</property>
                    <property name="icon_size">2</property>
                    <child>
                      <object class="GtkMenuToolButton" id="color">
                        <property name="width_request">105</property>
                      <object class="GtkMenuToolButton" id=".uno:FillColor">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="has_tooltip">True</property>
                        <property name="tooltip_text" translatable="yes" context="sidebararea|color|tooltip_text">Select the color to apply.</property>
                        <property name="action_name">.uno:FillColor</property>
                        <property name="use_underline">True</property>
                      </object>
                      <packing>
                        <property name="expand">True</property>
                        <property name="homogeneous">True</property>
                        <property name="expand">False</property>
                        <property name="homogeneous">False</property>
                      </packing>
                    </child>
                  </object>
@@ -80,13 +97,27 @@
                  </packing>
                </child>
                <child>
                  <object class="svxlo-SvxFillAttrBox" id="fillattr">
                    <property name="can_focus">True</property>
                  <object class="GtkComboBox" id="fillattr">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="has_tooltip">True</property>
                    <property name="tooltip_text" translatable="yes" context="sidebararea|fillattr|tooltip_text">Select the effect to apply.</property>
                    <accessibility>
                      <relation type="labelled-by" target="filllabel"/>
                    </accessibility>
                    <property name="hexpand">True</property>
                    <property name="model">liststore4</property>
                    <property name="entry_text_column">0</property>
                    <property name="id_column">1</property>
                    <child>
                      <object class="GtkCellRendererText" id="cellrenderertext3"/>
                      <attributes>
                        <attribute name="text">0</attribute>
                      </attributes>
                    </child>
                    <child>
                      <object class="GtkCellRendererPixbuf" id="cellrenderertext4"/>
                      <attributes>
                        <attribute name="surface">3</attribute>
                      </attributes>
                    </child>
                    <child internal-child="accessible">
                      <object class="AtkObject" id="fillattr-atkobject">
                        <property name="AtkObject::accessible-name" translatable="yes" context="sidebararea|fillattr-atkobject">Hatching/Bitmap</property>
@@ -100,10 +131,19 @@
                  </packing>
                </child>
                <child>
                  <object class="svxcorelo-SvxColorListBox" id="fillgrad1">
                  <object class="GtkMenuButton" id="fillgrad1">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="receives_default">False</property>
                    <property name="has_tooltip">True</property>
                    <property name="tooltip_text" translatable="yes" context="sidebararea|fillgrad1|tooltip_text">Fill gradient from.</property>
                    <property name="valign">center</property>
                    <property name="hexpand">True</property>
                    <property name="draw_indicator">True</property>
                    <property name="label" translatable="no"></property>
                    <child>
                      <placeholder/>
                    </child>
                  </object>
                  <packing>
                    <property name="expand">True</property>
@@ -115,21 +155,14 @@
              <packing>
                <property name="left_attach">1</property>
                <property name="top_attach">1</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="svxlo-SvxFillTypeBox" id="fillstyle">
              <object class="GtkComboBoxText" id="fillstyle">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="can_focus">False</property>
                <property name="has_tooltip">True</property>
                <property name="tooltip_text" translatable="yes" context="sidebararea|fillstyle|tooltip_text">Select the fill type to apply.</property>
                <property name="entry_text_column">0</property>
                <property name="id_column">1</property>
                <accessibility>
                  <relation type="labelled-by" target="fillstyle"/>
                </accessibility>
                <child internal-child="accessible">
                  <object class="AtkObject" id="fillstyle-atkobject">
                    <property name="AtkObject::accessible-name" translatable="yes" context="sidebararea|fillstyle-atkobject">Fill Type</property>
@@ -139,21 +172,26 @@
              <packing>
                <property name="left_attach">1</property>
                <property name="top_attach">0</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="svxcorelo-SvxColorListBox" id="fillgrad2">
              <object class="GtkMenuButton" id="fillgrad2">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">False</property>
                <property name="has_tooltip">True</property>
                <property name="tooltip_text" translatable="yes" context="sidebararea|fillgrad2|tooltip_text">Fill gradient to.</property>
                <property name="valign">center</property>
                <property name="hexpand">True</property>
                <property name="draw_indicator">True</property>
                <property name="label" translatable="no"></property>
                <child>
                  <placeholder/>
                </child>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="top_attach">2</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
@@ -163,7 +201,7 @@
                <child>
                  <object class="GtkComboBoxText" id="gradientstyle">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="can_focus">False</property>
                    <property name="tooltip_text" translatable="yes" context="sidebararea|gradientstyle|tooltip_text">Select the gradient style.</property>
                    <items>
                      <item translatable="yes" context="sidebararea|gradientstyle">Linear</item>
@@ -202,17 +240,15 @@
              <packing>
                <property name="left_attach">0</property>
                <property name="top_attach">1</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkSpinButton" id="gradangle:0degrees">
              <object class="GtkSpinButton" id="gradangle">
                <property name="can_focus">True</property>
                <property name="tooltip_text" translatable="yes" context="sidebararea|gradangle|tooltip_text">Select the gradient angle.</property>
                <property name="adjustment">adjustment2</property>
                <child internal-child="accessible">
                  <object class="AtkObject" id="gradangle:0degrees-atkobject">
                  <object class="AtkObject" id="gradangle-atkobject">
                    <property name="AtkObject::accessible-name" translatable="yes" context="sidebararea|gradangle-atkobject">Gradient angle</property>
                  </object>
                </child>
@@ -220,8 +256,6 @@
              <packing>
                <property name="left_attach">0</property>
                <property name="top_attach">2</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
@@ -230,21 +264,19 @@
                <property name="can_focus">False</property>
                <property name="has_tooltip">True</property>
                <property name="tooltip_text" translatable="yes" context="sidebararea|transparencylabel|tooltip_text">Transparency</property>
                <property name="xalign">0</property>
                <property name="label" translatable="yes" context="sidebararea|transparencylabel">_Transparency:</property>
                <property name="use_underline">True</property>
                <property name="xalign">0</property>
              </object>
              <packing>
                <property name="left_attach">0</property>
                <property name="top_attach">3</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkComboBoxText" id="transtype">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="can_focus">False</property>
                <property name="has_tooltip">True</property>
                <property name="tooltip_text" translatable="yes" context="sidebararea|transtype|tooltip_text">Select the type of transparency to apply.</property>
                <items>
@@ -266,8 +298,6 @@
              <packing>
                <property name="left_attach">1</property>
                <property name="top_attach">3</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
@@ -275,27 +305,26 @@
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="halign">start</property>
                <property name="toolbar_style">icons</property>
                <property name="show_arrow">False</property>
                <property name="icon_size">2</property>
                <child>
                  <object class="GtkMenuToolButton" id="gradient">
                  <object class="GtkMenuToolButton" id="sidebargradient">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="has_tooltip">True</property>
                    <property name="tooltip_text" translatable="yes" context="sidebararea|gradient|tooltip_text">Specify the variation of gradient transparency.</property>
                    <property name="hexpand">True</property>
                    <property name="action_name">.uno:sidebargradient</property>
                    <property name="use_underline">True</property>
                  </object>
                  <packing>
                    <property name="expand">True</property>
                    <property name="homogeneous">True</property>
                    <property name="expand">False</property>
                    <property name="homogeneous">False</property>
                  </packing>
                </child>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="top_attach">4</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
@@ -319,6 +348,7 @@
                <property name="can_focus">True</property>
                <property name="tooltip_text" translatable="yes" context="sidebararea|transparencyslider|tooltip_text">Specify 0% for fully opaque through 100% for fully transparent.</property>
                <property name="hexpand">True</property>
                <property name="adjustment">adjustment4</property>
                <property name="round_digits">1</property>
                <property name="draw_value">False</property>
              </object>
@@ -326,21 +356,17 @@
                <property name="left_attach">0</property>
                <property name="top_attach">0</property>
                <property name="width">3</property>
                <property name="height">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkSpinButton" id="settransparency:0%">
              <object class="GtkSpinButton" id="settransparency">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="has_tooltip">True</property>
                <property name="tooltip_text" translatable="yes" context="sidebararea|settransparency|tooltip_text">Specify 0% for fully opaque through 100% for fully transparent.</property>
                <property name="max_length">100</property>
                <property name="secondary_icon_activatable">False</property>
                <property name="adjustment">adjustment1</property>
                <property name="numeric">True</property>
                <child internal-child="accessible">
                  <object class="AtkObject" id="settransparency:0%-atkobject">
                  <object class="AtkObject" id="settransparency-atkobject">
                    <property name="AtkObject::accessible-name" translatable="yes" context="sidebararea|settransparency-atkobject">Transparency</property>
                  </object>
                </child>
@@ -348,8 +374,6 @@
              <packing>
                <property name="left_attach">3</property>
                <property name="top_attach">0</property>
                <property name="width">1</property>
                <property name="height">1</property>
              </packing>
            </child>
          </object>
@@ -363,8 +387,6 @@
      <packing>
        <property name="left_attach">0</property>
        <property name="top_attach">0</property>
        <property name="width">1</property>
        <property name="height">1</property>
      </packing>
    </child>
  </object>
@@ -381,7 +403,7 @@
      <widget name="filllabel"/>
      <widget name="gradientstyle"/>
      <widget name="bmpimport"/>
      <widget name="gradangle:0degrees"/>
      <widget name="gradangle"/>
      <widget name="transparencylabel"/>
    </widgets>
  </object>
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index cb6f6d5..910778b 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -1099,7 +1099,25 @@ public:
        m_xToolBox->SetItemText(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), rLabel);
    }

    virtual void set_item_icon(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override
    virtual void set_item_icon_name(const OString& rIdent, const OUString& rIconName) override
    {
        m_xToolBox->SetItemImage(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), Image(StockImage::Yes, rIconName));
    }

    virtual void set_item_image(const OString& rIdent, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override
    {
        m_xToolBox->SetItemImage(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), Image(rIcon));
    }

    virtual void set_item_image(const OString& rIdent, VirtualDevice* pDevice) override
    {
        if (pDevice)
            m_xToolBox->SetItemImage(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), createImage(*pDevice));
        else
            m_xToolBox->SetItemImage(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), Image());
    }

    virtual void set_item_image(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override
    {
        m_xToolBox->SetItemImage(m_xToolBox->GetItemId(nIndex), Image(rIcon));
    }
@@ -1114,6 +1132,11 @@ public:
        m_xToolBox->SetQuickHelpText(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), rTip);
    }

    virtual OUString get_item_tooltip_text(const OString& rIdent) const override
    {
        return m_xToolBox->GetQuickHelpText(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)));
    }

    virtual vcl::ImageType get_icon_size() const override
    {
        return m_xToolBox->GetImageSize();
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 6630ee1..a291daf 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -2989,6 +2989,34 @@ namespace
        return pRet;
    }

    GdkPixbuf* getPixbuf(const OUString& rIconName)
    {
        if (rIconName.isEmpty())
            return nullptr;

        GdkPixbuf* pixbuf = nullptr;

        if (rIconName.lastIndexOf('.') != rIconName.getLength() - 4)
        {
            assert((rIconName== "dialog-warning" || rIconName== "dialog-error" || rIconName== "dialog-information") &&
                   "unknown stock image");

            GError *error = nullptr;
            GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
            pixbuf = gtk_icon_theme_load_icon(icon_theme, OUStringToOString(rIconName, RTL_TEXTENCODING_UTF8).getStr(),
                                              16, GTK_ICON_LOOKUP_USE_BUILTIN, &error);
        }
        else
        {
            const AllSettings& rSettings = Application::GetSettings();
            pixbuf = load_icon_by_name_theme_lang(rIconName,
                                       rSettings.GetStyleSettings().DetermineIconTheme(),
                                       rSettings.GetUILanguageTag().getBcp47());
        }

        return pixbuf;
    }

    GtkWidget* image_new_from_virtual_device(const VirtualDevice& rImageSurface)
    {
        GtkWidget* pImage = nullptr;
@@ -7101,6 +7129,33 @@ private:
        signal_clicked(OString(pStr, pStr ? strlen(pStr) : 0));
    }

    static void set_item_image(GtkToolButton* pItem, const css::uno::Reference<css::graphic::XGraphic>& rIcon)
    {
        GtkWidget* pImage = nullptr;

        if (GdkPixbuf* pixbuf = getPixbuf(rIcon))
        {
            pImage = gtk_image_new_from_pixbuf(pixbuf);
            g_object_unref(pixbuf);
            gtk_widget_show(pImage);
        }

        gtk_tool_button_set_icon_widget(pItem, pImage);
    }

    static void set_item_image(GtkToolButton* pItem, VirtualDevice* pDevice)
    {
        GtkWidget* pImage = nullptr;

        if (pDevice)
        {
            pImage = image_new_from_virtual_device(*pDevice);
            gtk_widget_show(pImage);
        }

        gtk_tool_button_set_icon_widget(pItem, pImage);
    }

public:
    GtkInstanceToolbar(GtkToolbar* pToolbar, GtkInstanceBuilder* pBuilder, bool bTakeOwnership)
        : GtkInstanceWidget(GTK_WIDGET(pToolbar), pBuilder, bTakeOwnership)
@@ -7268,20 +7323,38 @@ public:
        return OUString(pText, pText ? strlen(pText) : 0, RTL_TEXTENCODING_UTF8);
    }

    virtual void set_item_icon(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override
    virtual void set_item_icon_name(const OString& rIdent, const OUString& rIconName) override
    {
        GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, nIndex);
        GtkToolButton* pItem = m_aMap[rIdent];

        GtkWidget* pImage = nullptr;

        if (GdkPixbuf* pixbuf = getPixbuf(rIcon))
        if (GdkPixbuf* pixbuf = getPixbuf(rIconName))
        {
            pImage = gtk_image_new_from_pixbuf(pixbuf);
            g_object_unref(pixbuf);
            gtk_widget_show(pImage);
        }

        gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(pItem), pImage);
        gtk_tool_button_set_icon_widget(pItem, pImage);
    }

    virtual void set_item_image(const OString& rIdent, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override
    {
        GtkToolButton* pItem = m_aMap[rIdent];
        set_item_image(pItem, rIcon);
    }

    virtual void set_item_image(const OString& rIdent, VirtualDevice* pDevice) override
    {
        GtkToolButton* pItem = m_aMap[rIdent];
        set_item_image(pItem, pDevice);
    }

    virtual void set_item_image(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override
    {
        GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, nIndex);
        set_item_image(GTK_TOOL_BUTTON(pItem), rIcon);
    }

    virtual void set_item_tooltip_text(int nIndex, const OUString& rTip) override
@@ -7296,6 +7369,13 @@ public:
        gtk_widget_set_tooltip_text(GTK_WIDGET(pItem), OUStringToOString(rTip, RTL_TEXTENCODING_UTF8).getStr());
    }

    virtual OUString get_item_tooltip_text(const OString& rIdent) const override
    {
        GtkToolButton* pItem = m_aMap.find(rIdent)->second;
        const gchar* pStr = gtk_widget_get_tooltip_text(GTK_WIDGET(pItem));
        return OUString(pStr, pStr ? strlen(pStr) : 0, RTL_TEXTENCODING_UTF8);
    }

    virtual vcl::ImageType get_icon_size() const override
    {
        return GtkToVcl(gtk_toolbar_get_icon_size(m_pToolbar));
@@ -7957,34 +8037,6 @@ public:
        return found;
    }

    GdkPixbuf* getPixbuf(const OUString& rIconName)
    {
        if (rIconName.isEmpty())
            return nullptr;

        GdkPixbuf* pixbuf = nullptr;

        if (rIconName.lastIndexOf('.') != rIconName.getLength() - 4)
        {
            assert((rIconName== "dialog-warning" || rIconName== "dialog-error" || rIconName== "dialog-information") &&
                   "unknown stock image");

            GError *error = nullptr;
            GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
            pixbuf = gtk_icon_theme_load_icon(icon_theme, OUStringToOString(rIconName, RTL_TEXTENCODING_UTF8).getStr(),
                                              16, GTK_ICON_LOOKUP_USE_BUILTIN, &error);
        }
        else
        {
            const AllSettings& rSettings = Application::GetSettings();
            pixbuf = load_icon_by_name_theme_lang(rIconName,
                                       rSettings.GetStyleSettings().DetermineIconTheme(),
                                       rSettings.GetUILanguageTag().getBcp47());
        }

        return pixbuf;
    }

    void insert_row(GtkListStore* pListStore, GtkTreeIter& iter, int pos, const OUString* pId, const OUString& rText, const OUString* pIconName, const VirtualDevice* pDevice)
    {
        if (!pIconName && !pDevice)