From ebfd1c859f9da4318999a145d6af0fd33372dc6b Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Tue, 8 Sep 2020 17:21:40 +0100 Subject: tdf#135042 update scrolledwindow vadjustment when resized MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I94408845b82c7202f74360168c66c4439e985124 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102271 Tested-by: Jenkins Reviewed-by: Caolán McNamara --- svtools/source/control/valueset.cxx | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) (limited to 'svtools') diff --git a/svtools/source/control/valueset.cxx b/svtools/source/control/valueset.cxx index 280d8eaff848..a99588187e35 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(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()); + } } } -- cgit