From 9fb07d886e19037166bb631bd913047503ce01f4 Mon Sep 17 00:00:00 2001
From: Jeff Young <jeff@rokeby.ie>
Date: Wed, 5 Jun 2024 10:47:50 +0100
Subject: [PATCH] PCB_GENERATOR_Ts are PCB_GROUP_Ts too.

Also, an item must already be in a commit to add it to a group.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/17595
---
 pcbnew/board_commit.cpp                  | 20 +-------------------
 pcbnew/generators/pcb_tuning_pattern.cpp |  5 ++---
 2 files changed, 3 insertions(+), 22 deletions(-)

diff --git a/pcbnew/board_commit.cpp b/pcbnew/board_commit.cpp
index f0111d595c..333f98e1a3 100644
--- a/pcbnew/board_commit.cpp
+++ b/pcbnew/board_commit.cpp
@@ -291,7 +291,7 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
                 }
             }
 
-            if( boardItem->Type() == PCB_GROUP_T )
+            if( boardItem->Type() == PCB_GROUP_T || boardItem->Type() == PCB_GENERATOR_T )
                 addedGroup = static_cast<PCB_GROUP*>( boardItem );
 
             if( m_isBoardEditor && autofillZones && boardItem->Type() != PCB_MARKER_T )
@@ -352,24 +352,6 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
             case PCB_MARKER_T:           // a marker used to show something
             case PCB_ZONE_T:
             case PCB_FOOTPRINT_T:
-                if( view )
-                    view->Remove( boardItem );
-
-                if( !( changeFlags & CHT_DONE ) )
-                {
-                    if( parentFP )
-                    {
-                        parentFP->Remove( boardItem );
-                    }
-                    else
-                    {
-                        board->Remove( boardItem, REMOVE_MODE::BULK );
-                        bulkRemovedItems.push_back( boardItem );
-                    }
-                }
-
-                break;
-
             case PCB_GROUP_T:
                 if( view )
                     view->Remove( boardItem );
diff --git a/pcbnew/generators/pcb_tuning_pattern.cpp b/pcbnew/generators/pcb_tuning_pattern.cpp
index abfe4cec0a..dfec05050d 100644
--- a/pcbnew/generators/pcb_tuning_pattern.cpp
+++ b/pcbnew/generators/pcb_tuning_pattern.cpp
@@ -1456,17 +1456,16 @@ void PCB_TUNING_PATTERN::EditPush( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_C
 
         for( BOARD_ITEM* item : routerAddedItems )
         {
+            aCommit->Add( item );
+
             if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( item ) )
             {
                 if( bounds.PointInside( track->GetStart(), epsilon )
                     && bounds.PointInside( track->GetEnd(), epsilon ) )
                 {
-                    AddItem( item );
                     aCommit->Stage( item, CHT_GROUP );
                 }
             }
-
-            aCommit->Add( item );
         }
     }