diff --git a/include/wx/generic/dataview.h b/include/wx/generic/dataview.h index 27bdf1dc90..fee9e14020 100644 --- a/include/wx/generic/dataview.h +++ b/include/wx/generic/dataview.h @@ -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 diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index 706efcb90f..3192e483e4 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -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