fix window repainting when SetLineCount() is called (patch 1667599; closes bug 1639629)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44785 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-03-12 20:29:34 +00:00
parent 092d7f88f6
commit 861a14e13c

View File

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