diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index b324ac86c5..17cae6e47e 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -3712,29 +3712,31 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event ) // 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); + // insert the column being dragged either before or after + // it, depending on where exactly it was dropped, so + // 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 onNearPart; - const int middle = GetColLeft(colValid) + - GetColWidth(colValid)/2; - if ( GetLayoutDirection() == wxLayout_LeftToRight ) - onNearPart = (x <= middle); - else // wxLayout_RightToLeft - onNearPart = (x > middle); + // and check if we're on the "near" (usually left but right + // in RTL case) part of the column + bool onNearPart; + const int middle = GetColLeft(colValid) + + GetColWidth(colValid)/2; + if ( GetLayoutDirection() == wxLayout_LeftToRight ) + onNearPart = (x <= middle); + else // wxLayout_RightToLeft + onNearPart = (x > middle); - if ( onNearPart ) - pos--; - } + // adjust for the column being dragged itself + if ( pos < GetColPos(m_dragRowOrCol) ) + pos++; + + // and if it's on the near part of the target column, + // insert it before it, not after + if ( onNearPart ) + pos--; DoEndMoveCol(pos); }