X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f938940e0935f835ccf38c242ad1469aeb800048..bc6e28d55ac11ae700a304dd2ce3f4e20923ca88:/src/generic/splitter.cpp diff --git a/src/generic/splitter.cpp b/src/generic/splitter.cpp index 58ec6da0e3..22c09bc9ff 100644 --- a/src/generic/splitter.cpp +++ b/src/generic/splitter.cpp @@ -50,12 +50,12 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_SPLITTER_UNSPLIT) IMPLEMENT_DYNAMIC_CLASS(wxSplitterWindow, wxWindow) /* - TODO PROPERTIES - style wxSP_3D - sashpos (long , 0 ) - minsize (long -1 ) - object, object_ref - orientation + TODO PROPERTIES + style wxSP_3D + sashpos (long , 0 ) + minsize (long -1 ) + object, object_ref + orientation */ IMPLEMENT_DYNAMIC_CLASS(wxSplitterEvent, wxNotifyEvent) @@ -183,7 +183,7 @@ void wxSplitterWindow::OnInternalIdle() SizeWindows(); return; // it won't needUpdating in this case } - + if (m_needUpdating) SizeWindows(); } @@ -208,7 +208,7 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) { // Start the drag now m_dragMode = wxSPLIT_DRAG_DRAGGING; - + // Capture mouse and set the cursor CaptureMouse(); SetResizeCursor(); @@ -233,7 +233,7 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event) { // We can stop dragging now and see what we've got. m_dragMode = wxSPLIT_DRAG_NONE; - + // Release mouse and unset the cursor ReleaseMouse(); SetCursor(* wxSTANDARD_CURSOR); @@ -423,7 +423,7 @@ bool wxSplitterWindow::SashHitTest(int x, int y, int tolerance) int z = m_splitMode == wxSPLIT_VERTICAL ? x : y; int hitMin = m_sashPosition - tolerance; int hitMax = m_sashPosition + GetSashSize() + tolerance; - + return z >= hitMin && z <= hitMax; } @@ -582,6 +582,12 @@ bool wxSplitterWindow::DoSetSashPosition(int sashPos) void wxSplitterWindow::SetSashPositionAndNotify(int sashPos) { + // we must reset the request here, otherwise the sash would be stuck at + // old position if the user attempted to move the sash after invalid + // (e.g. smaller than minsize) sash position was requested using + // SetSashPosition(): + m_requestedSashPosition = INT_MAX; + if ( DoSetSashPosition(sashPos) ) { wxSplitterEvent event(wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, this); @@ -694,7 +700,7 @@ bool wxSplitterWindow::DoSplit(wxSplitMode mode, // right now (e.g. because the window is too small) m_requestedSashPosition = sashPosition; m_checkRequestedSashPosition = false; - + DoSetSashPosition(ConvertSashPosition(sashPosition)); SizeWindows(); @@ -792,7 +798,7 @@ void wxSplitterWindow::SetSashPosition(int position, bool redraw) // right now (e.g. because the window is too small) m_requestedSashPosition = position; m_checkRequestedSashPosition = false; - + DoSetSashPosition(ConvertSashPosition(position)); if ( redraw )