tdf#129134 ApplicationColors Scrolled List moves too little

Change-Id: I5cb6ac017f1d2a916297676724d523634afb2020
Reviewed-on: https://gerrit.libreoffice.org/84254
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/cui/source/options/optcolor.cxx b/cui/source/options/optcolor.cxx
index 56e75fe..b0e11d5 100644
--- a/cui/source/options/optcolor.cxx
+++ b/cui/source/options/optcolor.cxx
@@ -171,7 +171,8 @@ public:
public:
    void SetLinks(Link<weld::ToggleButton&,void> const&,
                  Link<ColorListBox&,void> const&,
                  Link<weld::Widget&,void> const&);
                  Link<weld::Widget&,void> const&,
                  weld::ScrolledWindow& rScroll);
    void Update(EditableColorConfig const*, EditableExtendedColorConfig const*);
    void ClickHdl(EditableColorConfig*, weld::ToggleButton&);
    void ColorHdl(EditableColorConfig*, EditableExtendedColorConfig*, const ColorListBox*);
@@ -214,6 +215,11 @@ private:
    public:
        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); }
        int get_height_request() const
        {
            return std::max(m_xText->get_preferred_size().Height(),
                            m_xColorList->get_widget().get_preferred_size().Height());
        }
        void Hide ();
    public:
        void SetLinks(Link<weld::ToggleButton&,void> const&,
@@ -458,10 +464,15 @@ void ColorConfigWindow_Impl::AdjustExtraWidths(int nTextWidth)
// SetLinks()
void ColorConfigWindow_Impl::SetLinks(Link<weld::ToggleButton&,void> const& aCheckLink,
                                      Link<ColorListBox&,void> const& aColorLink,
                                      Link<weld::Widget&,void> const& rGetFocusLink)
                                      Link<weld::Widget&,void> const& rGetFocusLink,
                                      weld::ScrolledWindow& rScroll)
{
    if (vEntries.empty())
        return;
    for (auto const & i: vEntries)
        i->SetLinks(aCheckLink, aColorLink, rGetFocusLink);
    // 6 is the spacing set on ColorConfigWindow
    rScroll.vadjustment_set_step_increment(vEntries[0]->get_height_request() + 6);
}

// Update()
@@ -622,7 +633,7 @@ ColorConfigCtrl_Impl::ColorConfigCtrl_Impl(weld::Window* pTopLevel, weld::Builde
    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);
    m_xScrollWindow->SetLinks(aCheckLink, aColorLink, aGetFocusLink, *m_xVScroll);
}

void ColorConfigCtrl_Impl::Update ()
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index abe71e4..940b2b0 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -297,6 +297,7 @@ public:
    virtual int hadjustment_get_page_size() const = 0;
    virtual void hadjustment_set_page_size(int size) = 0;
    virtual void hadjustment_set_page_increment(int size) = 0;
    virtual void hadjustment_set_step_increment(int size) = 0;
    virtual void set_hpolicy(VclPolicyType eHPolicy) = 0;
    virtual VclPolicyType get_hpolicy() const = 0;
    void connect_hadjustment_changed(const Link<ScrolledWindow&, void>& rLink)
@@ -315,6 +316,7 @@ public:
    virtual int vadjustment_get_page_size() const = 0;
    virtual void vadjustment_set_page_size(int size) = 0;
    virtual void vadjustment_set_page_increment(int size) = 0;
    virtual void vadjustment_set_step_increment(int size) = 0;
    virtual int vadjustment_get_lower() const = 0;
    virtual void vadjustment_set_lower(int upper) = 0;
    virtual void set_vpolicy(VclPolicyType eVPolicy) = 0;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index de9b7a8..d340fad 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -2067,6 +2067,12 @@ public:
        return rHorzScrollBar.SetPageSize(size);
    }

    virtual void hadjustment_set_step_increment(int size) override
    {
        ScrollBar& rHorzScrollBar = m_xScrolledWindow->getHorzScrollBar();
        return rHorzScrollBar.SetLineSize(size);
    }

    virtual void set_hpolicy(VclPolicyType eHPolicy) override
    {
        WinBits nWinBits = m_xScrolledWindow->GetStyle() & ~(WB_AUTOHSCROLL|WB_HSCROLL);
@@ -2162,6 +2168,12 @@ public:
        return rVertScrollBar.SetPageSize(size);
    }

    virtual void vadjustment_set_step_increment(int size) override
    {
        ScrollBar& rVertScrollBar = m_xScrolledWindow->getVertScrollBar();
        return rVertScrollBar.SetLineSize(size);
    }

    virtual void set_vpolicy(VclPolicyType eVPolicy) override
    {
        WinBits nWinBits = m_xScrolledWindow->GetStyle() & ~(WB_AUTOVSCROLL|WB_VSCROLL);
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 643502e..4edb502 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -5200,6 +5200,11 @@ public:
        gtk_adjustment_set_page_increment(m_pHAdjustment, size);
    }

    virtual void hadjustment_set_step_increment(int size) override
    {
        gtk_adjustment_set_step_increment(m_pHAdjustment, size);
    }

    virtual void set_hpolicy(VclPolicyType eHPolicy) override
    {
        GtkPolicyType eGtkVPolicy;
@@ -5281,6 +5286,11 @@ public:
        gtk_adjustment_set_page_increment(m_pVAdjustment, size);
    }

    virtual void vadjustment_set_step_increment(int size) override
    {
        gtk_adjustment_set_step_increment(m_pVAdjustment, size);
    }

    virtual void set_vpolicy(VclPolicyType eVPolicy) override
    {
        GtkPolicyType eGtkHPolicy;