]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/splitter.cpp
why cvs thinks that I modified these files?
[wxWidgets.git] / src / generic / splitter.cpp
index b458a92561a0e5dc1b1f1ada9d7e002358b14e38..9e680e1748c4d0a3a1f98e6d858b05805655eaa6 100644 (file)
@@ -352,24 +352,54 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event)
     }
 }
 
-void wxSplitterWindow::OnSize(wxSizeEvent& WXUNUSED(event))
+void wxSplitterWindow::OnSize(wxSizeEvent& event)
 {
-    int cw, ch;
-    GetClientSize( &cw, &ch );
-    if ( m_windowTwo )
+    // only process this message if we're not iconized - otherwise iconizing
+    // and restoring a window containing the splitter has a funny side effect
+    // of changing the splitter position!
+    wxWindow *parent = GetParent();
+    while ( parent && !parent->IsTopLevel() )
     {
-        if ( m_splitMode == wxSPLIT_VERTICAL )
-        {
-            if ( m_sashPosition >= (cw - 5) )
-                m_sashPosition = wxMax(10, cw - 40);
-        }
-        if ( m_splitMode == wxSPLIT_HORIZONTAL )
+        parent = parent->GetParent();
+    }
+
+    bool iconized = FALSE;
+    wxFrame *frame = wxDynamicCast(parent, wxFrame);
+    if ( frame )
+        iconized = frame->IsIconized();
+    else
+    {
+        wxDialog *dialog = wxDynamicCast(parent, wxDialog);
+        if ( dialog )
+            iconized = dialog->IsIconized();
+        else
+            wxFAIL_MSG(_T("should have a top level frame or dialog parent!"));
+    }
+
+    if ( iconized )
+    {
+        event.Skip();
+    }
+    else
+    {
+        int cw, ch;
+        GetClientSize( &cw, &ch );
+        if ( m_windowTwo )
         {
-            if ( m_sashPosition >= (ch - 5) )
-                m_sashPosition = wxMax(10, ch - 40);
+            if ( m_splitMode == wxSPLIT_VERTICAL )
+            {
+                if ( m_sashPosition >= (cw - 5) )
+                    m_sashPosition = wxMax(10, cw - 40);
+            }
+            if ( m_splitMode == wxSPLIT_HORIZONTAL )
+            {
+                if ( m_sashPosition >= (ch - 5) )
+                    m_sashPosition = wxMax(10, ch - 40);
+            }
         }
+
+        SizeWindows();
     }
-    SizeWindows();
 }
 
 bool wxSplitterWindow::SashHitTest(int x, int y, int tolerance)