diff options
author | Jan Holesovsky <kendy@collabora.com> | 2014-08-01 21:10:22 +0200 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2014-08-05 08:40:08 +0000 |
commit | 48272a9a720039e79c6a684f1f037811ea42ed0c (patch) | |
tree | cc2915dd9eb77571af884a276b2b3e78711af2bd /sd | |
parent | bff075cbe1b969361a891d43ae24a648aa429373 (diff) |
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
Reviewed-on: https://gerrit.libreoffice.org/10683
Reviewed-by: David Tardon <dtardon@redhat.com>
Tested-by: David Tardon <dtardon@redhat.com>
Diffstat (limited to 'sd')
-rw-r--r-- | sd/source/ui/slidesorter/view/SlsLayouter.cxx | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/sd/source/ui/slidesorter/view/SlsLayouter.cxx b/sd/source/ui/slidesorter/view/SlsLayouter.cxx index 48b94eeeb400..2c1f2ab78cb5 100644 --- a/sd/source/ui/slidesorter/view/SlsLayouter.cxx +++ b/sd/source/ui/slidesorter/view/SlsLayouter.cxx @@ -624,11 +624,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) { @@ -667,11 +671,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) { |