include/sfx2/thumbnailview.hxx        |    2 +-
 sfx2/source/control/thumbnailview.cxx |   15 +++++++++++----
 2 files changed, 12 insertions(+), 5 deletions(-)

New commits:
commit ed2d6ab389c169330f3c359463ce503eafcee253
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
    (cherry picked from commit 717aa1ac75ddd54fdf72cd4de6551f1fb536da9b)
    Reviewed-on: https://gerrit.libreoffice.org/9017
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/include/sfx2/thumbnailview.hxx b/include/sfx2/thumbnailview.hxx
index e21b87b..851eba0 100644
--- a/include/sfx2/thumbnailview.hxx
+++ b/include/sfx2/thumbnailview.hxx
@@ -292,7 +292,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 a4e38a7..814a8d7 100644
--- a/sfx2/source/control/thumbnailview.cxx
+++ b/sfx2/source/control/thumbnailview.cxx
@@ -275,7 +275,7 @@ void ThumbnailView::OnItemDblClicked (ThumbnailViewItem*)
     return new ThumbnailViewAcc( this, mbIsTransientChildrenDisabled );
 }
 
-void ThumbnailView::CalculateItemPositions ()
+void ThumbnailView::CalculateItemPositions (bool bScrollBarUsed)
 {
     if (!mnItemHeight || !mnItemWidth)
         return;
@@ -300,7 +300,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
@@ -356,7 +356,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;
@@ -438,6 +443,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;
@@ -520,7 +527,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

Reply via email to