[Libreoffice-commits] core.git: cui/source cui/uiconfig cui/UIConfig_cui.mk extras/source include/svx include/vcl solenv/bin solenv/sanitizers sw/source vcl/source vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Fri Sep 20 14:22:21 UTC 2019


 cui/UIConfig_cui.mk                            |    2 
 cui/source/options/optcolor.cxx                |  821 ++++++++-----------------
 cui/source/options/optcolor.hxx                |   29 
 cui/uiconfig/ui/chapterfragment.ui             |   27 
 cui/uiconfig/ui/colorconfigwin.ui              |  551 +++++++++++++---
 cui/uiconfig/ui/colorfragment.ui               |   46 +
 cui/uiconfig/ui/optappearancepage.ui           |   98 ++
 extras/source/glade/libreoffice-catalog.xml.in |    3 
 include/svx/colorbox.hxx                       |    1 
 include/vcl/weld.hxx                           |    7 
 solenv/bin/native-code.py                      |    1 
 solenv/sanitizers/ui/cui.suppr                 |   51 -
 sw/source/filter/ww8/ww8par.cxx                |    2 
 vcl/source/app/salvtables.cxx                  |   30 
 vcl/unx/gtk3/gtk3gtkinst.cxx                   |   30 
 15 files changed, 969 insertions(+), 730 deletions(-)

New commits:
commit 6d80ef15d12b940422e9d56b90999a42c92401f7
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Thu Sep 19 15:08:06 2019 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri Sep 20 16:21:06 2019 +0200

    weld Application Colors page
    
    Change-Id: Ib074afdb9cf57decb435bb6ec3867af5989019ef
    Reviewed-on: https://gerrit.libreoffice.org/79225
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/cui/UIConfig_cui.mk b/cui/UIConfig_cui.mk
index f953af64a954..19c8f21e7e73 100644
--- a/cui/UIConfig_cui.mk
+++ b/cui/UIConfig_cui.mk
@@ -38,8 +38,10 @@ $(eval $(call gb_UIConfig_add_uifiles,cui,\
 	cui/uiconfig/ui/calloutpage \
 	cui/uiconfig/ui/cellalignment \
 	cui/uiconfig/ui/certdialog \
+	cui/uiconfig/ui/chapterfragment \
 	cui/uiconfig/ui/charnamepage \
 	cui/uiconfig/ui/colorconfigwin \
+	cui/uiconfig/ui/colorfragment \
 	cui/uiconfig/ui/colorpage \
 	cui/uiconfig/ui/colorpickerdialog \
 	cui/uiconfig/ui/comment \
diff --git a/cui/source/options/optcolor.cxx b/cui/source/options/optcolor.cxx
index 56f80cb5ab29..39317f098233 100644
--- a/cui/source/options/optcolor.cxx
+++ b/cui/source/options/optcolor.cxx
@@ -163,44 +163,48 @@ const vEntryInfo[] =
 
 } // namespace
 
-
 // ColorConfigWindow_Impl
 
-
 class ColorConfigWindow_Impl
-    : public VclContainer
-    , public VclBuilderContainer
 {
 public:
-    explicit ColorConfigWindow_Impl(vcl::Window* pParent);
-    virtual ~ColorConfigWindow_Impl() override { disposeOnce(); }
-    virtual void dispose() override;
+    explicit ColorConfigWindow_Impl(weld::Window* pTopLevel, weld::Container* pParent);
 
 public:
-    void SetLinks (Link<Button*,void> const&, Link<SvxColorListBox&,void> const&, Link<Control&,void> const&);
-    unsigned GetEntryHeight () const { return vEntries[0]->GetHeight(); }
-    long GetScrollOffset() const { return vEntries[1]->GetTop() - vEntries[0]->GetTop(); }
-    void Update (EditableColorConfig const*, EditableExtendedColorConfig const*);
-    void ScrollHdl(const ScrollBar&);
-    void ClickHdl (EditableColorConfig*, CheckBox const *);
-    void ColorHdl (EditableColorConfig*, EditableExtendedColorConfig*, SvxColorListBox*);
-    void Init(ScrollBar *pVScroll, HeaderBar *m_pHeaderHB);
-    void AdjustScrollBar();
-    void AdjustHeaderBar();
+    void SetLinks(Link<weld::ToggleButton&,void> const&,
+                  Link<ColorListBox&,void> const&,
+                  Link<weld::Widget&,void> const&);
+    void Update(EditableColorConfig const*, EditableExtendedColorConfig const*);
+    void ClickHdl(EditableColorConfig*, weld::ToggleButton&);
+    void ColorHdl(EditableColorConfig*, EditableExtendedColorConfig*, ColorListBox*);
+    void Init(weld::ScrolledWindow* pVScroll);
+
+    weld::Widget& GetWidget1()
+    {
+        return *m_xWidget1;
+    }
+
+    weld::Widget& GetWidget2()
+    {
+        return *m_xWidget2;
+    }
+
+    weld::Widget& GetBody()
+    {
+        return *m_xGrid;
+    }
+
+    void AdjustExtraWidths(int nTextWidth);
 
 private:
     // Chapter -- horizontal group separator stripe with text
     class Chapter
     {
         // text
-        VclPtr<FixedText> m_pText;
+        std::unique_ptr<weld::Label> m_xText;
     public:
-        Chapter(FixedText *pText, bool bShow);
-        Chapter(vcl::Window *pGrid, unsigned nYPos, const OUString& sDisplayName);
-        ~Chapter();
-        void dispose() { m_pText.disposeAndClear(); }
-        void SetBackground(const Wallpaper& W) { m_pText->SetBackground(W); }
-        void Show(const Wallpaper& rBackWall);
+        Chapter(weld::Builder& rBuilder, const char* pLabelWidget, bool bShow);
+        void SetText(const OUString& rLabel) { m_xText->set_label(rLabel); }
     };
 
     // Entry -- a color config entry:
@@ -208,42 +212,42 @@ private:
     class Entry
     {
     public:
-        Entry(ColorConfigWindow_Impl& rParent, unsigned iEntry, long nCheckBoxLabelOffset, bool bShow);
-        Entry(vcl::Window* pGrid, unsigned nYPos, const ExtendedColorConfigValue& aColorEntry,
-            long nCheckBoxLabelOffset);
-        ~Entry();
+        Entry(weld::Window* pTopLevel, weld::Builder& rBuilder, const char* pTextWidget, const char* pColorWidget,
+              const Color& rColor, long nCheckBoxLabelOffset, bool bCheckBox, bool bShow);
     public:
-        void Show ();
+        void SetText(const OUString& rLabel) { dynamic_cast<weld::Label&>(*m_xText).set_label(rLabel); }
+        void set_width_request(int nTextWidth) { m_xText->set_size_request(nTextWidth, -1); }
         void Hide ();
-        void SetAppearance(Wallpaper const& rTextWall);
-        void SetTextColor (Color C) { m_pText->SetTextColor(C); }
     public:
-        void SetLinks (Link<Button*,void> const&, Link<SvxColorListBox&,void> const&, Link<Control&,void> const&);
+        void SetLinks(Link<weld::ToggleButton&,void> const&,
+                      Link<ColorListBox&,void> const&,
+                      Link<weld::Widget&,void> const&);
         void Update (ColorConfigValue const&);
         void Update (ExtendedColorConfigValue const&);
         void ColorChanged (ColorConfigValue&);
         void ColorChanged (ExtendedColorConfigValue&);
     public:
-        long GetTop () const { return m_pColorList->GetPosPixel().Y(); }
-        unsigned GetHeight () const { return m_pColorList->GetSizePixel().Height(); }
-    public:
-        bool Is (CheckBox const * pBox) const { return m_pText.get() == pBox; }
-        bool Is (SvxColorListBox* pBox) const { return m_pColorList == pBox; }
-        void dispose()
-        {
-            m_pText.disposeAndClear();
-            m_pColorList.disposeAndClear();
-        }
+        bool Is(weld::ToggleButton* pBox) const { return m_xText.get() == pBox; }
+        bool Is(ColorListBox* pBox) const { return m_xColorList.get() == pBox; }
     private:
-        bool m_bOwnsWidgets;
         // checkbox (CheckBox) or simple text (FixedText)
-        VclPtr<Control> m_pText;
+        std::unique_ptr<weld::Widget> m_xText;
         // color list box
-        VclPtr<SvxColorListBox> m_pColorList;
+        std::unique_ptr<ColorListBox> m_xColorList;
         // default color
         Color m_aDefaultColor;
     };
 
+private:
+    weld::Window* m_pTopLevel;
+    weld::ScrolledWindow* m_pVScroll;
+    std::unique_ptr<weld::Builder> m_xBuilder;
+    std::unique_ptr<weld::Container> m_xGrid;
+    std::unique_ptr<weld::Widget> m_xWidget1;
+    std::unique_ptr<weld::Widget> m_xWidget2;
+
+    std::vector<std::unique_ptr<weld::Builder>> vExtBuilders;
+    std::vector<std::unique_ptr<weld::Container>> vExtContainers;
     // vChapters -- groups (group headers)
     std::vector<std::shared_ptr<Chapter> > vChapters;
     // vEntries -- color options
@@ -252,187 +256,103 @@ private:
     // module options
     SvtModuleOptions aModuleOptions;
 
-
-private:
-    VclPtr<VclGrid>   m_pGrid;
-    VclPtr<ScrollBar> m_pVScroll;
-    VclPtr<HeaderBar> m_pHeaderHB;
-
     // initialization
     void CreateEntries();
-    void SetAppearance();
 
 private:
-    virtual void Command (CommandEvent const& rCEvt) override;
-    virtual void DataChanged (DataChangedEvent const& rDCEvt) override;
-
-    virtual Size calculateRequisition() const override;
-    virtual void setAllocation(const Size &rAllocation) override;
 
     bool IsGroupVisible (Group) const;
 };
 
-
 // ColorConfigWindow_Impl::Chapter
 
-
 // ctor for default groups
 // rParent: parent window (ColorConfigWindow_Impl)
 // eGroup: which group is this?
-ColorConfigWindow_Impl::Chapter::Chapter(FixedText* pText, bool bShow)
-    : m_pText(pText)
+ColorConfigWindow_Impl::Chapter::Chapter(weld::Builder& rBuilder, const char* pLabelWidget, bool bShow)
+    : m_xText(rBuilder.weld_label(pLabelWidget))
 {
     if (!bShow)
-        m_pText->Hide();
-}
-
-// ctor for extended groups
-ColorConfigWindow_Impl::Chapter::Chapter(vcl::Window *pGrid,
-    unsigned nYPos, const OUString& rDisplayName)
-{
-    m_pText = VclPtr<FixedText>::Create(pGrid, WB_LEFT|WB_VCENTER|WB_3DLOOK);
-    m_pText->set_font_attribute("weight", "bold");
-    m_pText->set_grid_width(3);
-    m_pText->set_grid_left_attach(0);
-    m_pText->set_grid_top_attach(nYPos);
-    m_pText->SetText(rDisplayName);
+        m_xText->hide();
 }
 
-ColorConfigWindow_Impl::Chapter::~Chapter()
-{
-    // FIXME: we had an horrible m_bOwnsWidget const
-    m_pText.disposeAndClear();
-}
-
-void ColorConfigWindow_Impl::Chapter::Show(Wallpaper const& rBackWall)
-{
-    // background
-    m_pText->SetBackground(rBackWall);
-    m_pText->Show();
-}
-
-
 // ColorConfigWindow_Impl::Entry
+ColorConfigWindow_Impl::Entry::Entry(weld::Window* pTopLevel, weld::Builder& rBuilder,
+                                     const char* pTextWidget, const char* pColorWidget,
+                                     const Color& rColor,
+                                     long nCheckBoxLabelOffset, bool bCheckBox, bool bShow)
+    : m_xColorList(new ColorListBox(rBuilder.weld_menu_button(pColorWidget), pTopLevel))
+    , m_aDefaultColor(rColor)
+{
+    if (bCheckBox)
+        m_xText = rBuilder.weld_check_button(pTextWidget);
+    else
+        m_xText = rBuilder.weld_label(pTextWidget);
 
+    // color list
+    m_xColorList->SetSlotId(SID_ATTR_CHAR_COLOR);
+    m_xColorList->SetAutoDisplayColor(m_aDefaultColor);
 
-ColorConfigWindow_Impl::Entry::Entry(ColorConfigWindow_Impl& rParent, unsigned iEntry,
-    long nCheckBoxLabelOffset, bool bShow)
-    : m_bOwnsWidgets(false)
-    , m_aDefaultColor(ColorConfig::GetDefaultColor(static_cast<ColorConfigEntry>(iEntry)))
-{
-    rParent.get(m_pText, vEntryInfo[iEntry].pText);
-    if (!vEntryInfo[iEntry].bCheckBox)
+    if (!bCheckBox)
     {
-        m_pText->set_margin_left(m_pText->get_margin_left() +
+        m_xText->set_margin_left(m_xText->get_margin_left() +
             nCheckBoxLabelOffset);
     }
-    rParent.get(m_pColorList, vEntryInfo[iEntry].pColor);
 
     if (!bShow)
         Hide();
 }
 
-// ctor for extended entries
-ColorConfigWindow_Impl::Entry::Entry( vcl::Window *pGrid, unsigned nYPos,
-    ExtendedColorConfigValue const& rColorEntry, long nCheckBoxLabelOffset)
-    : m_bOwnsWidgets(true)
-    , m_aDefaultColor(rColorEntry.getDefaultColor())
-{
-    m_pText = VclPtr<FixedText>::Create(pGrid, WB_LEFT|WB_VCENTER|WB_3DLOOK);
-    m_pText->set_grid_left_attach(0);
-    m_pText->set_grid_top_attach(nYPos);
-    m_pText->set_margin_left(6 + nCheckBoxLabelOffset);
-    m_pText->SetText(rColorEntry.getDisplayName());
-
-    m_pColorList = VclPtr<SvxColorListBox>::Create(pGrid);
-    m_pColorList->set_grid_left_attach(1);
-    m_pColorList->set_grid_top_attach(nYPos);
-
-    Show();
-}
-
-ColorConfigWindow_Impl::Entry::~Entry()
-{
-    if (m_bOwnsWidgets)
-    {
-        m_pText.disposeAndClear();
-        m_pColorList.disposeAndClear();
-    }
-}
-
-void ColorConfigWindow_Impl::Entry::Show()
-{
-    m_pText->Show();
-    m_pColorList->Show();
-}
-
 void ColorConfigWindow_Impl::Entry::Hide()
 {
-    m_pText->Hide();
-    m_pColorList->Hide();
-}
-
-// SetAppearance()
-// iEntry: which entry is this?
-// rTextWall: background of the text (transparent)
-// aSampleList: sample color listbox (to copy from)
-void ColorConfigWindow_Impl::Entry::SetAppearance(Wallpaper const& rTextWall)
-{
-    // text (and optionally checkbox)
-    m_pText->SetBackground(rTextWall);
-    // color list
-    m_pColorList->SetSlotId(SID_ATTR_CHAR_COLOR);
-    m_pColorList->SetAutoDisplayColor(m_aDefaultColor);
+    m_xText->hide();
+    m_xColorList->hide();
 }
 
 // SetLinks()
-void ColorConfigWindow_Impl::Entry::SetLinks(
-    Link<Button*,void> const& aCheckLink, Link<SvxColorListBox&,void> const& aColorLink,
-    Link<Control&,void> const& aGetFocusLink)
+void ColorConfigWindow_Impl::Entry::SetLinks(Link<weld::ToggleButton&,void> const& rCheckLink,
+                                             Link<ColorListBox&,void> const& rColorLink,
+                                             Link<weld::Widget&,void> const& rGetFocusLink)
 {
-    m_pColorList->SetSelectHdl(aColorLink);
-    m_pColorList->SetGetFocusHdl(aGetFocusLink);
-    if (CheckBox* pCheckBox = dynamic_cast<CheckBox*>(m_pText.get()))
+    m_xColorList->SetSelectHdl(rColorLink);
+    m_xColorList->connect_focus_in(rGetFocusLink);
+    if (weld::ToggleButton* pCheckBox = dynamic_cast<weld::ToggleButton*>(m_xText.get()))
     {
-        pCheckBox->SetClickHdl(aCheckLink);
-        pCheckBox->SetGetFocusHdl(aGetFocusLink);
+        pCheckBox->connect_toggled(rCheckLink);
+        pCheckBox->connect_focus_in(rGetFocusLink);
     }
 }
 
 // updates a default color config entry
-void ColorConfigWindow_Impl::Entry::Update (
-    ColorConfigValue const& rValue
-) {
+void ColorConfigWindow_Impl::Entry::Update(ColorConfigValue const& rValue)
+{
     Color aColor(rValue.nColor);
-    m_pColorList->SelectEntry(aColor);
-    if (CheckBox* pCheckBox = dynamic_cast<CheckBox*>(m_pText.get()))
-        pCheckBox->Check(rValue.bIsVisible);
+    m_xColorList->SelectEntry(aColor);
+    if (weld::ToggleButton* pCheckBox = dynamic_cast<weld::ToggleButton*>(m_xText.get()))
+        pCheckBox->set_active(rValue.bIsVisible);
 }
 
 // updates an extended color config entry
-void ColorConfigWindow_Impl::Entry::Update (
-    ExtendedColorConfigValue const& rValue
-) {
+void ColorConfigWindow_Impl::Entry::Update(ExtendedColorConfigValue const& rValue)
+{
     Color aColor(rValue.getColor());
     if (rValue.getColor() == rValue.getDefaultColor())
-        m_pColorList->SelectEntry(COL_AUTO);
+        m_xColorList->SelectEntry(COL_AUTO);
     else
-        m_pColorList->SelectEntry(aColor);
+        m_xColorList->SelectEntry(aColor);
 }
 
 // color of a default entry has changed
-void ColorConfigWindow_Impl::Entry::ColorChanged (
-    ColorConfigValue& rValue
-) {
-    Color aColor = m_pColorList->GetSelectEntryColor();
+void ColorConfigWindow_Impl::Entry::ColorChanged(ColorConfigValue& rValue)
+{
+    Color aColor = m_xColorList->GetSelectEntryColor();
     rValue.nColor = aColor;
 }
 
 // color of an extended entry has changed
-void ColorConfigWindow_Impl::Entry::ColorChanged (
-    ExtendedColorConfigValue& rValue
-) {
-    Color aColor = m_pColorList->GetSelectEntryColor();
+void ColorConfigWindow_Impl::Entry::ColorChanged(ExtendedColorConfigValue& rValue)
+{
+    Color aColor = m_xColorList->GetSelectEntryColor();
     rValue.setColor(aColor);
     if (aColor == COL_AUTO)
     {
@@ -440,46 +360,15 @@ void ColorConfigWindow_Impl::Entry::ColorChanged (
     }
 }
 
-
 // ColorConfigWindow_Impl
-
-
-ColorConfigWindow_Impl::ColorConfigWindow_Impl(vcl::Window* pParent)
-    : VclContainer(pParent)
+ColorConfigWindow_Impl::ColorConfigWindow_Impl(weld::Window* pTopLevel, weld::Container* pParent)
+    : m_pTopLevel(pTopLevel)
+    , m_xBuilder(Application::CreateBuilder(pParent, "cui/ui/colorconfigwin.ui"))
+    , m_xGrid(m_xBuilder->weld_container("ColorConfigWindow"))
+    , m_xWidget1(m_xBuilder->weld_widget("doccolor"))
+    , m_xWidget2(m_xBuilder->weld_widget("doccolor_lb"))
 {
-    m_pUIBuilder.reset(new VclBuilder(this, getUIRootDir(), "cui/ui/colorconfigwin.ui"));
-    get(m_pGrid, "ColorConfigWindow");
     CreateEntries();
-    SetAppearance();
-}
-
-void ColorConfigWindow_Impl::dispose()
-{
-    m_pGrid.clear();
-    m_pVScroll.clear();
-    m_pHeaderHB.clear();
-    for (auto const& chapter : vChapters)
-        chapter->dispose();
-    for (auto const& entry : vEntries)
-        entry->dispose();
-    disposeBuilder();
-    VclContainer::dispose();
-}
-
-Size ColorConfigWindow_Impl::calculateRequisition() const
-{
-    return getLayoutRequisition(*m_pGrid);
-}
-
-void ColorConfigWindow_Impl::setAllocation(const Size &rAllocation)
-{
-    Point aChildPos(0, 0);
-    Size aChildSize(getLayoutRequisition(*m_pGrid));
-    aChildSize.setWidth( rAllocation.Width() );
-    setLayoutPosSize(*m_pGrid, aChildPos, aChildSize);
-    AdjustScrollBar();
-    AdjustHeaderBar();
-    ScrollHdl(*m_pVScroll);
 }
 
 void ColorConfigWindow_Impl::CreateEntries()
@@ -490,25 +379,24 @@ void ColorConfigWindow_Impl::CreateEntries()
     for (unsigned i = 0; i != nGroupCount; ++i)
     {
         aModulesInstalled[i] = IsGroupVisible(vGroupInfo[i].eGroup);
-        vChapters.push_back(std::make_shared<Chapter>(
-            get<FixedText>(vGroupInfo[i].pGroup), aModulesInstalled[i]));
+        vChapters.push_back(std::make_shared<Chapter>(*m_xBuilder, vGroupInfo[i].pGroup, aModulesInstalled[i]));
     }
 
-    //Here we want to get the amount to add to the position
-    //of a FixedText to get it to align its contents
-    //with that of a CheckBox
-    //We should have something like a Control::getTextOrigin
-    //Ideally we could use something like GetCharacterBounds,
-    //but I think that only works on truly visible controls
+    // Here we want to get the amount to add to the position of a FixedText to
+    // get it to align its contents with that of a CheckBox
     long nCheckBoxLabelOffset = 0;
     {
         OUString sSampleText("X");
-        ScopedVclPtrInstance< CheckBox > aCheckBox(this);
-        ScopedVclPtrInstance< FixedText > aFixedText(this);
-        aCheckBox->SetText(sSampleText);
-        aFixedText->SetText(sSampleText);
-        Size aCheckSize(aCheckBox->CalcMinimumSize(0x7fffffff));
-        Size aFixedSize(aFixedText->CalcMinimumSize());
+        std::unique_ptr<weld::CheckButton> xCheckBox(m_xBuilder->weld_check_button("docboundaries"));
+        std::unique_ptr<weld::Label> xFixedText(m_xBuilder->weld_label("doccolor"));
+        OUString sOrigCheck(xCheckBox->get_label());
+        OUString sOrigFixed(xFixedText->get_label());
+        xCheckBox->set_label(sSampleText);
+        xFixedText->set_label(sSampleText);
+        Size aCheckSize(xCheckBox->get_preferred_size());
+        Size aFixedSize(xFixedText->get_preferred_size());
+        xCheckBox->set_label(sOrigCheck);
+        xFixedText->set_label(sOrigFixed);
         nCheckBoxLabelOffset = aCheckSize.Width() - aFixedSize.Width();
     }
 
@@ -516,7 +404,11 @@ void ColorConfigWindow_Impl::CreateEntries()
     vEntries.reserve(ColorConfigEntryCount);
     for (size_t i = 0; i < SAL_N_ELEMENTS(vEntryInfo); ++i)
     {
-        vEntries.push_back(std::make_shared<Entry>(*this, i, nCheckBoxLabelOffset,
+        vEntries.push_back(std::make_shared<Entry>(m_pTopLevel, *m_xBuilder,
+            vEntryInfo[i].pText, vEntryInfo[i].pColor,
+            ColorConfig::GetDefaultColor(static_cast<ColorConfigEntry>(i)),
+            nCheckBoxLabelOffset,
+            vEntryInfo[i].bCheckBox,
             aModulesInstalled[vEntryInfo[i].eGroup]));
     }
 
@@ -527,97 +419,58 @@ void ColorConfigWindow_Impl::CreateEntries()
         size_t nLineNum = vChapters.size() + vEntries.size() + 1;
         for (unsigned j = 0; j != nExtGroupCount; ++j)
         {
+            vExtBuilders.emplace_back(Application::CreateBuilder(m_xGrid.get(), "cui/ui/chapterfragment.ui"));
+            vExtContainers.emplace_back(vExtBuilders.back()->weld_container("ChapterFragment"));
+
+            vExtContainers.back()->set_grid_width(3);
+            vExtContainers.back()->set_grid_left_attach(0);
+            vExtContainers.back()->set_grid_top_attach(nLineNum);
+
             OUString const sComponentName = aExtConfig.GetComponentName(j);
             vChapters.push_back(std::make_shared<Chapter>(
-                m_pGrid, nLineNum,
-                aExtConfig.GetComponentDisplayName(sComponentName)
-            ));
+                *vExtBuilders.back(), "chapter", true));
+            vChapters.back()->SetText(aExtConfig.GetComponentDisplayName(sComponentName));
             ++nLineNum;
             unsigned nColorCount = aExtConfig.GetComponentColorCount(sComponentName);
             for (unsigned i = 0; i != nColorCount; ++i)
             {
+                vExtBuilders.emplace_back(Application::CreateBuilder(m_xGrid.get(), "cui/ui/colorfragment.ui"));
+                vExtContainers.emplace_back(vExtBuilders.back()->weld_container("ColorFragment"));
+
+                vExtContainers.back()->set_grid_width(3);
+                vExtContainers.back()->set_grid_left_attach(0);
+                vExtContainers.back()->set_grid_top_attach(nLineNum);
+
                 ExtendedColorConfigValue const aColorEntry =
                     aExtConfig.GetComponentColorConfigValue(sComponentName, i);
-                vEntries.push_back(std::make_shared<Entry>(
-                    m_pGrid, nLineNum, aColorEntry, nCheckBoxLabelOffset
-                ));
+                vEntries.push_back(std::make_shared<Entry>(m_pTopLevel, *vExtBuilders.back(),
+                    "label", "button", aColorEntry.getDefaultColor(),
+                    nCheckBoxLabelOffset, false, true));
+                vEntries.back()->SetText(aColorEntry.getDisplayName());
                 ++nLineNum;
             }
         }
     }
 }
 
-void ColorConfigWindow_Impl::SetAppearance ()
-{
-    Wallpaper const aTransparentWall(COL_TRANSPARENT);
-    StyleSettings const& rStyleSettings = GetSettings().GetStyleSettings();
-    Color const aBackColor = rStyleSettings.GetHighContrastMode() ?
-        rStyleSettings.GetShadowColor() : COL_LIGHTGRAY;
-    Wallpaper const aBackWall(aBackColor);
-    for (size_t i = 0; i != vChapters.size(); ++i)
-        vChapters[i]->Show(aBackWall);
-    Wallpaper aBack(rStyleSettings.GetFieldColor());
-    SetBackground(aBack);
-    m_pGrid->SetBackground(aBack);
-
-    // #104195# when the window color is the same as the text color it has to be changed
-    Color aWinCol = rStyleSettings.GetWindowColor();
-    Color aRCheckCol = rStyleSettings.GetRadioCheckTextColor();
-    if (aWinCol == aRCheckCol)
-    {
-        aRCheckCol.Invert();
-        // if inversion didn't work (gray) then it's set to black
-        if (aRCheckCol == aWinCol)
-            aRCheckCol = COL_BLACK;
-        // setting new text color for each entry
-        for (size_t i = 0; i != vEntries.size(); ++i)
-            vEntries[i]->SetTextColor(aRCheckCol);
-    }
-
-    OSL_ENSURE( vEntries.size() >= SAL_N_ELEMENTS(vEntryInfo), "wrong number of helpIDs for color listboxes" );
-
-    // appearance
-    for (size_t i = 0; i != vEntries.size(); ++i)
-    {
-        // appearance
-        vEntries[i]->SetAppearance(aTransparentWall);
-    }
-}
-
-void ColorConfigWindow_Impl::AdjustHeaderBar()
-{
-    // horizontal positions
-    unsigned const nX0 = 0;
-    unsigned const nX1 = get<vcl::Window>("doccolor")->GetPosPixel().X();
-    unsigned const nX2 = get<vcl::Window>("doccolor_lb")->GetPosPixel().X();
-    unsigned const nX3 = m_pHeaderHB->GetSizePixel().Width();
-    m_pHeaderHB->SetItemSize(1, nX1 - nX0);
-    m_pHeaderHB->SetItemSize(2, nX2 - nX1);
-    m_pHeaderHB->SetItemSize(3, nX3 - nX2);
-}
-
-void ColorConfigWindow_Impl::AdjustScrollBar()
+void ColorConfigWindow_Impl::AdjustExtraWidths(int nTextWidth)
 {
-    unsigned const nVisibleEntries = GetSizePixel().Height() / GetScrollOffset();
-    m_pVScroll->SetPageSize(nVisibleEntries - 1);
-    m_pVScroll->SetVisibleSize(nVisibleEntries);
+    for (size_t i = SAL_N_ELEMENTS(vEntryInfo); i < vEntries.size(); ++i)
+        vEntries[i]->set_width_request(nTextWidth);
 }
 
-void ColorConfigWindow_Impl::Init(ScrollBar *pVScroll, HeaderBar *pHeaderHB)
+void ColorConfigWindow_Impl::Init(weld::ScrolledWindow* pVScroll)
 {
-    m_pHeaderHB = pHeaderHB;
     m_pVScroll = pVScroll;
-    m_pVScroll->EnableDrag();
-    m_pVScroll->SetRangeMin(0);
-    m_pVScroll->SetRangeMax(vEntries.size() + vChapters.size());
 }
 
 // SetLinks()
-void ColorConfigWindow_Impl::SetLinks (
-    Link<Button*,void> const& aCheckLink, Link<SvxColorListBox&,void> const& aColorLink, Link<Control&,void> const& aGetFocusLink
-) {
+void ColorConfigWindow_Impl::SetLinks(Link<weld::ToggleButton&,void> const& aCheckLink,
+                                      Link<ColorListBox&,void> const& aColorLink,
+                                      Link<weld::Widget&,void> const& rGetFocusLink)
+{
     for (auto const & i: vEntries)
-        i->SetLinks(aCheckLink, aColorLink, aGetFocusLink);
+        i->SetLinks(aCheckLink, aColorLink, rGetFocusLink);
 }
 
 // Update()
@@ -648,25 +501,16 @@ void ColorConfigWindow_Impl::Update (
     }
 }
 
-// ScrollHdl()
-void ColorConfigWindow_Impl::ScrollHdl(const ScrollBar& rVScroll)
-{
-    SetUpdateMode(true);
-    Point aPos(0, 0 - rVScroll.GetThumbPos() * GetScrollOffset());
-    m_pGrid->SetPosPixel(aPos);
-    SetUpdateMode(true);
-}
-
 // ClickHdl()
-void ColorConfigWindow_Impl::ClickHdl (EditableColorConfig* pConfig, CheckBox const * pBox)
+void ColorConfigWindow_Impl::ClickHdl(EditableColorConfig* pConfig, weld::ToggleButton& rBox)
 {
     for (unsigned i = 0; i != ColorConfigEntryCount; ++i)
     {
-        if (vEntries[i]->Is(pBox))
+        if (vEntries[i]->Is(&rBox))
         {
             ColorConfigEntry const aEntry = static_cast<ColorConfigEntry>(i);
             ColorConfigValue aValue = pConfig->GetColorValue(aEntry);
-            aValue.bIsVisible = pBox->IsChecked();
+            aValue.bIsVisible = rBox.get_active();
             pConfig->SetColorValue(aEntry, aValue);
             break;
         }
@@ -676,7 +520,7 @@ void ColorConfigWindow_Impl::ClickHdl (EditableColorConfig* pConfig, CheckBox co
 // ColorHdl()
 void ColorConfigWindow_Impl::ColorHdl(
     EditableColorConfig* pConfig, EditableExtendedColorConfig* pExtConfig,
-    SvxColorListBox* pBox)
+    ColorListBox* pBox)
 {
     unsigned i = 0;
 
@@ -737,267 +581,140 @@ bool ColorConfigWindow_Impl::IsGroupVisible (Group eGroup) const
     }
 }
 
-void ColorConfigWindow_Impl::DataChanged (DataChangedEvent const& rDCEvt)
-{
-    Window::DataChanged( rDCEvt );
-    if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
-         (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
-    {
-        StyleSettings const& rStyleSettings = GetSettings().GetStyleSettings();
-        bool const bHighContrast = rStyleSettings.GetHighContrastMode();
-        Wallpaper const aBackWall(bHighContrast ? COL_TRANSPARENT : COL_LIGHTGRAY);
-        for (auto const & i: vChapters)
-            i->SetBackground(aBackWall);
-        SetBackground(Wallpaper(rStyleSettings.GetWindowColor()));
-    }
-}
-
-
-void ColorConfigWindow_Impl::Command( const CommandEvent& rCEvt )
-{
-    GetParent()->Command(rCEvt);
-}
-
-class ColorConfigCtrl_Impl : public VclVBox
+class ColorConfigCtrl_Impl
 {
-    VclPtr<HeaderBar>              m_pHeaderHB;
-    VclPtr<VclHBox>                m_pBody;
-    VclPtr<ColorConfigWindow_Impl> m_pScrollWindow;
-    VclPtr<ScrollBar>              m_pVScroll;
+    std::unique_ptr<weld::ScrolledWindow> m_xVScroll;
+    std::unique_ptr<weld::Container> m_xBody;
+    std::unique_ptr<ColorConfigWindow_Impl> m_xScrollWindow;
 
     EditableColorConfig*            pColorConfig;
     EditableExtendedColorConfig*    pExtColorConfig;
 
-    DECL_LINK(ScrollHdl, ScrollBar*, void);
-    DECL_LINK(ClickHdl, Button*, void);
-    DECL_LINK(ColorHdl, SvxColorListBox&, void);
-    DECL_LINK(ControlFocusHdl, Control&, void);
+    DECL_LINK(ClickHdl, weld::ToggleButton&, void);
+    DECL_LINK(ColorHdl, ColorListBox&, void);
+    DECL_LINK(ControlFocusHdl, weld::Widget&, void);
 
-    virtual bool PreNotify (NotifyEvent& rNEvt) override;
-    virtual void Command (CommandEvent const& rCEvt) override;
-    virtual void DataChanged (DataChangedEvent const& rDCEvt) override;
 public:
-    explicit ColorConfigCtrl_Impl(vcl::Window* pParent);
-    virtual ~ColorConfigCtrl_Impl() override;
-    virtual void dispose() override;
+    explicit ColorConfigCtrl_Impl(weld::Window* pTopLevel, weld::Builder& rbuilder);
 
-    void InitHeaderBar(const OUString &rOn, const OUString &rUIElems,
-        const OUString &rColorSetting);
+    void AdjustExtraWidths(int nTextWidth) { m_xScrollWindow->AdjustExtraWidths(nTextWidth); }
     void SetConfig (EditableColorConfig& rConfig) { pColorConfig = &rConfig; }
     void SetExtendedConfig (EditableExtendedColorConfig& rConfig) { pExtColorConfig = &rConfig; }
-    void Update ();
-    long GetScrollPosition () const
+    void Update();
+    long GetScrollPosition() const
+    {
+        return m_xVScroll->vadjustment_get_value();
+    }
+    void SetScrollPosition(long nSet)
+    {
+        m_xVScroll->vadjustment_set_value(nSet);
+    }
+    weld::Widget& GetWidget1()
     {
-        return m_pVScroll->GetThumbPos();
+        return m_xScrollWindow->GetWidget1();
     }
-    void SetScrollPosition (long nSet)
+    weld::Widget& GetWidget2()
     {
-        m_pVScroll->SetThumbPos(nSet);
-        ScrollHdl(m_pVScroll);
+        return m_xScrollWindow->GetWidget2();
     }
 };
 
-ColorConfigCtrl_Impl::ColorConfigCtrl_Impl(vcl::Window* pParent)
-    : VclVBox(pParent)
+ColorConfigCtrl_Impl::ColorConfigCtrl_Impl(weld::Window* pTopLevel, weld::Builder& rBuilder)
+    : m_xVScroll(rBuilder.weld_scrolled_window("scroll"))
+    , m_xBody(rBuilder.weld_container("colorconfig"))
+    , m_xScrollWindow(std::make_unique<ColorConfigWindow_Impl>(pTopLevel, m_xBody.get()))
     , pColorConfig(nullptr)
     , pExtColorConfig(nullptr)
 {
-    m_pHeaderHB = VclPtr<HeaderBar>::Create(this, WB_BUTTONSTYLE | WB_BOTTOMBORDER);
-
-    m_pBody = VclPtr<VclHBox>::Create(this);
-    m_pScrollWindow = VclPtr<ColorConfigWindow_Impl>::Create(m_pBody);
-    m_pVScroll = VclPtr<ScrollBar>::Create(m_pBody, WB_VERT);
-    m_pScrollWindow->Init(m_pVScroll, m_pHeaderHB);
-
-    m_pBody->set_hexpand(true);
-    m_pBody->set_vexpand(true);
-    m_pBody->set_expand(true);
-    m_pBody->set_fill(true);
-
-    m_pScrollWindow->set_hexpand(true);
-    m_pScrollWindow->set_vexpand(true);
-    m_pScrollWindow->set_expand(true);
-    m_pScrollWindow->set_fill(true);
-
-    Link<ScrollBar*,void> aScrollLink = LINK(this, ColorConfigCtrl_Impl, ScrollHdl);
-    m_pVScroll->SetScrollHdl(aScrollLink);
-    m_pVScroll->SetEndScrollHdl(aScrollLink);
-
-    Link<Button*,void> aCheckLink = LINK(this, ColorConfigCtrl_Impl, ClickHdl);
-    Link<SvxColorListBox&,void> aColorLink = LINK(this, ColorConfigCtrl_Impl, ColorHdl);
-    Link<Control&,void> aGetFocusLink = LINK(this, ColorConfigCtrl_Impl, ControlFocusHdl);
-    m_pScrollWindow->SetLinks(aCheckLink, aColorLink, aGetFocusLink);
-
-    m_pHeaderHB->Show();
-    m_pVScroll->Show();
-    m_pBody->Show();
-    m_pScrollWindow->Show();
-}
+    m_xScrollWindow->Init(m_xVScroll.get());
+    m_xBody->set_stack_background();
 
-void ColorConfigCtrl_Impl::InitHeaderBar(const OUString &rOn, const OUString &rUIElems,
-    const OUString &rColorSetting)
-{
-    // filling
-    const HeaderBarItemBits nHeadBits = HeaderBarItemBits::FIXED | HeaderBarItemBits::FIXEDPOS;
-    m_pHeaderHB->InsertItem(1, rOn, 0, nHeadBits | HeaderBarItemBits::CENTER);
-    m_pHeaderHB->InsertItem(2, rUIElems, 0, nHeadBits | HeaderBarItemBits::LEFT);
-    m_pHeaderHB->InsertItem(3, rColorSetting, 0, nHeadBits | HeaderBarItemBits::LEFT);
-    m_pHeaderHB->set_height_request(GetTextHeight() + 6);
-}
-
-ColorConfigCtrl_Impl::~ColorConfigCtrl_Impl()
-{
-    disposeOnce();
-}
-
-void ColorConfigCtrl_Impl::dispose()
-{
-    m_pVScroll.disposeAndClear();
-    m_pScrollWindow.disposeAndClear();
-    m_pBody.disposeAndClear();
-    m_pHeaderHB.disposeAndClear();
-    VclVBox::dispose();
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void makeColorConfigCtrl(VclPtr<vcl::Window> & rRet, const VclPtr<vcl::Window> & pParent, VclBuilder::stringmap &)
-{
-    static_assert(std::is_same_v<std::remove_pointer_t<VclBuilder::customMakeWidget>,
-                                 decltype(makeColorConfigCtrl)>);
-    rRet = VclPtr<ColorConfigCtrl_Impl>::Create(pParent);
+    Link<weld::ToggleButton&,void> aCheckLink = LINK(this, ColorConfigCtrl_Impl, ClickHdl);
+    Link<ColorListBox&,void> aColorLink = LINK(this, ColorConfigCtrl_Impl, ColorHdl);
+    Link<weld::Widget&,void> const& aGetFocusLink = LINK(this, ColorConfigCtrl_Impl, ControlFocusHdl);
+    m_xScrollWindow->SetLinks(aCheckLink, aColorLink, aGetFocusLink);
 }
 
 void ColorConfigCtrl_Impl::Update ()
 {
     DBG_ASSERT(pColorConfig, "Configuration not set");
-    m_pScrollWindow->Update(pColorConfig, pExtColorConfig);
-}
-
-IMPL_LINK(ColorConfigCtrl_Impl, ScrollHdl, ScrollBar*, pScrollBar, void)
-{
-    m_pScrollWindow->ScrollHdl(*pScrollBar);
-}
-
-bool ColorConfigCtrl_Impl::PreNotify( NotifyEvent& rNEvt )
-{
-    if(rNEvt.GetType() == MouseNotifyEvent::COMMAND)
-    {
-        const CommandEvent* pCEvt = rNEvt.GetCommandEvent();
-        if( pCEvt->GetCommand() == CommandEventId::Wheel )
-        {
-            Command(*pCEvt);
-            return true;
-        }
-    }
-    return VclVBox::PreNotify(rNEvt);
-}
-
-void ColorConfigCtrl_Impl::Command( const CommandEvent& rCEvt )
-{
-    switch ( rCEvt.GetCommand() )
-    {
-
-        case CommandEventId::Wheel:
-        case CommandEventId::StartAutoScroll:
-        case CommandEventId::AutoScroll:
-        {
-            const CommandWheelData* pWheelData = rCEvt.GetWheelData();
-            if(pWheelData && !pWheelData->IsHorz() && CommandWheelMode::ZOOM != pWheelData->GetMode())
-            {
-                HandleScrollCommand(rCEvt, nullptr, m_pVScroll);
-            }
-        }
-        break;
-        default:
-            VclVBox::Command(rCEvt);
-    }
-}
-
-void ColorConfigCtrl_Impl::DataChanged( const DataChangedEvent& rDCEvt )
-{
-    Window::DataChanged( rDCEvt );
-    if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
-         (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
-    {
-        const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
-        SetBackground(Wallpaper(rStyleSettings.GetFieldColor()));
-    }
+    m_xScrollWindow->Update(pColorConfig, pExtColorConfig);
 }
 
-IMPL_LINK(ColorConfigCtrl_Impl, ClickHdl, Button*, pBox, void)
+IMPL_LINK(ColorConfigCtrl_Impl, ClickHdl, weld::ToggleButton&, rBox, void)
 {
     DBG_ASSERT(pColorConfig, "Configuration not set");
-    m_pScrollWindow->ClickHdl(pColorConfig, static_cast<CheckBox*>(pBox));
+    m_xScrollWindow->ClickHdl(pColorConfig, rBox);
 }
 
 // a color list has changed
-IMPL_LINK(ColorConfigCtrl_Impl, ColorHdl, SvxColorListBox&, rBox, void)
+IMPL_LINK(ColorConfigCtrl_Impl, ColorHdl, ColorListBox&, rBox, void)
 {
     DBG_ASSERT(pColorConfig, "Configuration not set" );
-    m_pScrollWindow->ColorHdl(pColorConfig, pExtColorConfig, &rBox);
+    m_xScrollWindow->ColorHdl(pColorConfig, pExtColorConfig, &rBox);
 }
 
-IMPL_LINK(ColorConfigCtrl_Impl, ControlFocusHdl, Control&, rCtrl, void)
+IMPL_LINK(ColorConfigCtrl_Impl, ControlFocusHdl, weld::Widget&, rCtrl, void)
 {
     // determine whether a control is completely visible
     // and make it visible
-    unsigned const nWinHeight = m_pScrollWindow->GetSizePixel().Height();
-    unsigned const nEntryHeight = m_pScrollWindow->GetEntryHeight();
+    unsigned const nWinHeight = m_xVScroll->vadjustment_get_page_size();
 
     // calc visible area
-    long const nScrollOffset = m_pScrollWindow->GetScrollOffset();
-    long nThumbPos = m_pVScroll->GetThumbPos();
-    long const nWinTop = nThumbPos * nScrollOffset;
-    long const nWinBottom = nWinTop + nWinHeight;
-
-    long const nCtrlPosY = rCtrl.GetPosPixel().Y();
-    long const nSelectedItemPos = nCtrlPosY + nEntryHeight;
-    bool const shouldScrollDown = nSelectedItemPos >= nWinBottom;
-    bool const shouldScrollUp = nSelectedItemPos <= nWinTop;
+    auto nThumbPos = m_xVScroll->vadjustment_get_value();
+    int const nWinTop = nThumbPos;
+    int const nWinBottom = nWinTop + nWinHeight;
+
+    int x, nCtrlPosY, width, nHeight;
+    rCtrl.get_extents_relative_to(m_xScrollWindow->GetBody(), x, nCtrlPosY, width, nHeight);
+
+    int const nSelectedItemTop = nCtrlPosY;
+    int const nSelectedItemBottom = nCtrlPosY + nHeight;
+    bool const shouldScrollDown = nSelectedItemBottom >= nWinBottom;
+    bool const shouldScrollUp = nSelectedItemTop <= nWinTop;
     bool const isNeedToScroll = shouldScrollDown || shouldScrollUp || nCtrlPosY < 0;
 
-    if ((GetFocusFlags::Tab & rCtrl.GetGetFocusFlags()) && isNeedToScroll)
+    if (isNeedToScroll)
     {
         if (shouldScrollDown)
         {
-            long nOffset = (nSelectedItemPos - nWinBottom) / nScrollOffset;
+            int nOffset = nSelectedItemBottom - nWinBottom;
             nThumbPos += nOffset + 2;
         }
         else
         {
-            long nOffset = (nWinTop - nSelectedItemPos) / nScrollOffset;
+            int nOffset = nWinTop - nSelectedItemTop;
             nThumbPos -= nOffset + 2;
             if(nThumbPos < 0)
                 nThumbPos = 0;
         }
-        m_pVScroll->SetThumbPos(nThumbPos);
-        ScrollHdl(m_pVScroll);
+        m_xVScroll->vadjustment_set_value(nThumbPos);
     }
-};
-
+}
 
 // SvxColorOptionsTabPage
-
-
-SvxColorOptionsTabPage::SvxColorOptionsTabPage(
-    vcl::Window* pParent, const SfxItemSet& rCoreSet)
-    : SfxTabPage(pParent, "OptAppearancePage", "cui/ui/optappearancepage.ui", &rCoreSet)
+SvxColorOptionsTabPage::SvxColorOptionsTabPage(TabPageParent pParent, const SfxItemSet& rCoreSet)
+    : SfxTabPage(pParent, "cui/ui/optappearancepage.ui", "OptAppearancePage", &rCoreSet)
     , bFillItemSetCalled(false)
-{
-    get(m_pColorSchemeLB, "colorschemelb");
-    m_pColorSchemeLB->SetStyle(m_pColorSchemeLB->GetStyle() | WB_SORT);
-    get(m_pSaveSchemePB, "save");
-    get(m_pDeleteSchemePB, "delete");
-    get(m_pColorConfigCT, "colorconfig");
-
-    m_pColorConfigCT->InitHeaderBar(
-        get<vcl::Window>("on")->GetText(),
-        get<vcl::Window>("uielements")->GetText(),
-        get<vcl::Window>("colorsetting")->GetText());
-
-    m_pColorSchemeLB->SetSelectHdl(LINK(this, SvxColorOptionsTabPage, SchemeChangedHdl_Impl));
-    Link<Button*,void> aLk = LINK(this, SvxColorOptionsTabPage, SaveDeleteHdl_Impl );
-    m_pSaveSchemePB->SetClickHdl(aLk);
-    m_pDeleteSchemePB->SetClickHdl(aLk);
+    , m_xColorSchemeLB(m_xBuilder->weld_combo_box("colorschemelb"))
+    , m_xSaveSchemePB(m_xBuilder->weld_button("save"))
+    , m_xDeleteSchemePB(m_xBuilder->weld_button("delete"))
+    , m_xColorConfigCT(new ColorConfigCtrl_Impl(pParent.GetFrameWeld(), *m_xBuilder))
+    , m_xTable(m_xBuilder->weld_widget("table"))
+    , m_xOnFT(m_xBuilder->weld_label("on"))
+    , m_xElementFT(m_xBuilder->weld_label("uielements"))
+    , m_xColorFT(m_xBuilder->weld_label("colorsetting"))
+    , m_rWidget1(m_xColorConfigCT->GetWidget1())
+    , m_rWidget2(m_xColorConfigCT->GetWidget2())
+{
+    m_xColorSchemeLB->make_sorted();
+    m_xColorSchemeLB->connect_changed(LINK(this, SvxColorOptionsTabPage, SchemeChangedHdl_Impl));
+    Link<weld::Button&,void> aLk = LINK(this, SvxColorOptionsTabPage, SaveDeleteHdl_Impl );
+    m_xSaveSchemePB->connect_clicked(aLk);
+    m_xDeleteSchemePB->connect_clicked(aLk);
+
+    m_rWidget1.connect_size_allocate(LINK(this, SvxColorOptionsTabPage, AdjustHeaderBar));
+    m_rWidget2.connect_size_allocate(LINK(this, SvxColorOptionsTabPage, AdjustHeaderBar));
 }
 
 SvxColorOptionsTabPage::~SvxColorOptionsTabPage()
@@ -1011,9 +728,9 @@ void SvxColorOptionsTabPage::dispose()
     {
         //when the dialog is cancelled but the color scheme ListBox has been changed these
         //changes need to be undone
-        if(!bFillItemSetCalled && m_pColorSchemeLB->IsValueChangedFromSaved())
+        if (!bFillItemSetCalled && m_xColorSchemeLB->get_value_changed_from_saved())
         {
-            OUString sOldScheme =  m_pColorSchemeLB->GetEntry(m_pColorSchemeLB->GetSavedValue());
+            OUString sOldScheme = m_xColorSchemeLB->get_saved_value();
             if(!sOldScheme.isEmpty())
             {
                 pColorConfig->SetCurrentSchemeName(sOldScheme);
@@ -1028,29 +745,26 @@ void SvxColorOptionsTabPage::dispose()
         pExtColorConfig->EnableBroadcast();
         pExtColorConfig.reset();
     }
-    m_pColorSchemeLB.clear();
-    m_pSaveSchemePB.clear();
-    m_pDeleteSchemePB.clear();
-    m_pColorConfigCT.clear();
+    m_xColorConfigCT.reset();
     SfxTabPage::dispose();
 }
 
-VclPtr<SfxTabPage> SvxColorOptionsTabPage::Create( TabPageParent pParent, const SfxItemSet* rAttrSet )
+VclPtr<SfxTabPage> SvxColorOptionsTabPage::Create(TabPageParent pParent, const SfxItemSet* rAttrSet)
 {
-    return VclPtr<SvxColorOptionsTabPage>::Create( pParent.pParent, *rAttrSet );
+    return VclPtr<SvxColorOptionsTabPage>::Create(pParent, *rAttrSet);
 }
 
 bool SvxColorOptionsTabPage::FillItemSet( SfxItemSet*  )
 {
     bFillItemSetCalled = true;
-    if(m_pColorSchemeLB->IsValueChangedFromSaved())
+    if (m_xColorSchemeLB->get_value_changed_from_saved())
     {
         pColorConfig->SetModified();
         pExtColorConfig->SetModified();
     }
-    if(pColorConfig->IsModified())
+    if (pColorConfig->IsModified())
         pColorConfig->Commit();
-    if(pExtColorConfig->IsModified())
+    if (pExtColorConfig->IsModified())
         pExtColorConfig->Commit();
     return true;
 }
@@ -1063,7 +777,7 @@ void SvxColorOptionsTabPage::Reset( const SfxItemSet* )
         pColorConfig->DisableBroadcast();
     }
     pColorConfig.reset(new EditableColorConfig);
-    m_pColorConfigCT->SetConfig(*pColorConfig);
+    m_xColorConfigCT->SetConfig(*pColorConfig);
 
     if(pExtColorConfig)
     {
@@ -1071,19 +785,19 @@ void SvxColorOptionsTabPage::Reset( const SfxItemSet* )
         pExtColorConfig->DisableBroadcast();
     }
     pExtColorConfig.reset(new EditableExtendedColorConfig);
-    m_pColorConfigCT->SetExtendedConfig(*pExtColorConfig);
+    m_xColorConfigCT->SetExtendedConfig(*pExtColorConfig);
 
     OUString sUser = GetUserData();
     //has to be called always to speed up accessibility tools
-    m_pColorConfigCT->SetScrollPosition(sUser.toInt32());
-    m_pColorSchemeLB->Clear();
+    m_xColorConfigCT->SetScrollPosition(sUser.toInt32());
+    m_xColorSchemeLB->clear();
     uno::Sequence< OUString >  aSchemes = pColorConfig->GetSchemeNames();
     const OUString* pSchemes = aSchemes.getConstArray();
     for(sal_Int32 i = 0; i < aSchemes.getLength(); i++)
-        m_pColorSchemeLB->InsertEntry(pSchemes[i]);
-    m_pColorSchemeLB->SelectEntry(pColorConfig->GetCurrentSchemeName());
-    m_pColorSchemeLB->SaveValue();
-    m_pDeleteSchemePB->Enable( aSchemes.getLength() > 1 );
+        m_xColorSchemeLB->append_text(pSchemes[i]);
+    m_xColorSchemeLB->set_active_text(pColorConfig->GetCurrentSchemeName());
+    m_xColorSchemeLB->save_value();
+    m_xDeleteSchemePB->set_sensitive( aSchemes.getLength() > 1 );
     UpdateColorConfig();
 }
 
@@ -1097,24 +811,24 @@ DeactivateRC SvxColorOptionsTabPage::DeactivatePage( SfxItemSet* pSet_ )
 void SvxColorOptionsTabPage::UpdateColorConfig()
 {
     //update the color config control
-    m_pColorConfigCT->Update();
+    m_xColorConfigCT->Update();
 }
 
-IMPL_LINK(SvxColorOptionsTabPage, SchemeChangedHdl_Impl, ListBox&, rBox, void)
+IMPL_LINK(SvxColorOptionsTabPage, SchemeChangedHdl_Impl, weld::ComboBox&, rBox, void)
 {
-    pColorConfig->LoadScheme(rBox.GetSelectedEntry());
-    pExtColorConfig->LoadScheme(rBox.GetSelectedEntry());
+    pColorConfig->LoadScheme(rBox.get_active_text());
+    pExtColorConfig->LoadScheme(rBox.get_active_text());
     UpdateColorConfig();
 }
 
-IMPL_LINK(SvxColorOptionsTabPage, SaveDeleteHdl_Impl, Button*, pButton, void )
+IMPL_LINK(SvxColorOptionsTabPage, SaveDeleteHdl_Impl, weld::Button&, rButton, void)
 {
-    if (m_pSaveSchemePB == pButton)
+    if (m_xSaveSchemePB.get() == &rButton)
     {
         OUString sName;
 
         SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
-        ScopedVclPtr<AbstractSvxNameDialog> aNameDlg(pFact->CreateSvxNameDialog(pButton->GetFrameWeld(),
+        ScopedVclPtr<AbstractSvxNameDialog> aNameDlg(pFact->CreateSvxNameDialog(GetDialogFrameWeld(),
                             sName, CuiResId(RID_SVXSTR_COLOR_CONFIG_SAVE2) ));
         aNameDlg->SetCheckNameHdl( LINK(this, SvxColorOptionsTabPage, CheckNameHdl_Impl));
         aNameDlg->SetText(CuiResId(RID_SVXSTR_COLOR_CONFIG_SAVE1));
@@ -1125,42 +839,55 @@ IMPL_LINK(SvxColorOptionsTabPage, SaveDeleteHdl_Impl, Button*, pButton, void )
             aNameDlg->GetName(sName);
             pColorConfig->AddScheme(sName);
             pExtColorConfig->AddScheme(sName);
-            m_pColorSchemeLB->InsertEntry(sName);
-            m_pColorSchemeLB->SelectEntry(sName);
-            m_pColorSchemeLB->GetSelectHdl().Call(*m_pColorSchemeLB);
+            m_xColorSchemeLB->append_text(sName);
+            m_xColorSchemeLB->set_active_text(sName);
+            SchemeChangedHdl_Impl(*m_xColorSchemeLB);
         }
     }
     else
     {
-        DBG_ASSERT(m_pColorSchemeLB->GetEntryCount() > 1, "don't delete the last scheme");
-        std::unique_ptr<weld::MessageDialog> xQuery(Application::CreateMessageDialog(pButton->GetFrameWeld(),
+        DBG_ASSERT(m_xColorSchemeLB->get_count() > 1, "don't delete the last scheme");
+        std::unique_ptr<weld::MessageDialog> xQuery(Application::CreateMessageDialog(GetDialogFrameWeld(),
                                                     VclMessageType::Question, VclButtonsType::YesNo,
                                                     CuiResId(RID_SVXSTR_COLOR_CONFIG_DELETE)));
         xQuery->set_title(CuiResId(RID_SVXSTR_COLOR_CONFIG_DELETE_TITLE));
         if (RET_YES == xQuery->run())
         {
-            OUString sDeleteScheme(m_pColorSchemeLB->GetSelectedEntry());
-            m_pColorSchemeLB->RemoveEntry(m_pColorSchemeLB->GetSelectedEntryPos());
-            m_pColorSchemeLB->SelectEntryPos(0);
-            m_pColorSchemeLB->GetSelectHdl().Call(*m_pColorSchemeLB);
+            OUString sDeleteScheme(m_xColorSchemeLB->get_active_text());
+            m_xColorSchemeLB->remove(m_xColorSchemeLB->get_active());
+            m_xColorSchemeLB->set_active(0);
+            SchemeChangedHdl_Impl(*m_xColorSchemeLB);
             //first select the new scheme and then delete the old one
             pColorConfig->DeleteScheme(sDeleteScheme);
             pExtColorConfig->DeleteScheme(sDeleteScheme);
         }
     }
-    m_pDeleteSchemePB->Enable( m_pColorSchemeLB->GetEntryCount() > 1 );
+    m_xDeleteSchemePB->set_sensitive(m_xColorSchemeLB->get_count() > 1);
 }
 
 IMPL_LINK(SvxColorOptionsTabPage, CheckNameHdl_Impl, AbstractSvxNameDialog&, rDialog, bool )
 {
     OUString sName;
     rDialog.GetName(sName);
-    return !sName.isEmpty() && LISTBOX_ENTRY_NOTFOUND == m_pColorSchemeLB->GetEntryPos( sName );
+    return !sName.isEmpty() && m_xColorSchemeLB->find_text(sName) == -1;
 }
 
 void SvxColorOptionsTabPage::FillUserData()
 {
-    SetUserData(OUString::number(m_pColorConfigCT->GetScrollPosition()));
+    SetUserData(OUString::number(m_xColorConfigCT->GetScrollPosition()));
+}
+
+IMPL_LINK_NOARG(SvxColorOptionsTabPage, AdjustHeaderBar, const Size&, void)
+{
+    // horizontal positions
+    int nX0 = 0, nX1, nX2, y, width, height;
+    m_rWidget1.get_extents_relative_to(*m_xTable, nX1, y, width, height);
+    m_rWidget2.get_extents_relative_to(*m_xTable, nX2, y, width, height);
+    auto nTextWidth1 = nX1 - nX0;
+    auto nTextWidth2 = nX2 - nX1;
+    m_xOnFT->set_size_request(nTextWidth1, -1);
+    m_xElementFT->set_size_request(nTextWidth2, -1);
+    m_xColorConfigCT->AdjustExtraWidths(nTextWidth2 - 12);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/options/optcolor.hxx b/cui/source/options/optcolor.hxx
index adb0c5c08cd3..497a4f4060e8 100644
--- a/cui/source/options/optcolor.hxx
+++ b/cui/source/options/optcolor.hxx
@@ -20,7 +20,6 @@
 #define INCLUDED_CUI_SOURCE_OPTIONS_OPTCOLOR_HXX
 
 #include <sfx2/tabdlg.hxx>
-#include <vcl/lstbox.hxx>
 
 namespace svtools {class EditableColorConfig;class EditableExtendedColorConfig;}
 class ColorConfigCtrl_Impl;
@@ -29,25 +28,32 @@ class SvxColorOptionsTabPage : public SfxTabPage
 {
     using SfxTabPage::DeactivatePage;
 
-    VclPtr<ListBox> m_pColorSchemeLB;
-    VclPtr<PushButton> m_pSaveSchemePB;
-    VclPtr<PushButton> m_pDeleteSchemePB;
-    VclPtr<ColorConfigCtrl_Impl> m_pColorConfigCT;
-
     bool bFillItemSetCalled;
 
+    std::unique_ptr<weld::ComboBox> m_xColorSchemeLB;
+    std::unique_ptr<weld::Button> m_xSaveSchemePB;
+    std::unique_ptr<weld::Button> m_xDeleteSchemePB;
+    std::unique_ptr<ColorConfigCtrl_Impl> m_xColorConfigCT;
+    std::unique_ptr<weld::Widget> m_xTable;
+    std::unique_ptr<weld::Label> m_xOnFT;
+    std::unique_ptr<weld::Label> m_xElementFT;
+    std::unique_ptr<weld::Label> m_xColorFT;
+    weld::Widget& m_rWidget1;
+    weld::Widget& m_rWidget2;
+
     std::unique_ptr<svtools::EditableColorConfig> pColorConfig;
     std::unique_ptr<svtools::EditableExtendedColorConfig> pExtColorConfig;
 
-    DECL_LINK(SchemeChangedHdl_Impl, ListBox&, void);
-    DECL_LINK(SaveDeleteHdl_Impl, Button*, void);
+    DECL_LINK(SchemeChangedHdl_Impl, weld::ComboBox&, void);
+    DECL_LINK(SaveDeleteHdl_Impl, weld::Button&, void);
     DECL_LINK(CheckNameHdl_Impl, AbstractSvxNameDialog&, bool);
+    DECL_LINK(AdjustHeaderBar, const Size&, void);
     void UpdateColorConfig();
 
 public:
-    SvxColorOptionsTabPage( vcl::Window* pParent, const SfxItemSet& rSet );
-    virtual ~SvxColorOptionsTabPage(  ) override;
-    virtual void        dispose() override;
+    SvxColorOptionsTabPage(TabPageParent pParent, const SfxItemSet& rSet);
+    virtual void dispose() override;
+    virtual ~SvxColorOptionsTabPage() override;
 
     static VclPtr<SfxTabPage>  Create( TabPageParent pParent, const SfxItemSet* rAttrSet );
 
@@ -56,7 +62,6 @@ public:
 
     virtual DeactivateRC   DeactivatePage( SfxItemSet* pSet ) override;
     virtual void        FillUserData() override;
-
 };
 
 #endif
diff --git a/cui/uiconfig/ui/chapterfragment.ui b/cui/uiconfig/ui/chapterfragment.ui
new file mode 100644
index 000000000000..26527cbf1075
--- /dev/null
+++ b/cui/uiconfig/ui/chapterfragment.ui
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface domain="cui">
+  <requires lib="gtk+" version="3.18"/>
+  <object class="GtkGrid" id="ChapterFragment">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="row_spacing">6</property>
+    <property name="column_spacing">12</property>
+    <property name="row_homogeneous">True</property>
+    <child>
+      <object class="GtkLabel" id="chapter">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="xalign">0</property>
+        <attributes>
+          <attribute name="weight" value="bold"/>
+        </attributes>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">0</property>
+        <property name="width">3</property>
+      </packing>
+    </child>
+  </object>
+</interface>
diff --git a/cui/uiconfig/ui/colorconfigwin.ui b/cui/uiconfig/ui/colorconfigwin.ui
index a41c50691cbd..cc03f8ccca96 100644
--- a/cui/uiconfig/ui/colorconfigwin.ui
+++ b/cui/uiconfig/ui/colorconfigwin.ui
@@ -2,7 +2,6 @@
 <!-- Generated with glade 3.18.3 -->
 <interface domain="cui">
   <requires lib="gtk+" version="3.18"/>
-  <requires lib="LibreOffice" version="1.0"/>
   <object class="GtkGrid" id="ColorConfigWindow">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -39,9 +38,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="doccolor_lb">
+      <object class="GtkMenuButton" id="doccolor_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -49,9 +55,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="docboundaries_lb">
+      <object class="GtkMenuButton" id="docboundaries_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -75,9 +88,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="appback_lb">
+      <object class="GtkMenuButton" id="appback_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -114,9 +134,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="objboundaries_lb">
+      <object class="GtkMenuButton" id="objboundaries_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -140,9 +167,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="tblboundaries_lb">
+      <object class="GtkMenuButton" id="tblboundaries_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -163,9 +197,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="font_lb">
+      <object class="GtkMenuButton" id="font_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -189,9 +230,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="unvisitedlinks_lb">
+      <object class="GtkMenuButton" id="unvisitedlinks_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -215,9 +263,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="visitedlinks_lb">
+      <object class="GtkMenuButton" id="visitedlinks_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -251,9 +306,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="autospellcheck_lb">
+      <object class="GtkMenuButton" id="autospellcheck_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -261,9 +323,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="shadows_lb">
+      <object class="GtkMenuButton" id="shadows_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -271,9 +340,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="smarttags_lb">
+      <object class="GtkMenuButton" id="smarttags_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -297,9 +373,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="writergrid_lb">
+      <object class="GtkMenuButton" id="writergrid_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -320,9 +403,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="field_lb">
+      <object class="GtkMenuButton" id="field_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -330,9 +420,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="index_lb">
+      <object class="GtkMenuButton" id="index_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -340,9 +437,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="script_lb">
+      <object class="GtkMenuButton" id="script_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -411,9 +515,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="section_lb">
+      <object class="GtkMenuButton" id="section_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -421,9 +532,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="hdft_lb">
+      <object class="GtkMenuButton" id="hdft_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -444,9 +562,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="pagebreak_lb">
+      <object class="GtkMenuButton" id="pagebreak_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -467,9 +592,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="direct_lb">
+      <object class="GtkMenuButton" id="direct_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -506,9 +638,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="sgml_lb">
+      <object class="GtkMenuButton" id="sgml_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -529,9 +668,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="htmlcomment_lb">
+      <object class="GtkMenuButton" id="htmlcomment_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -552,9 +698,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="htmlkeyword_lb">
+      <object class="GtkMenuButton" id="htmlkeyword_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -575,9 +728,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="unknown_lb">
+      <object class="GtkMenuButton" id="unknown_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -614,9 +774,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="calcgrid_lb">
+      <object class="GtkMenuButton" id="calcgrid_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -637,9 +804,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="brk_lb">
+      <object class="GtkMenuButton" id="brk_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -660,9 +834,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="brkmanual_lb">
+      <object class="GtkMenuButton" id="brkmanual_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -683,9 +864,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="brkauto_lb">
+      <object class="GtkMenuButton" id="brkauto_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -706,9 +894,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="det_lb">
+      <object class="GtkMenuButton" id="det_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -729,9 +924,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="deterror_lb">
+      <object class="GtkMenuButton" id="deterror_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -752,9 +954,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="ref_lb">
+      <object class="GtkMenuButton" id="ref_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -775,9 +984,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="notes_lb">
+      <object class="GtkMenuButton" id="notes_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -798,9 +1014,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="values_lb">
+      <object class="GtkMenuButton" id="values_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -821,9 +1044,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="formulas_lb">
+      <object class="GtkMenuButton" id="formulas_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -844,9 +1074,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="text_lb">
+      <object class="GtkMenuButton" id="text_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -867,9 +1104,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="protectedcells_lb">
+      <object class="GtkMenuButton" id="protectedcells_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -906,9 +1150,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="drawgrid_lb">
+      <object class="GtkMenuButton" id="drawgrid_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -945,9 +1196,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="basicid_lb">
+      <object class="GtkMenuButton" id="basicid_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -968,9 +1226,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="basiccomment_lb">
+      <object class="GtkMenuButton" id="basiccomment_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -991,9 +1256,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="basicnumber_lb">
+      <object class="GtkMenuButton" id="basicnumber_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -1014,9 +1286,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="basicstring_lb">
+      <object class="GtkMenuButton" id="basicstring_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -1037,9 +1316,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="basicop_lb">
+      <object class="GtkMenuButton" id="basicop_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -1060,9 +1346,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="basickeyword_lb">
+      <object class="GtkMenuButton" id="basickeyword_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -1083,9 +1376,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="error_lb">
+      <object class="GtkMenuButton" id="error_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -1122,9 +1422,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="sqlid_lb">
+      <object class="GtkMenuButton" id="sqlid_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -1145,9 +1452,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="sqlnumber_lb">
+      <object class="GtkMenuButton" id="sqlnumber_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -1168,9 +1482,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="sqlstring_lb">
+      <object class="GtkMenuButton" id="sqlstring_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -1191,9 +1512,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="sqlop_lb">
+      <object class="GtkMenuButton" id="sqlop_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -1214,9 +1542,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="sqlkeyword_lb">
+      <object class="GtkMenuButton" id="sqlkeyword_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -1237,9 +1572,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="sqlparam_lb">
+      <object class="GtkMenuButton" id="sqlparam_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
@@ -1260,9 +1602,16 @@
       </packing>
     </child>
     <child>
-      <object class="svxcorelo-SvxColorListBox" id="sqlcomment_lb">
+      <object class="GtkMenuButton" id="sqlcomment_lb">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
       </object>
       <packing>
         <property name="left_attach">1</property>
diff --git a/cui/uiconfig/ui/colorfragment.ui b/cui/uiconfig/ui/colorfragment.ui
new file mode 100644
index 000000000000..51db7dc3fbe6
--- /dev/null
+++ b/cui/uiconfig/ui/colorfragment.ui
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface domain="cui">
+  <requires lib="gtk+" version="3.18"/>
+  <object class="GtkGrid" id="ColorFragment">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="row_spacing">6</property>
+    <property name="column_spacing">12</property>
+    <property name="row_homogeneous">True</property>
+    <child>
+      <object class="GtkLabel" id="label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_left">6</property>
+        <property name="use_underline">True</property>
+        <property name="mnemonic_widget">button</property>
+        <property name="xalign">0</property>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkMenuButton" id="button">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">False</property>
+        <property name="xalign">0</property>
+        <property name="draw_indicator">True</property>
+        <property name="label" translatable="no"></property>
+        <child>
+          <placeholder/>
+        </child>
+      </object>
+      <packing>
+        <property name="left_attach">1</property>
+        <property name="top_attach">0</property>
+      </packing>
+    </child>
+    <child>
+      <placeholder/>
+    </child>
+  </object>
+</interface>
diff --git a/cui/uiconfig/ui/optappearancepage.ui b/cui/uiconfig/ui/optappearancepage.ui
index 60f3b90344de..30276417b96e 100644
--- a/cui/uiconfig/ui/optappearancepage.ui
+++ b/cui/uiconfig/ui/optappearancepage.ui
@@ -1,10 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.0 -->
+<!-- Generated with glade 3.22.1 -->
 <interface domain="cui">
   <requires lib="gtk+" version="3.18"/>
   <object class="GtkBox" id="OptAppearancePage">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
+    <property name="hexpand">True</property>
+    <property name="vexpand">True</property>
     <property name="border_width">6</property>
     <property name="orientation">vertical</property>
     <property name="spacing">12</property>
@@ -116,22 +118,98 @@
             <property name="top_padding">6</property>
             <property name="left_padding">12</property>
             <child>
-              <object class="GtkGrid" id="grid2">
+              <object class="GtkGrid" id="table">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="hexpand">True</property>
                 <property name="vexpand">True</property>
                 <child>
+                  <object class="GtkBox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="hexpand">True</property>
+                    <property name="vexpand">True</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkScrolledWindow" id="scroll">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hexpand">True</property>
+                        <property name="vexpand">True</property>
+                        <property name="hscrollbar_policy">never</property>
+                        <property name="vscrollbar_policy">always</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <object class="GtkViewport">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="hexpand">True</property>
+                            <property name="vexpand">True</property>
+                            <child>
+                              <object class="GtkGrid" id="colorconfig">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="hexpand">True</property>
+                                <property name="vexpand">True</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                  </packing>
+                </child>
+                <child>
                   <object class="GtkGrid" id="grid3">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="hexpand">True</property>
+                    <property name="column_spacing">6</property>
                     <child>
                       <object class="GtkLabel" id="uielements">
                         <property name="width_request">250</property>
+                        <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="no_show_all">True</property>
                         <property name="label" translatable="yes" context="optappearancepage|uielements">User interface elements</property>
+                        <property name="xalign">0</property>
                       </object>
                       <packing>
                         <property name="left_attach">1</property>
@@ -141,9 +219,12 @@
                     <child>
                       <object class="GtkLabel" id="colorsetting">
                         <property name="width_request">150</property>
+                        <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="no_show_all">True</property>
+                        <property name="hexpand">True</property>
                         <property name="label" translatable="yes" context="optappearancepage|colorsetting">Color setting</property>
+                        <property name="xalign">0</property>
                       </object>
                       <packing>
                         <property name="left_attach">2</property>
@@ -152,6 +233,7 @@
                     </child>
                     <child>
                       <object class="GtkLabel" id="on">
+                        <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="no_show_all">True</property>
                         <property name="label" translatable="yes" context="optappearancepage|on">On</property>
@@ -167,18 +249,6 @@
                     <property name="top_attach">0</property>
                   </packing>
                 </child>
-                <child>
-                  <object class="cuilo-ColorConfigCtrl" id="colorconfig">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="hexpand">True</property>
-                    <property name="vexpand">True</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">1</property>
-                  </packing>
-                </child>
               </object>
             </child>
           </object>
diff --git a/extras/source/glade/libreoffice-catalog.xml.in b/extras/source/glade/libreoffice-catalog.xml.in
index 59c631ecbe1b..3bdad8e86e12 100644
--- a/extras/source/glade/libreoffice-catalog.xml.in
+++ b/extras/source/glade/libreoffice-catalog.xml.in
@@ -284,9 +284,6 @@
     <glade-widget-class title="Category ListBox" name="sdlo-CategoryListBox"
                         generic-name="Category ListBox" parent="GtkTreeView"
                         icon-name="widget-gtk-treeview"/>
-    <glade-widget-class title="Color Config Control" name="cuilo-ColorConfigCtrl"
-                        generic-name="ColorConfigCtrl" parent="GtkBox"
-                        icon-name="widget-gtk-box"/>
     <glade-widget-class title="NotebookBar Toolbar Addons" name="NotebookBarAddonsToolMergePoint"
                         generic-name="ShowText" parent="GtkToolButton"
                         icon-name="widget-gtk-toolbutton"/>
diff --git a/include/svx/colorbox.hxx b/include/svx/colorbox.hxx
index 26c6bc1fc1bb..bb6af59ae15b 100644
--- a/include/svx/colorbox.hxx
+++ b/include/svx/colorbox.hxx
@@ -138,6 +138,7 @@ public:
     void hide() { m_xButton->hide(); }
     void set_visible(bool bShow) { m_xButton->set_visible(bShow); }
     void set_help_id(const OString& rHelpId) { m_xButton->set_help_id(rHelpId); }
+    void connect_focus_in(const Link<weld::Widget&, void>& rLink) { m_xButton->connect_focus_in(rLink); }
     weld::MenuButton& get_widget() { return *m_xButton; }
 };
 
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index d3fd087333df..8fd763e434ac 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -134,6 +134,13 @@ public:
 
     virtual void set_margin_top(int nMargin) = 0;
     virtual void set_margin_bottom(int nMargin) = 0;
+    virtual void set_margin_left(int nMargin) = 0;
+    virtual void set_margin_right(int nMargin) = 0;
+
+    virtual int get_margin_top() const = 0;
+    virtual int get_margin_bottom() const = 0;
+    virtual int get_margin_left() const = 0;
+    virtual int get_margin_right() const = 0;
 
     virtual bool get_extents_relative_to(Widget& rRelative, int& x, int& y, int& width, int& height)
         = 0;
diff --git a/solenv/bin/native-code.py b/solenv/bin/native-code.py
index a92847510bb5..5aabe03d2e76 100755
--- a/solenv/bin/native-code.py
+++ b/solenv/bin/native-code.py
@@ -463,7 +463,6 @@ constructor_map = {
 custom_widgets = [
     'BookmarksBox',
     'CategoryListBox',
-    'ColorConfigCtrl',
     'ColumnEdit',
     'ContentListBox',
     'ContextVBox',

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list