diff --git a/include/wx/window.h b/include/wx/window.h index 662c0e53e0..9c3744965e 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -1077,6 +1077,9 @@ protected: #if wxUSE_ACCESSIBILITY wxAccessible* m_accessible; #endif + // Best size for controls which fail to implement DoGetBestSize() + wxSize m_bestSize; + // Virtual size (scrolling) wxSize m_virtualSize; diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index 25a98cc3d2..14d868fdd8 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -110,6 +110,7 @@ END_EVENT_TABLE() // the default initialization wxWindowBase::wxWindowBase() +: m_bestSize(wxDefaultSize) { // no window yet, no parent nor children m_parent = (wxWindow *)NULL; @@ -585,9 +586,18 @@ wxSize wxWindowBase::DoGetBestSize() const } else { - // for a generic window there is no natural best size - just use the - // current one - return GetSize(); + // Windows which don't implement DoGetBestSize and aren't parents. + // This emulates the behavior of a wxSizer without wxADJUST_MINSIZE + + // If you get the following message you should do one of two things + // 1. Do what it says (best) + // 2. m_bestSize = GetSize() at end of Create() (hack) + if(m_bestSize == wxDefaultSize) + { + wxLogDebug(wxT("Class %s (or superclass) should implement DoGetBestSize()"),GetClassInfo()->GetClassName()); + wxConstCast(this,wxWindowBase)->m_bestSize = GetSize(); + } + return m_bestSize; } }