]> git.saurik.com Git - wxWidgets.git/commitdiff
if we return GetSize() from DoGetBestSize(), remember it as min size as well to preve...
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 25 May 2005 12:40:53 +0000 (12:40 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 25 May 2005 12:40:53 +0000 (12:40 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34331 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/wincmn.cpp

index c296441e771ee7e7b304c9a31d47cd117bead15d..9ac1028a5084df53170259338d1e17ed442be47c 100644 (file)
@@ -674,13 +674,19 @@ wxSize wxWindowBase::DoGetBestSize() const
     }
     else // ! has children
     {
-        // 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();
     }
 
     // Add any difference between size and client size