Index: operation.c =================================================================== --- operation.c (revision 31639) +++ operation.c (revision 31640) @@ -133,6 +133,7 @@ rnd_bool changed = rnd_false; pcb_any_obj_t *exto; int on_locked_too = (mode & PCB_OP_ON_LOCKED); + int no_subc_part = (mode & PCB_OP_NO_SUBC_PART); if (!(pcb_brave & PCB_BRAVE_NOCLIPBATCH) && (data != NULL)) pcb_data_clip_inhibit_inc(data); @@ -148,6 +149,8 @@ continue; if (floater_only && !PCB_FLAG_TEST(PCB_FLAG_FLOATER, line)) continue; + if (no_subc_part && (pcb_lobj_parent_subc(line->parent_type, &line->parent) != NULL)) + continue; if (Reset) { pcb_undo_add_obj_to_flag(line); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, line); @@ -176,6 +179,8 @@ continue; if (floater_only && !PCB_FLAG_TEST(PCB_FLAG_FLOATER, arc)) continue; + if (no_subc_part && (pcb_lobj_parent_subc(arc->parent_type, &arc->parent) != NULL)) + continue; if (Reset) { pcb_undo_add_obj_to_flag(arc); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, arc); @@ -204,6 +209,8 @@ continue; if (floater_only && !PCB_FLAG_TEST(PCB_FLAG_FLOATER, text)) continue; + if (no_subc_part && (pcb_lobj_parent_subc(text->parent_type, &text->parent) != NULL)) + continue; if (Reset) { pcb_undo_add_obj_to_flag(text); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, text); @@ -232,6 +239,8 @@ continue; if (floater_only && !PCB_FLAG_TEST(PCB_FLAG_FLOATER, polygon)) continue; + if (no_subc_part && (pcb_lobj_parent_subc(polygon->parent_type, &polygon->parent) != NULL)) + continue; if (Reset) { pcb_undo_add_obj_to_flag(polygon); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, polygon); @@ -260,6 +269,8 @@ continue; if (floater_only && !PCB_FLAG_TEST(PCB_FLAG_FLOATER, gfx)) continue; + if (no_subc_part && (pcb_lobj_parent_subc(gfx->parent_type, &gfx->parent) != NULL)) + continue; if (Reset) { pcb_undo_add_obj_to_flag(gfx); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, gfx); @@ -285,6 +296,8 @@ continue; if (floater_only && !PCB_FLAG_TEST(PCB_FLAG_FLOATER, subc)) continue; + if (no_subc_part && (pcb_gobj_parent_subc(subc->parent_type, &subc->parent) != NULL)) + continue; if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, subc)) { if (Reset) { pcb_undo_add_obj_to_flag(subc); @@ -333,6 +346,8 @@ continue; if (floater_only && !PCB_FLAG_TEST(PCB_FLAG_FLOATER, padstack)) continue; + if (no_subc_part && (pcb_gobj_parent_subc(padstack->parent_type, &padstack->parent) != NULL)) + continue; if (Reset) { pcb_undo_add_obj_to_flag(padstack); PCB_FLAG_CLEAR(PCB_FLAG_SELECTED, padstack);