From 2d3b8d6393da0f2359ef47588ab1235ee688bb24 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Wed, 14 Sep 2022 12:23:59 +0100 Subject: [PATCH] Fix logic around Select All inside an entered group. Fixes https://gitlab.com/kicad/code/kicad/issues/12411 --- pcbnew/tools/pcb_selection_tool.cpp | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/pcbnew/tools/pcb_selection_tool.cpp b/pcbnew/tools/pcb_selection_tool.cpp index 0e022044b6..a3036fcc17 100644 --- a/pcbnew/tools/pcb_selection_tool.cpp +++ b/pcbnew/tools/pcb_selection_tool.cpp @@ -2844,28 +2844,26 @@ void PCB_SELECTION_TOOL::FilterCollectorForHierarchy( GENERAL_COLLECTOR& aCollec if( !m_isFootprintEditor && parent && parent->Type() == PCB_FOOTPRINT_T ) start = parent; + // If a group is entered, disallow selections of objects outside the group. + if( m_enteredGroup && !PCB_GROUP::WithinScope( item, m_enteredGroup, m_isFootprintEditor ) ) + { + aCollector.Remove( item ); + continue; + } + // If any element is a member of a group, replace those elements with the top containing // group. - PCB_GROUP* aTop = PCB_GROUP::TopLevelGroup( start, m_enteredGroup, m_isFootprintEditor ); - - if( aTop ) + if( PCB_GROUP* top = PCB_GROUP::TopLevelGroup( start, m_enteredGroup, m_isFootprintEditor ) ) { - if( aTop != item ) + if( top != item ) { - toAdd.insert( aTop ); - aTop->SetFlags( CANDIDATE ); + toAdd.insert( top ); + top->SetFlags(CANDIDATE ); aCollector.Remove( item ); continue; } } - else if( m_enteredGroup - && !PCB_GROUP::WithinScope( item, m_enteredGroup, m_isFootprintEditor ) ) - { - // If a group is entered, disallow selections of objects outside the group. - aCollector.Remove( item ); - continue; - } // Footprints are a bit easier as they can't be nested. if( parent && ( parent->GetFlags() & CANDIDATE ) )