]> git.saurik.com Git - wxWidgets.git/commitdiff
ignore iconized state when computing client size for GetBestSize(), fixes #11803
authorPaul Cornett <paulcor@bullseye.com>
Tue, 23 Mar 2010 17:19:02 +0000 (17:19 +0000)
committerPaul Cornett <paulcor@bullseye.com>
Tue, 23 Mar 2010 17:19:02 +0000 (17:19 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63750 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/toplevel.h
src/gtk/toplevel.cpp

index 013e081df60b00a51e7b30e2a23324d340779440..40129f5def79c9bedcf2cb4ef3a3f8577a3f1b1d 100644 (file)
@@ -16,6 +16,7 @@
 
 class WXDLLIMPEXP_CORE wxTopLevelWindowGTK : public wxTopLevelWindowBase
 {
+    typedef wxTopLevelWindowBase base_type;
 public:
     // construction
     wxTopLevelWindowGTK() { Init(); }
@@ -137,6 +138,7 @@ protected:
 
     virtual void DoSetClientSize(int width, int height);
     virtual void DoGetClientSize(int *width, int *height) const;
+    virtual wxSize DoGetBestSize() const;
 
     // string shown in the title bar
     wxString m_title;
index d0f1b1e59d83590524fd54c04b13906f5aeb799a..81c5430f1e6252668e007e4f236d0ad72051577e 100644 (file)
@@ -887,7 +887,7 @@ bool wxTopLevelWindowGTK::Show( bool show )
         HandleWindowEvent(event);
     }
 
-    bool change = wxTopLevelWindowBase::Show(show);
+    bool change = base_type::Show(show);
 
     if (change && !show)
     {
@@ -1004,7 +1004,7 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si
 
 void wxTopLevelWindowGTK::DoSetClientSize(int width, int height)
 {
-    wxTopLevelWindowBase::DoSetClientSize(width, height);
+    base_type::DoSetClientSize(width, height);
 
     // Since client size is being explicitly set, don't change it later
     // Has to be done after calling base because it calls SetSize,
@@ -1012,6 +1012,17 @@ void wxTopLevelWindowGTK::DoSetClientSize(int width, int height)
     m_deferShowAllowed = false;
 }
 
+wxSize wxTopLevelWindowGTK::DoGetBestSize() const
+{
+    // temporarily turn off m_isIconized,
+    // so we get an accurate client size from DoGetClientSize
+    const bool save = m_isIconized;
+    const_cast<wxTopLevelWindowGTK*>(this)->m_isIconized = false;
+    const wxSize size = base_type::DoGetBestSize();
+    const_cast<wxTopLevelWindowGTK*>(this)->m_isIconized = save;
+    return size;
+}
+
 void wxTopLevelWindowGTK::DoGetClientSize( int *width, int *height ) const
 {
     wxASSERT_MSG(m_widget, wxT("invalid frame"));
@@ -1035,7 +1046,7 @@ void wxTopLevelWindowGTK::DoSetSizeHints( int minW, int minH,
                                           int maxW, int maxH,
                                           int incW, int incH )
 {
-    wxTopLevelWindowBase::DoSetSizeHints( minW, minH, maxW, maxH, incW, incH );
+    base_type::DoSetSizeHints(minW, minH, maxW, maxH, incW, incH);
 
     const wxSize minSize = GetMinSize();
     const wxSize maxSize = GetMaxSize();
@@ -1177,7 +1188,7 @@ void wxTopLevelWindowGTK::SetIcons( const wxIconBundle &icons )
 {
     wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
 
-    wxTopLevelWindowBase::SetIcons( icons );
+    base_type::SetIcons(icons);
 
     // Setting icons before window is realized can cause a GTK assertion if
     // another TLW is realized before this one, and it has this one as it's