include/sfx2/thumbnailview.hxx | 2 +- sfx2/source/control/thumbnailview.cxx | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-)
New commits: commit 717aa1ac75ddd54fdf72cd4de6551f1fb536da9b Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Tue Apr 15 16:22:53 2014 +0100 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 diff --git a/include/sfx2/thumbnailview.hxx b/include/sfx2/thumbnailview.hxx index afe29c7..068c01e 100644 --- a/include/sfx2/thumbnailview.hxx +++ b/include/sfx2/thumbnailview.hxx @@ -282,7 +282,7 @@ protected: using Control::ImplInitSettings; using Window::ImplInit; - void CalculateItemPositions (); + void CalculateItemPositions (bool bScrollBarUsed = false); void MakeItemVisible( sal_uInt16 nId ); SFX2_DLLPRIVATE void ImplInit(); diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx index 742a66f..3326334 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(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits