#if defined( __WXMSW__ ) || defined( __WXMAC__)
EVT_SET_CURSOR(wxSplitterWindow::OnSetCursor)
#endif // wxMSW
-
- WX_EVENT_TABLE_CONTROL_CONTAINER(wxSplitterWindow)
END_EVENT_TABLE()
-WX_DELEGATE_TO_CONTROL_CONTAINER(wxSplitterWindow, wxWindow)
-
static bool IsLive(wxSplitterWindow* wnd)
{
// with wxSP_LIVE_UPDATE style the splitter windows are always resized
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;
void wxSplitterWindow::Init()
{
- WX_INIT_CONTROL_CONTAINER();
-
m_splitMode = wxSPLIT_VERTICAL;
m_permitUnsplitAlways = true;
m_windowOne = NULL;
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 )
{
int delta = (int) ( (size - old_size)*m_sashGravity );
if ( delta != 0 )
newPosition = m_minimumPaneSize;
SetSashPositionAndNotify(newPosition);
}
- }
- if ( m_sashPosition >= size - 5 )
- SetSashPositionAndNotify(wxMax(10, size - 40));
- m_lastSize = wxSize(w,h);
+ if ( m_sashPosition >= size - 5 )
+ SetSashPositionAndNotify(wxMax(10, size - 40));
+ m_lastSize = wxSize(w,h);
+ }
}
SizeWindows();