Index: trunk/src/tool.h =================================================================== --- trunk/src/tool.h (revision 13112) +++ trunk/src/tool.h (revision 13113) @@ -102,4 +102,7 @@ /* Get the tool pointer of a tool by id */ #define pcb_tool_get(id) ((const pcb_tool_t *)vtp0_get(&pcb_tools, id, 0)) +/* Conditionally allow subc parts to be reached directly in search masks */ +#define PCB_LOOSE_SUBC (PCB->loose_subc ? PCB_TYPE_SUBC_PART : 0) + #endif Index: trunk/src/tool_arrow.c =================================================================== --- trunk/src/tool_arrow.c (revision 13112) +++ trunk/src/tool_arrow.c (revision 13113) @@ -122,7 +122,7 @@ * (pcb_tool_note.Moving) or clicked on a MOVE_TYPE * (pcb_tool_note.Hit) */ - for (test = (PCB_SELECT_TYPES | PCB_MOVE_TYPES) & ~PCB_TYPE_RATLINE; test; test &= ~type) { + for (test = (PCB_SELECT_TYPES | PCB_MOVE_TYPES | PCB_LOOSE_SUBC) & ~PCB_TYPE_RATLINE; test; test &= ~type) { type = pcb_search_screen(pcb_tool_note.X, pcb_tool_note.Y, test, &ptr1, &ptr2, &ptr3); if (!pcb_tool_note.Hit && (type & PCB_MOVE_TYPES) && !PCB_FLAG_TEST(PCB_FLAG_LOCK, (pcb_pin_t *) ptr2)) { pcb_tool_note.Hit = type; @@ -130,7 +130,7 @@ pcb_tool_note.ptr2 = ptr2; pcb_tool_note.ptr3 = ptr3; } - if (!pcb_tool_note.Moving && (type & PCB_SELECT_TYPES) && PCB_FLAG_TEST(PCB_FLAG_SELECTED, (pcb_pin_t *) ptr2)) + if (!pcb_tool_note.Moving && (type & (PCB_SELECT_TYPES | PCB_LOOSE_SUBC)) && PCB_FLAG_TEST(PCB_FLAG_SELECTED, (pcb_pin_t *) ptr2)) pcb_tool_note.Moving = pcb_true; if ((pcb_tool_note.Hit && pcb_tool_note.Moving) || type == PCB_TYPE_NONE) return;