From 7c3310596eab058b89e7946625eb20b293860367 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 3 Jun 2010 10:35:53 +0000 Subject: [PATCH] Drop the column being dragged at the correct position in wxGrid. The column was being always dropped after the column at drop position but this was incorrect and didn't correspond to the visual feedback drawn by wxHeaderCtrl: if the drop position is over the "near" part of the column, the column should be dropped before it instead. Do the check for this in wxGrid code too now. Closes #12120. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64475 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/generic/grid.cpp | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 315fbda05d..074490df82 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -3469,7 +3469,34 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event ) } else { - DoEndMoveCol(XToPos(x)); + // get the position of the column we're over + int pos = XToPos(x); + + // we may need to adjust the drop position but don't bother + // checking for it if we can't anyhow + if ( pos > 1 ) + { + // also find the index of the column we're over: notice + // that the existing "col" variable may be invalid but + // we need a valid one here + const int colValid = GetColAt(pos); + + // if we're on the "near" (usually left but right in + // RTL case) part of the column, the actual position we + // should be placed in is actually the one before it + bool near; + const int middle = GetColLeft(colValid) + + GetColWidth(colValid)/2; + if ( GetLayoutDirection() == wxLayout_LeftToRight ) + near = x <= middle; + else // wxLayout_RightToLeft + near = x > middle; + + if ( near ) + pos--; + } + + DoEndMoveCol(pos); } break; -- 2.45.2