diff options
author | Andrzej Hunt <andrzej.hunt@collabora.com> | 2014-04-15 16:22:53 +0100 |
---|---|---|
committer | Andrzej Hunt <andrzej.hunt@collabora.com> | 2014-04-15 19:55:57 +0100 |
commit | 717aa1ac75ddd54fdf72cd4de6551f1fb536da9b (patch) | |
tree | f49d07d83c3e3698714293a616f6e58656c39c94 /sfx2 | |
parent | 279d23335e61ee85e74e9ceb9a9b598e14bd49a5 (diff) |
fdo#72287 Scroll automatically to show selected item when keyboard used.
806919adf9c9bafbaba92c2d2ab35d2e2f9863f8 added finer-grained scrolling using
the scrollbar / scrollwheel, but inadvertently prevents the display from scrolling
when an item is selected that is currently offscreen (e.g. by using the down-arrow
button on the keyboard).
Change-Id: Iaa3a7dc6d214741d37cf4ec78c00ed0034ed1e42
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/control/thumbnailview.cxx | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx index 742a66fe712c..33263344fb1a 100644 --- a/sfx2/source/control/thumbnailview.cxx +++ b/sfx2/source/control/thumbnailview.cxx @@ -270,7 +270,7 @@ void ThumbnailView::OnItemDblClicked (ThumbnailViewItem*) return new ThumbnailViewAcc( this, mbIsTransientChildrenDisabled ); } -void ThumbnailView::CalculateItemPositions () +void ThumbnailView::CalculateItemPositions (bool bScrollBarUsed) { if (!mnItemHeight || !mnItemWidth) return; @@ -295,7 +295,7 @@ void ThumbnailView::CalculateItemPositions () // calculate window scroll ratio float nScrollRatio; - if( mpScrBar ) + if( bScrollBarUsed && mpScrBar ) nScrollRatio = static_cast<float>(mpScrBar->GetThumbPos()) / static_cast<float>(mpScrBar->GetRangeMax()-2); else @@ -351,7 +351,12 @@ void ThumbnailView::CalculateItemPositions () nHiddenLines * nItemHeightOffset; // draw items - size_t nFirstItem = nHiddenLines * mnCols; + // Unless we are scrolling (via scrollbar) we just use the precalculated + // mnFirstLine -- our nHiddenLines calculation takes into account only + // what the user has done with the scrollbar but not any changes of selection + // using the keyboard, meaning we could accidentally hide the selected item + // if we believe the scrollbar (fdo#72287). + size_t nFirstItem = (bScrollBarUsed ? nHiddenLines : mnFirstLine) * mnCols; size_t nLastItem = nFirstItem + (mnVisLines + 1) * mnCols; maItemListRect.Left() = x; @@ -433,6 +438,8 @@ void ThumbnailView::CalculateItemPositions () mpScrBar->SetPosSizePixel( aPos, aSize ); mpScrBar->SetRangeMax( (nCurCount+mnCols-1)*mnFineness/mnCols); mpScrBar->SetVisibleSize( mnVisLines ); + if (!bScrollBarUsed) + mpScrBar->SetThumbPos( (long)mnFirstLine*mnFineness ); long nPageSize = mnVisLines; if ( nPageSize < 1 ) nPageSize = 1; @@ -515,7 +522,7 @@ IMPL_LINK( ThumbnailView,ImplScrollHdl, ScrollBar*, pScrollBar ) { if ( pScrollBar->GetDelta() ) { - CalculateItemPositions(); + CalculateItemPositions(true); if ( IsReallyVisible() && IsUpdateMode() ) Invalidate(); |