m_oldX = 0;
     m_oldY = 0;
     m_sashStart = 0;
-    m_sashPosition = m_requestedSashPosition = 0;
+    m_sashPosition = 0;
+    m_requestedSashPosition = INT_MAX;
     m_sashGravity = 0.0;
     m_lastSize = wxSize(0,0);
-    m_checkRequestedSashPosition = false;
     m_minimumPaneSize = 0;
     m_sashCursorWE = wxCursor(wxCURSOR_SIZEWE);
     m_sashCursorNS = wxCursor(wxCURSOR_SIZENS);
 {
     wxWindow::OnInternalIdle();
 
-    // if this is the first idle time after a sash position has potentially
-    // been set, allow SizeWindows to check for a requested size.
-    if (!m_checkRequestedSashPosition)
+    // We may need to update the children sizes in two cases: either because
+    // we're in the middle of a live update as indicated by m_needUpdating or
+    // because we have a requested but not yet set sash position as indicated
+    // by m_requestedSashPosition having a valid value.
+    if ( m_needUpdating )
     {
-        m_checkRequestedSashPosition = true;
-        SizeWindows();
-        return; // it won't needUpdating in this case
+        m_needUpdating = false;
     }
-
-    if (m_needUpdating)
+    else if ( m_requestedSashPosition == INT_MAX )
     {
-        m_needUpdating = false;
-        SizeWindows();
+        // We don't need to resize the children.
+        return;
     }
+
+    SizeWindows();
 }
 
 void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event)
 void wxSplitterWindow::SizeWindows()
 {
     // check if we have delayed setting the real sash position
-    if ( m_checkRequestedSashPosition && m_requestedSashPosition != INT_MAX )
+    if ( m_requestedSashPosition != INT_MAX )
     {
         int newSashPosition = ConvertSashPosition(m_requestedSashPosition);
         if ( newSashPosition != m_sashPosition )
     // remember the sash position we want to set for later if we can't set it
     // right now (e.g. because the window is too small)
     m_requestedSashPosition = position;
-    m_checkRequestedSashPosition = false;
 
     DoSetSashPosition(ConvertSashPosition(position));
 
 // window is shown, if you know the overall size is correct.
 void wxSplitterWindow::UpdateSize()
 {
-    m_checkRequestedSashPosition = true;
     SizeWindows();
-    m_checkRequestedSashPosition = false;
 }
 
 bool wxSplitterWindow::DoSendEvent(wxSplitterEvent& event)