]> git.saurik.com Git - wxWidgets.git/commitdiff
fix window repainting when SetLineCount() is called (patch 1667599; closes bug 1639629)
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 12 Mar 2007 20:29:34 +0000 (20:29 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 12 Mar 2007 20:29:34 +0000 (20:29 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44785 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/vscroll.cpp

index a7d388a9bf4bb4af08507786f1c8db052e3a87b4..ec48cb9103c61f628f5e824df9052c25670195e1 100644 (file)
@@ -169,6 +169,13 @@ void wxVScrolledWindow::RemoveScrollbar()
 
 void wxVScrolledWindow::UpdateScrollbar()
 {
+    // if there is nothing to scroll, remove the scrollbar
+    if ( !m_lineMax )
+    {
+        RemoveScrollbar();
+        return;
+    }
+
     // see how many lines can we fit on screen
     const wxCoord hWindow = GetClientSize().y;
 
@@ -228,15 +235,15 @@ void wxVScrolledWindow::SetLineCount(size_t count)
     // and our estimate for their total height
     m_heightTotal = EstimateTotalHeight();
 
-    // recalculate the scrollbars parameters
-    if ( count )
-    {
-        m_lineFirst = 1;    // make sure it is != 0
-        ScrollToLine(0);
-    }
-    else // no items
+    // ScrollToLine() will update the scrollbar itself if it changes the line
+    // we pass to it because it's out of [new] range
+    size_t oldScrollPos = m_lineFirst;
+    ScrollToLine(m_lineFirst);
+    if ( oldScrollPos == m_lineFirst )
     {
-        RemoveScrollbar();
+        // but if it didn't do it, we still need to update the scrollbar to
+        // reflect the changed number of lines ourselves
+        UpdateScrollbar();
     }
 }