Avoid unnecessarily refreshing last column in generic wxDataViewCtrl
UpdateColumnSizes() was called whenever the control was modified in any way
since 4156e1a5c9
and it refreshed the entire
last column even if absolutely nothing changed.
Don't do this unless the last column width has really changed.
This commit is contained in:
@@ -64,11 +64,10 @@ public:
|
||||
|
||||
virtual void SetWidth(int width) wxOVERRIDE
|
||||
{
|
||||
if ( width != m_width )
|
||||
{
|
||||
m_width = width;
|
||||
UpdateDisplay();
|
||||
}
|
||||
// As a small optimization, use this method to avoid calling
|
||||
// UpdateDisplay() if the width didn't really change, even if we don't
|
||||
// care about its return value.
|
||||
(void)WXUpdateWidth(width);
|
||||
}
|
||||
virtual int GetWidth() const wxOVERRIDE;
|
||||
|
||||
@@ -122,6 +121,18 @@ public:
|
||||
UpdateDisplay();
|
||||
}
|
||||
|
||||
// This method is specific to the generic implementation and is used only
|
||||
// by wxWidgets itself.
|
||||
bool WXUpdateWidth(int width)
|
||||
{
|
||||
if ( width == m_width )
|
||||
return false;
|
||||
|
||||
m_width = width;
|
||||
UpdateDisplay();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
// common part of all ctors
|
||||
|
@@ -4577,7 +4577,11 @@ void wxDataViewMainWindow::UpdateColumnSizes()
|
||||
if ( lastColX < fullWinWidth )
|
||||
{
|
||||
int desiredWidth = wxMax(fullWinWidth - lastColX, lastCol->GetMinWidth());
|
||||
lastCol->SetWidth(desiredWidth);
|
||||
if ( !lastCol->WXUpdateWidth(desiredWidth) )
|
||||
{
|
||||
// The column width didn't change, no need to do anything else.
|
||||
return;
|
||||
}
|
||||
|
||||
// All columns fit on screen, so we don't need horizontal scrolling.
|
||||
// To prevent flickering scrollbar when resizing the window to be
|
||||
|
Reference in New Issue
Block a user