From a24e9c29d54856bb98998772b8960da00401515e Mon Sep 17 00:00:00 2001 From: Jan Holesovsky Date: Fri, 1 Aug 2014 21:10:22 +0200 Subject: bnc#862514: Handle corner case in slide sorter correctly. We should never return -1 when bIncludeBordersAndGaps is true; but that could have happened in a corner case: * export SAL_USE_VCLPLUGIN=gen * start LibreOffice * open a presentation with many slides * resize the window so that it shows the slides _exactly_, no slide is cut off in the slide sorter * point the mouse pointer into the left "Slides" sidebar (slide sorter) so that it does not cause any mouse-over effect (somehow between the left border, and the slides - there is space that can do this) * turn the mouse wheel all the way down so that the last slide is at the bottom * turn the mouse wheel up _once_ * turn the mouse wheel down _once_ - it will look like the view does not change (the last but one is still at the bottom), but you can see the scrollbar jump to the top * and now you can again start turning the wheel all the way down to repeat the procedure :-) Change-Id: I0253c89513222a1f2eb3263068997d10eea0f130 --- sd/source/ui/slidesorter/view/SlsLayouter.cxx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'sd') diff --git a/sd/source/ui/slidesorter/view/SlsLayouter.cxx b/sd/source/ui/slidesorter/view/SlsLayouter.cxx index 2e298bd4c138..d628965d8b87 100644 --- a/sd/source/ui/slidesorter/view/SlsLayouter.cxx +++ b/sd/source/ui/slidesorter/view/SlsLayouter.cxx @@ -560,11 +560,15 @@ sal_Int32 Layouter::Implementation::GetRowAtPosition ( // When inside the gap below then nYPosition is not over a page // object. if (nDistanceIntoGap > 0) - nRow = ResolvePositionInGap ( + { + sal_Int32 nResolvedRow = ResolvePositionInGap( nDistanceIntoGap, eGapMembership, nRow, mnVerticalGap); + if (!bIncludeBordersAndGaps || nResolvedRow != -1) + nRow = nResolvedRow; + } } else if (bIncludeBordersAndGaps) { @@ -600,11 +604,15 @@ sal_Int32 Layouter::Implementation::GetColumnAtPosition ( // When inside the gap at the right then nXPosition is not over a // page object. if (nDistanceIntoGap > 0) - nColumn = ResolvePositionInGap ( + { + sal_Int32 nResolvedColumn = ResolvePositionInGap( nDistanceIntoGap, eGapMembership, nColumn, mnHorizontalGap); + if (!bIncludeBordersAndGaps || nResolvedColumn != -1) + nColumn = nResolvedColumn; + } } else if (bIncludeBordersAndGaps) { -- cgit