Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 12374) +++ trunk/src/buffer.c (revision 12375) @@ -692,7 +692,7 @@ } PCB_END_LOOP; - /* finally the vias */ + /* finally the vias and padstacks */ if (pcb->ViaOn) { changed |= (pinlist_length(&(PCB_PASTEBUFFER->Data->Via)) != 0); PCB_VIA_LOOP(PCB_PASTEBUFFER->Data); @@ -702,6 +702,15 @@ PCB_END_LOOP; } + if (pcb->ViaOn) { + changed |= (padstacklist_length(&(PCB_PASTEBUFFER->Data->padstack)) != 0); + PCB_PADSTACK_LOOP(PCB_PASTEBUFFER->Data); + { + pcb_padstackop_copy(&ctx, padstack); + } + PCB_END_LOOP; + } + if (changed) { pcb_draw(); pcb_undo_inc_serial(); Index: trunk/src/obj_padstack_op.c =================================================================== --- trunk/src/obj_padstack_op.c (revision 12374) +++ trunk/src/obj_padstack_op.c (revision 12375) @@ -65,9 +65,15 @@ void *pcb_padstackop_copy(pcb_opctx_t *ctx, pcb_padstack_t *ps) { pcb_padstack_t *nps; - pcb_data_t *data = ps->parent.data; - assert(ps->parent_type = PCB_PARENT_DATA); - nps = pcb_padstack_new(data, ps->proto, ps->x + ctx->copy.DeltaX, ps->y + ctx->copy.DeltaY, pcb_flag_mask(ps->Flags, PCB_FLAG_FOUND)); + pcb_data_t *data = ctx->copy.pcb->Data; + pcb_cardinal_t npid; + pcb_padstack_proto_t *proto = pcb_padstack_get_proto(ps); + + if (proto == NULL) + return NULL; + npid = pcb_padstack_proto_insert_dup(data, proto, 1); + + nps = pcb_padstack_new(data, npid, ps->x + ctx->copy.DeltaX, ps->y + ctx->copy.DeltaY, pcb_flag_mask(ps->Flags, PCB_FLAG_FOUND)); if (nps == NULL) return NULL;