X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f3190d1ceaf664645d9583ba51931f49294405c0..58c23da1d54bf50d9f892b692b941f2cd20d96d0:/src/common/sizer.cpp diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 1d9e4c216b..81c2031157 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -17,18 +17,19 @@ #pragma hdrstop #endif +#include "wx/sizer.h" + #ifndef WX_PRECOMP #include "wx/string.h" #include "wx/intl.h" #include "wx/math.h" + #include "wx/utils.h" + #include "wx/settings.h" + #include "wx/statbox.h" #endif // WX_PRECOMP -#include "wx/sizer.h" -#include "wx/utils.h" -#include "wx/statbox.h" -#include "wx/settings.h" #include "wx/listimpl.cpp" -#include "wx/intl.h" + #if WXWIN_COMPATIBILITY_2_4 #include "wx/notebook.h" #endif @@ -732,6 +733,15 @@ wxSize wxSizer::GetMinWindowSize( wxWindow *window ) // Return a window size that will fit within the screens dimensions wxSize wxSizer::FitSize( wxWindow *window ) { + if ( window->IsTopLevel() ) + { + wxTopLevelWindow *tlw = wxDynamicCast(window, wxTopLevelWindow); + if ( tlw && tlw->IsAlwaysMaximized() ) + { + return tlw->GetClientSize(); + } + } + wxSize size = GetMinWindowSize( window ); wxSize sizeMax = GetMaxWindowSize( window ); @@ -1688,16 +1698,27 @@ wxSize wxBoxSizer::CalcMin() #if wxUSE_STATBOX wxStaticBoxSizer::wxStaticBoxSizer( wxStaticBox *box, int orient ) - : wxBoxSizer( orient ) - , m_staticBox( box ) + : wxBoxSizer( orient ), + m_staticBox( box ) { wxASSERT_MSG( box, wxT("wxStaticBoxSizer needs a static box") ); + + // do this so that our Detach() is called if the static box is destroyed + // before we are + m_staticBox->SetContainingSizer(this); } wxStaticBoxSizer::wxStaticBoxSizer(int orient, wxWindow *win, const wxString& s) : wxBoxSizer(orient), m_staticBox(new wxStaticBox(win, wxID_ANY, s)) { + // same as above + m_staticBox->SetContainingSizer(this); +} + +wxStaticBoxSizer::~wxStaticBoxSizer() +{ + delete m_staticBox; } static void GetStaticBoxBorders( wxStaticBox *box, @@ -1747,6 +1768,20 @@ void wxStaticBoxSizer::ShowItems( bool show ) wxBoxSizer::ShowItems( show ); } +bool wxStaticBoxSizer::Detach( wxWindow *window ) +{ + // avoid deleting m_staticBox in our dtor if it's being detached from the + // sizer (which can happen because it's being already destroyed for + // example) + if ( window == m_staticBox ) + { + m_staticBox = NULL; + return true; + } + + return wxSizer::Detach( window ); +} + #endif // wxUSE_STATBOX #if wxUSE_BUTTON