diff --git a/pcbnew/array_creator.cpp b/pcbnew/array_creator.cpp index 5787e35dee..41c9a5b89c 100644 --- a/pcbnew/array_creator.cpp +++ b/pcbnew/array_creator.cpp @@ -27,7 +27,6 @@ */ #include "array_creator.h" - #include #include @@ -41,7 +40,6 @@ void ARRAY_CREATOR::Invoke() if( numItems == 0 ) return; - BOARD_COMMIT commit( &m_parent ); MODULE* const module = getModule(); const bool isModuleEditor = module != NULL; @@ -56,6 +54,8 @@ void ARRAY_CREATOR::Invoke() if( ret != wxID_OK || array_opts == NULL ) return; + BOARD_COMMIT commit( &m_parent ); + for ( int i = 0; i < numItems; ++i ) { BOARD_ITEM* item = getNthItemToArray( i ); diff --git a/pcbnew/tools/edit_tool.cpp b/pcbnew/tools/edit_tool.cpp index 6ff32b4106..2021c09f86 100644 --- a/pcbnew/tools/edit_tool.cpp +++ b/pcbnew/tools/edit_tool.cpp @@ -828,7 +828,7 @@ int EDIT_TOOL::Duplicate( const TOOL_EVENT& aEvent ) } return 0; -}; +} class GAL_ARRAY_CREATOR: public ARRAY_CREATOR @@ -873,10 +873,20 @@ private: return wxPoint( rp.x, rp.y ); } - void prePushAction( BOARD_ITEM* new_item ) override + void prePushAction( BOARD_ITEM* aItem ) override { - m_parent.GetToolManager()->RunAction( PCB_ACTIONS::unselectItem, - true, new_item ); + // Because aItem is/can be created from a selected item, and inherits from + // it this state, reset the selected stated of aItem: + aItem->ClearSelected(); + + if( aItem->Type() == PCB_MODULE_T ) + { + static_cast( aItem )->RunOnChildren( [&] ( BOARD_ITEM* item ) + { + item->ClearSelected(); + } + ); + } } void postPushAction( BOARD_ITEM* new_item ) override diff --git a/pcbnew/tools/pcbnew_control.cpp b/pcbnew/tools/pcbnew_control.cpp index c4725c65ab..c80736f448 100644 --- a/pcbnew/tools/pcbnew_control.cpp +++ b/pcbnew/tools/pcbnew_control.cpp @@ -906,7 +906,7 @@ int PCBNEW_CONTROL::AppendBoard( const TOOL_EVENT& aEvent ) board->GetRatsnest()->ProcessBoard(); // Start dragging the appended board - if( selection.Front() ) // be sure at least one item is selected + if( selection.Size() ) // be sure at least one item is loaded { // Inform other potentially interested tools m_toolMgr->ProcessEvent( SELECTION_TOOL::SelectedEvent );