X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c2919ab326e60322b63ae9b5d50e83bb5156efce..f8fbc92bdb84f34fc7306266b116ebd2da28c950:/src/common/statbar.cpp diff --git a/src/common/statbar.cpp b/src/common/statbar.cpp index 1ebaf0e3df..641a772927 100644 --- a/src/common/statbar.cpp +++ b/src/common/statbar.cpp @@ -29,6 +29,7 @@ #endif #ifndef WX_PRECOMP + #include "wx/frame.h" #include "wx/statusbr.h" #endif //WX_PRECOMP @@ -61,6 +62,14 @@ wxStatusBarBase::~wxStatusBarBase() FreeWidths(); FreeStacks(); InitStyles(); + + // notify the frame that it doesn't have a status bar any longer to avoid + // dangling pointers + wxFrameBase *frame = wxDynamicCast(GetParent(), wxFrameBase); + if ( frame && frame->GetStatusBar() == this ) + { + frame->SetStatusBar(NULL); + } } // ---------------------------------------------------------------------------- @@ -99,7 +108,7 @@ void wxStatusBarBase::SetFieldsCount(int number, const int *widths) { wxCHECK_RET( number > 0, _T("invalid field number in SetFieldsCount") ); - bool refresh = FALSE; + bool refresh = false; if ( number != m_nFields ) { @@ -152,7 +161,7 @@ void wxStatusBarBase::SetFieldsCount(int number, const int *widths) ReinitWidths(); - refresh = TRUE; + refresh = true; } //else: keep the old m_statusWidths if we had them @@ -161,7 +170,7 @@ void wxStatusBarBase::SetFieldsCount(int number, const int *widths) SetStatusWidths(number, widths); // already done from SetStatusWidths() - refresh = FALSE; + refresh = false; } if ( refresh ) @@ -243,16 +252,7 @@ wxArrayInt wxStatusBarBase::CalculateAbsWidths(wxCoord widthTotal) const } // the amount of extra width we have per each var width field - int nVarWidth; - if ( nVarCount ) - { - int widthExtra = widthTotal - nTotalWidth; - nVarWidth = widthExtra > 0 ? widthExtra / nVarCount : 0; - } - else // no var width fields at all - { - nVarWidth = 0; - } + int widthExtra = widthTotal - nTotalWidth; // do fill the array for ( i = 0; i < m_nFields; i++ ) @@ -263,7 +263,10 @@ wxArrayInt wxStatusBarBase::CalculateAbsWidths(wxCoord widthTotal) const } else { - widths.Add(-m_statusWidths[i]*nVarWidth); + int nVarWidth = widthExtra > 0 ? (widthExtra * -m_statusWidths[i]) / nVarCount : 0; + nVarCount += m_statusWidths[i]; + widthExtra -= nVarWidth; + widths.Add(nVarWidth); } } }