tdf#135042 update scrolledwindow vadjustment when resized

Change-Id: I94408845b82c7202f74360168c66c4439e985124
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102271
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/svtools/source/control/valueset.cxx b/svtools/source/control/valueset.cxx
index 280d8ea..a995881 100644
--- a/svtools/source/control/valueset.cxx
+++ b/svtools/source/control/valueset.cxx
@@ -921,11 +921,16 @@ void ValueSet::Format(vcl::RenderContext const & rRenderContext)
    // calculate number of rows
    mbScroll = false;

    auto nOldLines = mnLines;
    // Floor( (M+N-1)/N )==Ceiling( M/N )
    mnLines = (static_cast<long>(nItemCount) + mnCols - 1) / mnCols;
    if (mnLines <= 0)
        mnLines = 1;

    bool bAdjustmentOutOfDate = nOldLines != mnLines;

    auto nOldVisLines = mnVisLines;

    long nCalcHeight = aWinSize.Height() - nNoneHeight;
    if (mnUserVisLines)
    {
@@ -942,6 +947,8 @@ void ValueSet::Format(vcl::RenderContext const & rRenderContext)
        mnVisLines = mnLines;
    }

    bAdjustmentOutOfDate |= nOldVisLines != mnVisLines;

    if (mnLines > mnVisLines)
        mbScroll = true;

@@ -1144,16 +1151,24 @@ void ValueSet::Format(vcl::RenderContext const & rRenderContext)
        }

        // arrange ScrollBar, set values and show it
        if (mxScrolledWindow && (nStyle & WB_VSCROLL) && mxScrolledWindow->get_vpolicy() != VclPolicyType::ALWAYS)
        if (mxScrolledWindow && (nStyle & WB_VSCROLL))
        {
            long nPageSize = mnVisLines;
            if (nPageSize < 1)
                nPageSize = 1;
            mxScrolledWindow->vadjustment_configure(mnFirstLine, 0, mnLines, 1,
                                                    mnVisLines, nPageSize);
            mxScrolledWindow->set_vpolicy(VclPolicyType::ALWAYS);
            Size aPrefSize(GetDrawingArea()->get_preferred_size());
            GetDrawingArea()->set_size_request(aPrefSize.Width() - GetScrollWidth(), aPrefSize.Height());
            bool bTurnScrollbarOn = mxScrolledWindow->get_vpolicy() != VclPolicyType::ALWAYS;
            if (bAdjustmentOutOfDate || bTurnScrollbarOn)
            {
                long nPageSize = mnVisLines;
                if (nPageSize < 1)
                    nPageSize = 1;
                mxScrolledWindow->vadjustment_configure(mnFirstLine, 0, mnLines, 1,
                                                        mnVisLines, nPageSize);
            }

            if (bTurnScrollbarOn)
            {
                mxScrolledWindow->set_vpolicy(VclPolicyType::ALWAYS);
                Size aPrefSize(GetDrawingArea()->get_preferred_size());
                GetDrawingArea()->set_size_request(aPrefSize.Width() - GetScrollWidth(), aPrefSize.Height());
            }
        }
    }