Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 22686) +++ trunk/src/obj_subc.c (revision 22687) @@ -1877,7 +1877,7 @@ return val; } -pcb_subc_t *pcb_subc_replace(pcb_board_t *pcb, pcb_subc_t *dst, pcb_subc_t *src) +pcb_subc_t *pcb_subc_replace(pcb_board_t *pcb, pcb_subc_t *dst, pcb_subc_t *src, pcb_bool add_undo) { pcb_data_t *data = dst->parent.data; pcb_subc_t *placed; @@ -1913,5 +1913,9 @@ if (rot != 0) pcb_subc_rotate(placed, ox, oy, cos(rot / PCB_RAD_TO_DEG), sin(rot / PCB_RAD_TO_DEG), rot); + if (add_undo) + pcb_undo_add_obj_to_create(PCB_OBJ_SUBC, placed, placed, placed); + + return placed; } Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 22686) +++ trunk/src/obj_subc.h (revision 22687) @@ -165,7 +165,7 @@ /* Replace dst with a copy of src in place (preserving location and orientation and attributes */ -pcb_subc_t *pcb_subc_replace(pcb_board_t *pcb, pcb_subc_t *dst, pcb_subc_t *src); +pcb_subc_t *pcb_subc_replace(pcb_board_t *pcb, pcb_subc_t *dst, pcb_subc_t *src, pcb_bool add_undo); /*** loops ***/ Index: trunk/src/rats_patch.c =================================================================== --- trunk/src/rats_patch.c (revision 22686) +++ trunk/src/rats_patch.c (revision 22687) @@ -468,7 +468,7 @@ if (!PCB_FLAG_TEST(PCB_FLAG_SELECTED, subc) || (subc->refdes == NULL)) continue; - placed = pcb_subc_replace(PCB, subc, news); + placed = pcb_subc_replace(PCB, subc, news, pcb_true); if (placed != NULL) { pcb_ratspatch_append_optimize(PCB, RATP_CHANGE_ATTRIB, placed->refdes, "footprint", fpname); changed = 1; @@ -477,7 +477,7 @@ PCB_END_LOOP; break; case F_Object: - placed = pcb_subc_replace(PCB, olds, news); + placed = pcb_subc_replace(PCB, olds, news, pcb_true); if (placed != NULL) { pcb_ratspatch_append_optimize(PCB, RATP_CHANGE_ATTRIB, placed->refdes, "footprint", fpname); changed = 1;