- // For a generic window there is no natural best size - just use
- // either the minimum size if there is one, or the current size.
- // These are returned as-is, unadjusted by the client size difference.
- if ( GetMinSize().IsFullySpecified() )
- return GetMinSize();
- else
- return GetSize();
+ // for a generic window there is no natural best size so, if the
+ // minimal size is not set, use the current size but take care to
+ // remember it as minimal size for the next time because our best size
+ // should be constant: otherwise we could get into a situation when the
+ // window is initially at some size, then expanded to a larger size and
+ // then, when the containing window is shrunk back (because our initial
+ // best size had been used for computing the parent min size), we can't
+ // be shrunk back any more because our best size is now bigger
+ if ( !GetMinSize().IsFullySpecified() )
+ wxConstCast(this, wxWindowBase)->SetMinSize(GetSize());
+
+ // return as-is, unadjusted by the client size difference.
+ return GetMinSize();