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:
@@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user