Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 28726) +++ trunk/src/buffer.c (revision 28727) @@ -618,7 +618,7 @@ return (pcb_object_operation(&AddBufferFunctions, &ctx, Type, Ptr1, Ptr2, Ptr3)); } -pcb_bool pcb_buffer_copy_to_layout(pcb_board_t *pcb, pcb_coord_t X, pcb_coord_t Y) +pcb_bool pcb_buffer_copy_to_layout(pcb_board_t *pcb, pcb_coord_t X, pcb_coord_t Y, pcb_bool keep_id) { pcb_cardinal_t i; pcb_bool changed = pcb_false; @@ -973,7 +973,7 @@ oldx = x; oldy = y; - if (pcb_buffer_copy_to_layout(PCB, x, y)) + if (pcb_buffer_copy_to_layout(PCB, x, y, pcb_false)) pcb_board_set_changed_flag(pcb_true); } break; Index: trunk/src/buffer.h =================================================================== --- trunk/src/buffer.h (revision 28726) +++ trunk/src/buffer.h (revision 28727) @@ -90,8 +90,11 @@ fgw_error_t pcb_act_LoadFootprint(fgw_arg_t *res, int oargc, fgw_arg_t *oargv); /* pastes the contents of the buffer to the layout. Only visible objects - are handled by the routine. */ -pcb_bool pcb_buffer_copy_to_layout(pcb_board_t *pcb, pcb_coord_t X, pcb_coord_t Y); + are handled by the routine. + If keep_id is true, do not change object IDs - this should be used only + in one specific case, when selected objects are moved using the buffer + (which means exactly 1 copy is made and the original version is removed). */ +pcb_bool pcb_buffer_copy_to_layout(pcb_board_t *pcb, pcb_coord_t X, pcb_coord_t Y, pcb_bool keep_id); /* change the side of all objects in the buffer */ void pcb_buffer_flip_side(pcb_board_t *pcb, pcb_buffer_t *Buffer); Index: trunk/src/object_act.c =================================================================== --- trunk/src/object_act.c (revision 28726) +++ trunk/src/object_act.c (revision 28727) @@ -528,7 +528,7 @@ /* Place components onto center of board. */ pcb_crosshair.Y = ny; /* flipping side depends on the crosshair unfortunately */ - if (pcb_buffer_copy_to_layout(pcb, nx, ny)) + if (pcb_buffer_copy_to_layout(pcb, nx, ny, pcb_false)) pcb_board_set_changed_flag(pcb_true); } else if (sc && subc_differs(sc, footprint)) { @@ -589,7 +589,7 @@ if (paste_ok) { if (sc != NULL) pcb_subc_remove(sc); - if (pcb_buffer_copy_to_layout(pcb, orig_cx, orig_cy)) + if (pcb_buffer_copy_to_layout(pcb, orig_cx, orig_cy, pcb_false)) pcb_board_set_changed_flag(pcb_true); } } Index: trunk/src/select_act.c =================================================================== --- trunk/src/select_act.c (revision 28726) +++ trunk/src/select_act.c (revision 28727) @@ -159,7 +159,7 @@ pcb_remove_selected(pcb_false); pcb_subc_convert_from_buffer(PCB_PASTEBUFFER); pcb_undo_restore_serial(); - pcb_buffer_copy_to_layout(PCB, x, y); + pcb_buffer_copy_to_layout(PCB, x, y, pcb_false); pcb_buffer_set_number(pcb_tool_note.Buffer); } break; Index: trunk/src/tool_buffer.c =================================================================== --- trunk/src/tool_buffer.c (revision 28726) +++ trunk/src/tool_buffer.c (revision 28727) @@ -64,7 +64,7 @@ return; } - if (pcb_buffer_copy_to_layout(pcb, pcb_crosshair.AttachedObject.tx, pcb_crosshair.AttachedObject.ty)) { + if (pcb_buffer_copy_to_layout(pcb, pcb_crosshair.AttachedObject.tx, pcb_crosshair.AttachedObject.ty, pcb_false)) { pcb_board_set_changed_flag(pcb_true); pcb_gui->invalidate_all(pcb_gui); } Index: trunk/src_plugins/extedit/extedit.c =================================================================== --- trunk/src_plugins/extedit/extedit.c (revision 28726) +++ trunk/src_plugins/extedit/extedit.c (revision 28727) @@ -315,7 +315,7 @@ pcb_remove_selected(pcb_true); if (paste) { pcb_undo_save_serial(); - pcb_buffer_copy_to_layout(PCB, pastex, pastey); + pcb_buffer_copy_to_layout(PCB, pastex, pastey, pcb_false); pcb_undo_restore_serial(); pcb_remove_object(type, ptr1, ptr2, ptr3); pcb_undo_inc_serial();