From 1ef916086d8d78f616cf1c753169e303f6312afc Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Fri, 3 May 2024 18:37:13 +0100 Subject: [PATCH] pruneItemLayers() is not the right place to filter refdes & value. (And we already filter all mandatory fields in pasteFootprintItemsToFootprintEditor() anyway.) Also, don't nuke a footprint which contains only fields during a paste. Fixes https://gitlab.com/kicad/code/kicad/-/issues/17937 (cherry picked from commit eb13dec265d297de422122bb5709cfc8bdab5057) --- pcbnew/tools/pcb_control.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/pcbnew/tools/pcb_control.cpp b/pcbnew/tools/pcb_control.cpp index b459614622..6c20b77aa2 100644 --- a/pcbnew/tools/pcb_control.cpp +++ b/pcbnew/tools/pcb_control.cpp @@ -851,14 +851,7 @@ void PCB_CONTROL::pruneItemLayers( std::vector& aItems ) // NOTE: all traversals from the back as processFPItem() might delete the item for( int ii = static_cast( fp->Fields().size() ) - 1; ii >= 0; ii-- ) - { - PCB_FIELD* field = fp->Fields()[ii]; - - if( field->GetId() == REFERENCE_FIELD || field->GetId() == VALUE_FIELD ) - continue; - - processFPItem( fp, field ); - } + processFPItem( fp, fp->Fields()[ii] ); for( int ii = static_cast( fp->Pads().size() ) - 1; ii >= 0; ii-- ) processFPItem( fp, fp->Pads()[ii] ); @@ -869,7 +862,10 @@ void PCB_CONTROL::pruneItemLayers( std::vector& aItems ) for( int ii = static_cast( fp->GraphicalItems().size() ) - 1; ii >= 0; ii-- ) processFPItem( fp, fp->GraphicalItems()[ii] ); - if( fp->GraphicalItems().size() || fp->Pads().size() || fp->Zones().size() ) + if( fp->Fields().size() + || fp->GraphicalItems().size() + || fp->Pads().size() + || fp->Zones().size() ) { returnItems.push_back( fp ); } @@ -1026,7 +1022,7 @@ int PCB_CONTROL::Paste( const TOOL_EVENT& aEvent ) cancelled = !placeBoardItems( &commit, pastedItems, true, true, mode == PASTE_MODE::UNIQUE_ANNOTATIONS ); } - else + else // isBoardEditor { if( mode == PASTE_MODE::REMOVE_ANNOTATIONS ) {