diff --git a/docs/changes.txt b/docs/changes.txt index b117198451..3c5b398af9 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -27,6 +27,8 @@ All (GUI): - Fixed wxScrolledWindow sizer behaviour so that the virtual size isn't used to set the window size. - Added wxTE_BESTWRAP (based on patch by Mart Raudsepp) +- wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED is now only sent once at the end of + splitter dragging and not after each CHANGING event (Jacobo Vilella Vilahur) Unix: diff --git a/docs/latex/wx/splitevt.tex b/docs/latex/wx/splitevt.tex index 520df0d44f..9f430e802d 100644 --- a/docs/latex/wx/splitevt.tex +++ b/docs/latex/wx/splitevt.tex @@ -32,8 +32,8 @@ modify the position of the tracking bar to properly reflect the position that would be set if the drag were to be completed at this point. Processes a wxEVT\_COMMAND\_SPLITTER\_SASH\_POS\_CHANGING event.} \twocolitem{{\bf EVT\_SPLITTER\_SASH\_POS\_CHANGED(id, func)}}{The sash -position was changed. May be used to modify the sash position before -it is set, or to prevent the change from taking place. +position was changed. This event is generated after the user releases the mouse +after dragging the splitter. Processes a wxEVT\_COMMAND\_SPLITTER\_SASH\_POS\_CHANGED event.} \twocolitem{{\bf EVT\_SPLITTER\_UNSPLIT(id, func)}}{The splitter has been just unsplit. Processes a wxEVT\_COMMAND\_SPLITTER\_UNSPLIT event. This event can't diff --git a/src/generic/splitter.cpp b/src/generic/splitter.cpp index 0c04fde000..df06c7d5e0 100644 --- a/src/generic/splitter.cpp +++ b/src/generic/splitter.cpp @@ -383,7 +383,7 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) } else { - SetSashPositionAndNotify(posSashNew); + DoSetSashPosition(posSashNew); m_needUpdating = true; } } @@ -631,13 +631,15 @@ void wxSplitterWindow::SetSashPositionAndNotify(int sashPos) // SetSashPosition(): m_requestedSashPosition = INT_MAX; - if ( DoSetSashPosition(sashPos) ) - { - wxSplitterEvent event(wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, this); - event.m_data.pos = m_sashPosition; + // note that we must send the event in any case, i.e. even if the sash + // position hasn't changed and DoSetSashPosition() returns false because we + // must generate a CHANGED event at the end of resizing + DoSetSashPosition(sashPos); - (void)DoSendEvent(event); - } + wxSplitterEvent event(wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, this); + event.m_data.pos = m_sashPosition; + + (void)DoSendEvent(event); } // Position and size subwindows.