From: Vadim Zeitlin Date: Tue, 14 May 2002 18:10:04 +0000 (+0000) Subject: don't send SPLITTER_POS_CHANGED events when the splitter position was changed from... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/63ec9dbbacaf363b67aa540896a2795c39dfe74b don't send SPLITTER_POS_CHANGED events when the splitter position was changed from the program itself git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15565 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/generic/splitter.h b/include/wx/generic/splitter.h index 3667538fda..beaba72ac5 100644 --- a/include/wx/generic/splitter.h +++ b/include/wx/generic/splitter.h @@ -244,7 +244,12 @@ protected: int ConvertSashPosition(int sashPos) const; // set the real sash position, sashPos here must be positive - void DoSetSashPosition(int sashPos); + // + // returns TRUE if the sash position has been changed, FALSE otherwise + bool DoSetSashPosition(int sashPos); + + // set the sash position and send an event about it having been changed + void SetSashPositionAndNotify(int sashPos); // set the cursor appropriate for the current split mode void SetResizeCursor(); diff --git a/src/generic/splitter.cpp b/src/generic/splitter.cpp index 3da3fa0472..c6841bc9dc 100644 --- a/src/generic/splitter.cpp +++ b/src/generic/splitter.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: splitter.cpp +// Name: src/generic/splitter.cpp // Purpose: wxSplitterWindow implementation // Author: Julian Smart // Modified by: @@ -243,7 +243,7 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) m_windowOne = m_windowTwo; m_windowTwo = (wxWindow *) NULL; OnUnsplit(removedWindow); - DoSetSashPosition(0); + SetSashPositionAndNotify(0); } else if ( posSashNew == GetWindowSize() ) { @@ -251,16 +251,16 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) wxWindow *removedWindow = m_windowTwo; m_windowTwo = (wxWindow *) NULL; OnUnsplit(removedWindow); - DoSetSashPosition(0); + SetSashPositionAndNotify(0); } else { - DoSetSashPosition(posSashNew); + SetSashPositionAndNotify(posSashNew); } } else { - DoSetSashPosition(posSashNew); + SetSashPositionAndNotify(posSashNew); } SizeWindows(); @@ -343,7 +343,7 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) } else { - DoSetSashPosition(posSashNew); + SetSashPositionAndNotify(posSashNew); m_needUpdating = TRUE; } } @@ -384,7 +384,7 @@ void wxSplitterWindow::OnSize(wxSizeEvent& event) iconized = FALSE; } #endif - + if ( iconized ) { event.Skip(); @@ -399,12 +399,12 @@ void wxSplitterWindow::OnSize(wxSizeEvent& event) if ( m_splitMode == wxSPLIT_VERTICAL ) { if ( m_sashPosition >= (cw - 5) ) - DoSetSashPosition(wxMax(10, cw - 40)); + SetSashPositionAndNotify(wxMax(10, cw - 40)); } else // m_splitMode == wxSPLIT_HORIZONTAL { if ( m_sashPosition >= (ch - 5) ) - DoSetSashPosition(wxMax(10, ch - 40)); + SetSashPositionAndNotify(wxMax(10, ch - 40)); } } @@ -712,14 +712,22 @@ int wxSplitterWindow::AdjustSashPosition(int sashPos) const return sashPos; } -void wxSplitterWindow::DoSetSashPosition(int sashPos) +bool wxSplitterWindow::DoSetSashPosition(int sashPos) { int newSashPosition = AdjustSashPosition(sashPos); - if ( newSashPosition != m_sashPosition ) - { - m_sashPosition = newSashPosition; + if ( newSashPosition == m_sashPosition ) + return FALSE; + m_sashPosition = newSashPosition; + + return TRUE; +} + +void wxSplitterWindow::SetSashPositionAndNotify(int sashPos) +{ + if ( DoSetSashPosition(sashPos) ) + { wxSplitterEvent event(wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, this); event.m_data.pos = m_sashPosition; @@ -753,7 +761,7 @@ void wxSplitterWindow::SizeWindows() if ( GetWindow1() && !GetWindow2() ) { - GetWindow1()->SetSize(GetBorderSize(), GetBorderSize(), + GetWindow1()->SetSize(GetBorderSize(), GetBorderSize(), w - 2*GetBorderSize(), h - 2*GetBorderSize()); } else if ( GetWindow1() && GetWindow2() )