[Libreoffice-commits] core.git: chart2/source framework/inc framework/source include/sfx2 include/svtools include/svx include/vcl reportdesign/source sc/inc sd/inc sfx2/source solenv/sanitizers svtools/source svx/source svx/uiconfig vcl/source vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Mon Jan 6 15:44:55 UTC 2020


 chart2/source/controller/sidebar/ChartAreaPanel.cxx          |    9 
 framework/inc/uielement/complextoolbarcontroller.hxx         |    2 
 framework/inc/uielement/generictoolbarcontroller.hxx         |    2 
 framework/source/uielement/FixedImageToolbarController.cxx   |    6 
 framework/source/uielement/FixedTextToolbarController.cxx    |    8 
 framework/source/uielement/comboboxtoolbarcontroller.cxx     |    6 
 framework/source/uielement/complextoolbarcontroller.cxx      |   36 
 framework/source/uielement/dropdownboxtoolbarcontroller.cxx  |    6 
 framework/source/uielement/edittoolbarcontroller.cxx         |    6 
 framework/source/uielement/generictoolbarcontroller.cxx      |   36 
 framework/source/uielement/imagebuttontoolbarcontroller.cxx  |    4 
 framework/source/uielement/spinfieldtoolbarcontroller.cxx    |    6 
 framework/source/uielement/togglebuttontoolbarcontroller.cxx |   10 
 include/sfx2/weldutils.hxx                                   |    7 
 include/svtools/popupwindowcontroller.hxx                    |   10 
 include/svtools/toolboxcontroller.hxx                        |   11 
 include/svx/PaletteManager.hxx                               |    6 
 include/svx/colorwindow.hxx                                  |    8 
 include/svx/itemwin.hxx                                      |    1 
 include/svx/sidebar/AreaPropertyPanelBase.hxx                |   69 -
 include/svx/sidebar/AreaTransparencyGradientPopup.hxx        |   46 
 include/svx/tbcontrl.hxx                                     |   13 
 include/svx/tbxcolorupdate.hxx                               |   76 -
 include/vcl/weld.hxx                                         |    9 
 reportdesign/source/ui/dlg/Condition.cxx                     |    6 
 reportdesign/source/ui/dlg/Condition.hxx                     |    2 
 sc/inc/pch/precompiled_sc.hxx                                |    3 
 sc/inc/pch/precompiled_scfilt.hxx                            |   17 
 sc/inc/pch/precompiled_scui.hxx                              |   10 
 sd/inc/pch/precompiled_sd.hxx                                |    3 
 sd/inc/pch/precompiled_sdui.hxx                              |    3 
 sfx2/source/sidebar/ControllerFactory.cxx                    |    4 
 sfx2/source/toolbox/weldutils.cxx                            |    6 
 solenv/sanitizers/ui/svx.suppr                               |    3 
 svtools/source/uno/popupwindowcontroller.cxx                 |    8 
 svtools/source/uno/toolboxcontroller.cxx                     |   13 
 svx/source/sidebar/area/AreaPropertyPanelBase.cxx            |  746 +++++------
 svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx    |  125 -
 svx/source/tbxctrls/PaletteManager.cxx                       |    2 
 svx/source/tbxctrls/itemwin.cxx                              |   27 
 svx/source/tbxctrls/tbcontrl.cxx                             |  137 +-
 svx/source/tbxctrls/tbxcolorupdate.cxx                       |  153 +-
 svx/uiconfig/ui/floatingareastyle.ui                         |   84 -
 svx/uiconfig/ui/sidebararea.ui                               |  146 +-
 vcl/source/app/salvtables.cxx                                |   25 
 vcl/unx/gtk3/gtk3gtkinst.cxx                                 |  116 +
 46 files changed, 1200 insertions(+), 832 deletions(-)

New commits:
commit 40fe5b93bc0838e04b46bfc7942d1ee6a2482ce0
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Thu Jan 2 14:45:32 2020 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon Jan 6 16:44:21 2020 +0100

    weld AreaPropertyPanel
    
    Change-Id: I5f4c4b43067b99cd57f8ea941002481ef5977e09
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86144
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/chart2/source/controller/sidebar/ChartAreaPanel.cxx b/chart2/source/controller/sidebar/ChartAreaPanel.cxx
index 61e72318043c..1260b36fe397 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 fad83e62a233..5c5bf8499eeb 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 b1d7c5b70b99..4eee88c1fcf1 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 e3a37e9c4c4d..19e05f081d0d 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 97a980987300..26208cc68bb1 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 699fd676cb35..fedb1b75d9a7 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 51ede7a9a9b4..eb4a59f38a0a 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 ef73758a6040..6eacd138660d 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 0ec00b73a3e4..2e6164181072 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 746f4e18f5ca..770f5860fbef 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 18b23dd41628..9ad5cc47885e 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 ae51cc6063ea..0f329d9681ec 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 8cd8a94b51f0..ca2d4312c443 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 ccca8b393042..e87295c23abc 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 41de1cbee9c7..1666c8ad1513 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 5d86aeb35930..0ec7228fe5a8 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 81621e436b0b..d468f0199588 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 acc18149e2ca..257d1e6801f7 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 4f4c3ec140a0..889a513586fe 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 abe5a603514c..bc72b8b7c4aa 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 cbdc5e9a114e..67abcbf6a5cc 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 315fd9e1c57e..226160e422c0 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 e37f7f1f0e4d..460635c0ac52 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,22 +62,67 @@ 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
 
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 8c20ef58cda4..c8ccf4291338 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 f76fe4935d69..b2add1cb3709 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 4f263f815ba6..641c1a2bf5dc 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 424eaa02758a..fabc4b884701 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 d13e9f4a854a..e64703567778 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 61dee39e0410..e01d112a6cc4 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 b2c4f9364bc1..b3c53e6d3828 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 bfecafbda3c7..7b2124a09afa 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 61ed92452c54..49b67cbf6e07 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 3f2d0970cc6e..52cf254d7b9a 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 b2d33d3c19b6..d089305f2326 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 0ffb2f5871cd..cc283adbdf42 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 8bd9d94f2366..3ff118f31bb5 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 0b050bb708a4..e53bd5db11c2 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));
-
-    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));
+    mxMTRTransparent->connect_value_changed(LINK(this, AreaPropertyPanelBase, ModifyTransparentHdl_Impl));
+    mxSldTransparent->connect_value_changed(LINK(this, AreaPropertyPanelBase, ModifyTransSliderHdl));
+
+    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();
-
-            mpLbFillAttr->Enable();
-            mpLbFillGradTo->Enable();
-            mpLbFillGradFrom->Enable();
-            mpGradientStyle->Enable();
-            mpMTRAngle->Enable();
-            mpLbFillAttr->Clear();
+            mxLbFillAttr->hide();
+            mxLbFillGradFrom->show();
+            mxLbFillGradTo->show();
+            mxGradientStyle->show();
+            mxMTRAngle->show();
+            mxToolBoxColor->hide();
+            mxBmpImport->hide();
+
+            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);
-
-                    mpLbFillAttr->AdaptDropDownLineCountToMaximum();
+                    SvxFillAttrBox::Fill(*mxLbFillAttr, pXBitmapList);
 
-                    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();

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list