Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 20544) +++ trunk/src/buffer.c (revision 20545) @@ -127,7 +127,7 @@ } /* add (or move) selected */ -static void pcb_buffer_toss_selected(pcb_opfunc_t *fnc, pcb_board_t *pcb, pcb_buffer_t *Buffer, pcb_coord_t X, pcb_coord_t Y, pcb_bool LeaveSelected) +static void pcb_buffer_toss_selected(pcb_opfunc_t *fnc, pcb_board_t *pcb, pcb_buffer_t *Buffer, pcb_coord_t X, pcb_coord_t Y, pcb_bool LeaveSelected, pcb_bool on_locked_too) { pcb_opctx_t ctx; @@ -144,7 +144,7 @@ pcb_notify_crosshair_change(pcb_false); ctx.buffer.src = pcb->Data; ctx.buffer.dst = Buffer->Data; - pcb_selected_operation(pcb, pcb->Data, fnc, &ctx, pcb_false, PCB_OBJ_ANY & (~PCB_OBJ_SUBC_PART), pcb_true); + pcb_selected_operation(pcb, pcb->Data, fnc, &ctx, pcb_false, PCB_OBJ_ANY & (~PCB_OBJ_SUBC_PART), on_locked_too); /* set origin to passed or current position */ if (X || Y) { @@ -161,7 +161,7 @@ void pcb_buffer_add_selected(pcb_board_t *pcb, pcb_buffer_t *Buffer, pcb_coord_t X, pcb_coord_t Y, pcb_bool LeaveSelected) { - pcb_buffer_toss_selected(&AddBufferFunctions, pcb, Buffer, X, Y, LeaveSelected); + pcb_buffer_toss_selected(&AddBufferFunctions, pcb, Buffer, X, Y, LeaveSelected, pcb_false); } /*---------------------------------------------------------------------------*/ Index: trunk/src/operation.c =================================================================== --- trunk/src/operation.c (revision 20544) +++ trunk/src/operation.c (revision 20545) @@ -128,6 +128,8 @@ { if (!PCB_FLAG_TEST(PCB_FLAG_SELECTED, arc)) continue; + if (!on_locked_too && PCB_FLAG_TEST(PCB_FLAG_LOCK, arc)) + continue; if (Reset) { pcb_undo_add_obj_to_flag(arc); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, arc); @@ -144,6 +146,8 @@ { if (!PCB_FLAG_TEST(PCB_FLAG_SELECTED, text) || !pcb_text_is_visible(PCB, layer, text)) continue; + if (!on_locked_too && PCB_FLAG_TEST(PCB_FLAG_LOCK, text)) + continue; if (Reset) { pcb_undo_add_obj_to_flag(text); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, text); @@ -160,6 +164,8 @@ { if (!PCB_FLAG_TEST(PCB_FLAG_SELECTED, polygon)) continue; + if (!on_locked_too && PCB_FLAG_TEST(PCB_FLAG_LOCK, polygon)) + continue; if (Reset) { pcb_undo_add_obj_to_flag(polygon); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, polygon); @@ -173,6 +179,8 @@ if ((type & (PCB_OBJ_SUBC | PCB_OBJ_SUBC_PART)) && F->subc) { PCB_SUBC_LOOP(data); { + if (!on_locked_too && PCB_FLAG_TEST(PCB_FLAG_LOCK, subc)) + continue; if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, subc)) { if (Reset) { pcb_undo_add_obj_to_flag(subc); @@ -195,6 +203,8 @@ { if (!PCB_FLAG_TEST(PCB_FLAG_SELECTED, padstack)) continue; + if (!on_locked_too && PCB_FLAG_TEST(PCB_FLAG_LOCK, padstack)) + continue; if (Reset) { pcb_undo_add_obj_to_flag(padstack); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, padstack); @@ -211,6 +221,8 @@ { if (!PCB_FLAG_TEST(PCB_FLAG_SELECTED, line)) continue; + if (!on_locked_too && PCB_FLAG_TEST(PCB_FLAG_LOCK, line)) + continue; if (Reset) { pcb_undo_add_obj_to_flag(line); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, line);