diff --git a/eeschema/dialogs/dialog_change_symbols.cpp b/eeschema/dialogs/dialog_change_symbols.cpp
index 4d6870cb78..d24a86728e 100644
--- a/eeschema/dialogs/dialog_change_symbols.cpp
+++ b/eeschema/dialogs/dialog_change_symbols.cpp
@@ -73,7 +73,7 @@ DIALOG_CHANGE_SYMBOLS::DIALOG_CHANGE_SYMBOLS( SCH_EDIT_FRAME* aParent, SCH_SYMBO
SCH_SHEET_PATH* currentSheet = &aParent->Schematic().CurrentSheet();
if( m_mode == MODE::CHANGE )
- m_matchBySelection->SetLabel( _( "Change selected Symbol" ) );
+ m_matchBySelection->SetLabel( _( "Change selected symbol(s)" ) );
m_newId->AppendText( FROM_UTF8( m_symbol->GetLibId().Format().c_str() ) );
m_specifiedReference->ChangeValue( m_symbol->GetRef( currentSheet ) );
@@ -395,7 +395,7 @@ bool DIALOG_CHANGE_SYMBOLS::isMatch( SCH_SYMBOL* aSymbol, SCH_SHEET_PATH* aInsta
}
else if( m_matchBySelection->GetValue() )
{
- return aSymbol == m_symbol;
+ return aSymbol == m_symbol || aSymbol->IsSelected();
}
else if( m_matchByReference->GetValue() )
{
diff --git a/eeschema/dialogs/dialog_change_symbols_base.cpp b/eeschema/dialogs/dialog_change_symbols_base.cpp
index a91cdae16b..96fd2e1d55 100644
--- a/eeschema/dialogs/dialog_change_symbols_base.cpp
+++ b/eeschema/dialogs/dialog_change_symbols_base.cpp
@@ -27,7 +27,7 @@ DIALOG_CHANGE_SYMBOLS_BASE::DIALOG_CHANGE_SYMBOLS_BASE( wxWindow* parent, wxWind
m_matchAll = new wxRadioButton( this, wxID_ANY, _("Update all symbols in schematic"), wxDefaultPosition, wxDefaultSize, 0 );
m_matchSizer->Add( m_matchAll, wxGBPosition( 0, 0 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
- m_matchBySelection = new wxRadioButton( this, wxID_ANY, _("Update selected symbol"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_matchBySelection = new wxRadioButton( this, wxID_ANY, _("Update selected symbol(s)"), wxDefaultPosition, wxDefaultSize, 0 );
m_matchSizer->Add( m_matchBySelection, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
m_matchByReference = new wxRadioButton( this, wxID_ANY, _("Update symbols matching reference designator:"), wxDefaultPosition, wxDefaultSize, 0 );
diff --git a/eeschema/dialogs/dialog_change_symbols_base.fbp b/eeschema/dialogs/dialog_change_symbols_base.fbp
index ba103654a5..1c8ed59daa 100644
--- a/eeschema/dialogs/dialog_change_symbols_base.fbp
+++ b/eeschema/dialogs/dialog_change_symbols_base.fbp
@@ -185,7 +185,7 @@
0
0
wxID_ANY
- Update selected symbol
+ Update selected symbol(s)
0
diff --git a/pcbnew/dialogs/dialog_exchange_footprints.cpp b/pcbnew/dialogs/dialog_exchange_footprints.cpp
index 6af3c21deb..76e33f671d 100644
--- a/pcbnew/dialogs/dialog_exchange_footprints.cpp
+++ b/pcbnew/dialogs/dialog_exchange_footprints.cpp
@@ -73,7 +73,7 @@ DIALOG_EXCHANGE_FOOTPRINTS::DIALOG_EXCHANGE_FOOTPRINTS( PCB_EDIT_FRAME* aParent,
{
SetTitle( _( "Change Footprints" ) );
m_matchAll->SetLabel( _( "Change all footprints on board" ) );
- m_matchSelected->SetLabel( _( "Change selected footprint" ) );
+ m_matchSelected->SetLabel( _( "Change selected footprint(s)" ) );
m_matchSpecifiedRef->SetLabel( _( "Change footprints matching reference designator:" ) );
m_matchSpecifiedValue->SetLabel( _( "Change footprints matching value:" ) );
m_matchSpecifiedID->SetLabel( _( "Change footprints with library id:" ) );
@@ -190,7 +190,7 @@ bool DIALOG_EXCHANGE_FOOTPRINTS::isMatch( FOOTPRINT* aFootprint )
case ID_MATCH_FP_ALL:
return true;
case ID_MATCH_FP_SELECTED:
- return aFootprint == m_currentFootprint;
+ return aFootprint == m_currentFootprint || aFootprint->IsSelected();
case ID_MATCH_FP_REF:
return WildCompareString( m_specifiedRef->GetValue(), aFootprint->GetReference(), false );
case ID_MATCH_FP_VAL:
diff --git a/pcbnew/dialogs/dialog_exchange_footprints_base.cpp b/pcbnew/dialogs/dialog_exchange_footprints_base.cpp
index 8a3fb65271..5974427738 100644
--- a/pcbnew/dialogs/dialog_exchange_footprints_base.cpp
+++ b/pcbnew/dialogs/dialog_exchange_footprints_base.cpp
@@ -24,7 +24,7 @@ DIALOG_EXCHANGE_FOOTPRINTS_BASE::DIALOG_EXCHANGE_FOOTPRINTS_BASE( wxWindow* pare
m_matchAll = new wxRadioButton( this, wxID_ANY, _("Update all footprints on board"), wxDefaultPosition, wxDefaultSize, 0 );
m_upperSizer->Add( m_matchAll, wxGBPosition( 0, 0 ), wxGBSpan( 1, 2 ), wxEXPAND|wxALL, 5 );
- m_matchSelected = new wxRadioButton( this, wxID_ANY, _("Update selected footprint"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_matchSelected = new wxRadioButton( this, wxID_ANY, _("Update selected footprint(s)"), wxDefaultPosition, wxDefaultSize, 0 );
m_upperSizer->Add( m_matchSelected, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
m_matchSpecifiedRef = new wxRadioButton( this, wxID_ANY, _("Update footprints matching reference designator:"), wxDefaultPosition, wxDefaultSize, 0 );
diff --git a/pcbnew/dialogs/dialog_exchange_footprints_base.fbp b/pcbnew/dialogs/dialog_exchange_footprints_base.fbp
index fc68ab8b40..af9142b667 100644
--- a/pcbnew/dialogs/dialog_exchange_footprints_base.fbp
+++ b/pcbnew/dialogs/dialog_exchange_footprints_base.fbp
@@ -177,7 +177,7 @@
0
0
wxID_ANY
- Update selected footprint
+ Update selected footprint(s)
0
diff --git a/pcbnew/tools/global_edit_tool.cpp b/pcbnew/tools/global_edit_tool.cpp
index dde81fd7b2..b4586cea30 100644
--- a/pcbnew/tools/global_edit_tool.cpp
+++ b/pcbnew/tools/global_edit_tool.cpp
@@ -94,10 +94,6 @@ int GLOBAL_EDIT_TOOL::ExchangeFootprints( const TOOL_EVENT& aEvent )
else
wxFAIL_MSG( "ExchangeFootprints: unexpected action" );
- // Footprint exchange could remove footprints, so they have to be
- // removed from the selection first
- m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
-
// invoke the exchange dialog process
{
PCB_EDIT_FRAME* editFrame = getEditFrame();