X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d7260478196b59ffd83c3328f710ba6f45860428..9d180f3ad0459709707ca591295c7c885d09c614:/src/generic/splitter.cpp diff --git a/src/generic/splitter.cpp b/src/generic/splitter.cpp index f9860b7875..6c5965e49a 100644 --- a/src/generic/splitter.cpp +++ b/src/generic/splitter.cpp @@ -50,7 +50,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxSplitterEvent, wxNotifyEvent) BEGIN_EVENT_TABLE(wxSplitterWindow, wxWindow) EVT_PAINT(wxSplitterWindow::OnPaint) EVT_SIZE(wxSplitterWindow::OnSize) - EVT_IDLE(wxSplitterWindow::OnIdle) EVT_MOUSE_EVENTS(wxSplitterWindow::OnMouseEvent) #if defined( __WXMSW__ ) || defined( __WXMAC__) @@ -156,12 +155,12 @@ void wxSplitterWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) DrawSash(dc); } -void wxSplitterWindow::OnIdle(wxIdleEvent& event) +void wxSplitterWindow::OnInternalIdle() { + wxWindow::OnInternalIdle(); + if (m_needUpdating) SizeWindows(); - - event.Skip(); } void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) @@ -253,6 +252,9 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) m_windowOne = m_windowTwo; m_windowTwo = (wxWindow *) NULL; OnUnsplit(removedWindow); + wxSplitterEvent event(wxEVT_COMMAND_SPLITTER_UNSPLIT, this); + event.m_data.win = removedWindow; + (void)DoSendEvent(event); SetSashPositionAndNotify(0); } else if ( posSashNew == GetWindowSize() ) @@ -261,6 +263,9 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) wxWindow *removedWindow = m_windowTwo; m_windowTwo = (wxWindow *) NULL; OnUnsplit(removedWindow); + wxSplitterEvent event(wxEVT_COMMAND_SPLITTER_UNSPLIT, this); + event.m_data.win = removedWindow; + (void)DoSendEvent(event); SetSashPositionAndNotify(0); } else @@ -275,13 +280,17 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) SizeWindows(); } // left up && dragging - else if (event.Moving() && !event.Dragging()) + else if ((event.Moving() || event.Leaving() || event.Entering()) && (m_dragMode == wxSPLIT_DRAG_NONE)) { // Just change the cursor as required - if ( SashHitTest(x, y) ) + if ( !event.Leaving() && SashHitTest(x, y) ) + { SetResizeCursor(); + } else + { SetCursor(* wxSTANDARD_CURSOR); + } } else if (event.Dragging() && (m_dragMode == wxSPLIT_DRAG_DRAGGING)) { @@ -878,7 +887,7 @@ bool wxSplitterWindow::Unsplit(wxWindow *toRemove) return FALSE; } - win->Show(FALSE); + OnUnsplit(win); DoSetSashPosition(0); SizeWindows(); @@ -1059,8 +1068,12 @@ void wxSplitterWindow::OnDoubleClickSash(int x, int y) if ( GetMinimumPaneSize() == 0 || m_permitUnsplitAlways ) { wxWindow* win = m_windowTwo; - if (Unsplit(win)) - OnUnsplit(win); + if ( Unsplit(win) ) + { + wxSplitterEvent unsplitEvent(wxEVT_COMMAND_SPLITTER_UNSPLIT, this); + unsplitEvent.m_data.win = win; + (void)DoSendEvent(unsplitEvent); + } } } //else: blocked by user @@ -1068,13 +1081,8 @@ void wxSplitterWindow::OnDoubleClickSash(int x, int y) void wxSplitterWindow::OnUnsplit(wxWindow *winRemoved) { - // do it before calling the event handler which may delete the window + // call this before calling the event handler which may delete the window winRemoved->Show(FALSE); - - wxSplitterEvent event(wxEVT_COMMAND_SPLITTER_UNSPLIT, this); - event.m_data.win = winRemoved; - - (void)DoSendEvent(event); } #if defined( __WXMSW__ ) || defined( __WXMAC__)