diff --git a/eeschema/tools/sch_move_tool.cpp b/eeschema/tools/sch_move_tool.cpp index 6fd173863b..bcadc9e0ce 100644 --- a/eeschema/tools/sch_move_tool.cpp +++ b/eeschema/tools/sch_move_tool.cpp @@ -381,11 +381,6 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent ) // zero, then the rest of the move. std::vector splitMoves; - // Note, this was originally implemented as std::signbit( m_moveOffset.x ) != - // std::signbit( ( m_moveOffset + delta ).x ). The binary logic XORs both - // values and if the signbit is set in the result, that means that one value - // had the sign bit set and one did not, hence the result is negative. - // We need to avoid std::signbit as it is not supported by MSVC because reasons if( alg::signbit( m_moveOffset.x ) != alg::signbit( ( m_moveOffset + delta ).x ) ) { splitMoves.emplace_back( VECTOR2I( -1 * m_moveOffset.x, 0 ) ); @@ -834,6 +829,17 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent ) } while( ( evt = Wait() ) ); //Should be assignment not equality test + // Create a selection of original selection, drag selected/changed items, and new + // bend lines for later before we clear them in the commit. We'll need these + // to check for new junctions needed, etc. + EE_SELECTION selectionCopy( selection ); + + for( SCH_LINE* line : m_newDragLines ) + selectionCopy.Add( line ); + + for( SCH_LINE* line : m_changedDragLines ) + selectionCopy.Add( line ); + // Save whatever new bend lines and changed lines survived the drag commitDragLines(); @@ -860,7 +866,6 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent ) for( EDA_ITEM* item : selection ) updateItem( item, true ); - EE_SELECTION selectionCopy( selection ); m_selectionTool->RemoveItemsFromSel( &m_dragAdditions, QUIET_MODE ); // If we move items away from a junction, we _may_ want to add a junction there