Index: trunk/src/layer_grp.c =================================================================== --- trunk/src/layer_grp.c (revision 21952) +++ trunk/src/layer_grp.c (revision 21953) @@ -331,7 +331,7 @@ return stack->grp+where+1; } -static void pcb_get_grp_new_intern_insert(pcb_board_t *pcb, int room, int bl, int omit_substrate) +static pcb_layergrp_t *pcb_get_grp_new_intern_insert(pcb_board_t *pcb, int room, int bl, int omit_substrate) { pcb_layer_stack_t *stack = &pcb->LayerGroups; @@ -346,6 +346,7 @@ bl++; if (!omit_substrate) make_substrate(pcb, &stack->grp[bl]); + return &stack->grp[bl-1]; } static pcb_layergrp_t *pcb_get_grp_new_intern_(pcb_board_t *pcb, int omit_substrate, int force_end) @@ -409,6 +410,17 @@ return g; } +pcb_layergrp_t *pcb_get_grp_new_raw(pcb_board_t *pcb) +{ + pcb_layergrp_t *g; + inhibit_notify++; + g = pcb_get_grp_new_intern_insert(pcb, 1, pcb->LayerGroups.len, 1); + inhibit_notify--; + NOTIFY(pcb); + return g; +} + + /* Move an inclusive block of groups [from..to] by delta on the stack, assuming target is already cleared and the new hole will be cleared by the caller */ static void move_grps(pcb_board_t *pcb, pcb_layer_stack_t *stk, pcb_layergrp_id_t from, pcb_layergrp_id_t to, int delta) Index: trunk/src/layer_grp.h =================================================================== --- trunk/src/layer_grp.h (revision 21952) +++ trunk/src/layer_grp.h (revision 21953) @@ -214,6 +214,9 @@ pcb_layergrp_t *pcb_get_grp_new_intern(pcb_board_t *pcb, int intern_id); pcb_layergrp_t *pcb_get_grp_new_misc(pcb_board_t *pcb); +/* append a layer group without any smart side effects - use only from io loaders */ +pcb_layergrp_t *pcb_get_grp_new_raw(pcb_board_t *pcb); + /* ugly hack: remove the extra substrate we added after the outline layer */ void pcb_layergrp_fix_old_outline(pcb_board_t *pcb);