X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/90230407984b0bbe9d6ed6ae6dc2376700ef1d42..d54f0605a9951edb38c21e7987ef3d9ea7a2011c:/src/generic/splitter.cpp?ds=sidebyside diff --git a/src/generic/splitter.cpp b/src/generic/splitter.cpp index 03abc8baa5..ab5285ba34 100644 --- a/src/generic/splitter.cpp +++ b/src/generic/splitter.cpp @@ -93,10 +93,7 @@ bool wxSplitterWindow::Create(wxWindow *parent, wxWindowID id, if ( !wxWindow::Create(parent, id, pos, size, style, name) ) return false; - if (size.x >= 0) - m_lastSize.x = size.x; - if (size.y >= 0) - m_lastSize.y = size.y; + m_lastSize = GetClientSize(); m_permitUnsplitAlways = (style & wxSP_PERMIT_UNSPLIT) != 0; @@ -442,16 +439,22 @@ void wxSplitterWindow::OnSize(wxSizeEvent& event) int size = m_splitMode == wxSPLIT_VERTICAL ? w : h; int old_size = m_splitMode == wxSPLIT_VERTICAL ? m_lastSize.x : m_lastSize.y; - if ( old_size != 0 ) + + // Don't do anything if the size didn't really change. In particular, + // it is important that we don't reset our sash position because it's + // out of current range in this case as otherwise the really requested + // position would be lost and never set. Wait until we get a real size + // event with our non-initial size to do it. + if ( size == old_size ) + return; + + int delta = (int) ( (size - old_size)*m_sashGravity ); + if ( delta != 0 ) { - int delta = (int) ( (size - old_size)*m_sashGravity ); - if ( delta != 0 ) - { - int newPosition = m_sashPosition + delta; - if( newPosition < m_minimumPaneSize ) - newPosition = m_minimumPaneSize; - SetSashPositionAndNotify(newPosition); - } + int newPosition = m_sashPosition + delta; + if( newPosition < m_minimumPaneSize ) + newPosition = m_minimumPaneSize; + SetSashPositionAndNotify(newPosition); } if ( m_sashPosition >= size - 5 )