Index: trunk/src/gui_act.c =================================================================== --- trunk/src/gui_act.c (revision 29694) +++ trunk/src/gui_act.c (revision 29695) @@ -937,7 +937,7 @@ free(attrs); } - lid = pcb_layer_create(PCB, g - PCB->LayerGroups.grp, stype); + lid = pcb_layer_create(PCB, g - PCB->LayerGroups.grp, stype, 1); if (lid >= 0) { pcb_layer_t *ly; PCB_ACT_IRES(0); @@ -1001,7 +1001,7 @@ pcb_layergrp_inhibit_inc(); ng = pcb_layergrp_dup(PCB, gid, 1, 1); if (ng >= 0) { - pcb_layer_id_t lid = pcb_layer_create(PCB, ng, g->name); + pcb_layer_id_t lid = pcb_layer_create(PCB, ng, g->name, 1); if (lid >= 0) { PCB_ACT_IRES(0); PCB->Data->Layer[lid].meta.real.vis = 1; Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 29694) +++ trunk/src/layer.c (revision 29695) @@ -505,7 +505,7 @@ dst->meta.real.grp = -1; } -pcb_layer_id_t pcb_layer_create(pcb_board_t *pcb, pcb_layergrp_id_t grp, const char *lname) +pcb_layer_id_t pcb_layer_create(pcb_board_t *pcb, pcb_layergrp_id_t grp, const char *lname, pcb_bool undoable) { pcb_layer_id_t id; Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 29694) +++ trunk/src/layer.h (revision 29695) @@ -274,7 +274,7 @@ void pcb_layers_reset(pcb_board_t *pcb); /* Create a new layer and put it in an existing group (if grp is not -1). */ -pcb_layer_id_t pcb_layer_create(pcb_board_t *pcb, pcb_layergrp_id_t grp, const char *lname); +pcb_layer_id_t pcb_layer_create(pcb_board_t *pcb, pcb_layergrp_id_t grp, const char *lname, pcb_bool undoable); /* Return the name of a layer (resolving the true name of virtual layers too) */ const char *pcb_layer_name(pcb_data_t *data, pcb_layer_id_t id); Index: trunk/src/layer_grp.c =================================================================== --- trunk/src/layer_grp.c (revision 29694) +++ trunk/src/layer_grp.c (revision 29695) @@ -939,7 +939,7 @@ pcb_layergrp_id_t gid; for(gid = 0; gid < pcb->LayerGroups.len; gid++) if ((pcb->LayerGroups.grp[gid].ltype & PCB_LYT_SILK) && (pcb->LayerGroups.grp[gid].len == 0)) - pcb_layer_create(pcb, gid, "silk"); + pcb_layer_create(pcb, gid, "silk", 0); } /*** undoable rename ***/ @@ -1263,7 +1263,7 @@ grp->name = pcb_strdup("outline"); if (ly->meta.bound.purpose != NULL) pcb_layergrp_set_purpose__(grp, pcb_strdup(ly->meta.bound.purpose), 0); - nlid = pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name); + nlid = pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name, 0); nly = pcb_get_layer(pcb->Data, nlid); if (nly != NULL) nly->comb = ly->comb; @@ -1274,7 +1274,7 @@ if (ly->meta.bound.type & PCB_LYT_COPPER) { /* top or bottom copper */ grp = pcb_get_grp(&pcb->LayerGroups, ly->meta.bound.type & PCB_LYT_ANYWHERE, PCB_LYT_COPPER); if (grp != NULL) { - pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name); + pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name, 0); continue; } } @@ -1281,7 +1281,7 @@ grp = pcb_get_grp(&pcb->LayerGroups, ly->meta.bound.type & PCB_LYT_ANYWHERE, ly->meta.bound.type & PCB_LYT_ANYTHING); if (grp != NULL) { - pcb_layer_id_t lid = pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name); + pcb_layer_id_t lid = pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name, 0); pcb_layer_t *nly = pcb_get_layer(pcb->Data, lid); nly->comb = ly->comb; continue; @@ -1314,7 +1314,7 @@ offs = existing_intern + offs + 1; if ((offs == int_ofs) && (ly->name != NULL)) { pcb->LayerGroups.grp[n].name = pcb_strdup("internal"); - pcb_layer_create(pcb, n, ly->name); + pcb_layer_create(pcb, n, ly->name, 0); goto found; } } @@ -1335,7 +1335,7 @@ if (grp != NULL) { grp->ltype = ly->meta.bound.type; grp->name = pcb_strdup(ly->name); - pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name); + pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name, 0); pcb_layer_resolve_binding(pcb, ly); } } @@ -1438,7 +1438,7 @@ pcb_layergrp_set_purpose__(grp, pcb_strdup(src->purpose), 1); if (grp->len == 0) { - pcb_layer_id_t lid = pcb_layer_create(pcb, gid, lyname); + pcb_layer_id_t lid = pcb_layer_create(pcb, gid, lyname, 0); if (lid >= 0) { pcb->Data->Layer[lid].comb = src->comb; } Index: trunk/src_plugins/draw_csect/draw_csect.c =================================================================== --- trunk/src_plugins/draw_csect/draw_csect.c (revision 29694) +++ trunk/src_plugins/draw_csect/draw_csect.c (revision 29695) @@ -744,7 +744,7 @@ g->open = 1; outline_gactive = pcb_layergrp_id(PCB, g); - pcb_layer_create(PCB, outline_gactive, "outline"); + pcb_layer_create(PCB, outline_gactive, "outline", 1); pcb_event(&PCB->hidlib, PCB_EVENT_LAYERS_CHANGED, NULL); } drag_addoutline = 0; @@ -781,11 +781,11 @@ } else if (drag_addlayer) { if (gactive >= 0) { - pcb_layer_create(PCB, gactive, "New Layer"); + pcb_layer_create(PCB, gactive, "New Layer", 1); pcb_event(&PCB->hidlib, PCB_EVENT_LAYERS_CHANGED, NULL); } else if (outline_gactive >= 0 && PCB->LayerGroups.grp[outline_gactive].len == 0) { - pcb_layer_create(PCB, outline_gactive, "outline"); + pcb_layer_create(PCB, outline_gactive, "outline", 1); pcb_event(&PCB->hidlib, PCB_EVENT_LAYERS_CHANGED, NULL); } drag_addlayer = 0; Index: trunk/src_plugins/fontmode/fontmode.c =================================================================== --- trunk/src_plugins/fontmode/fontmode.c (revision 29694) +++ trunk/src_plugins/fontmode/fontmode.c (revision 29695) @@ -75,7 +75,7 @@ pcb_layer_id_t lid; assert(grp >= 0); - lid = pcb_layer_create(PCB, grp, lname); + lid = pcb_layer_create(PCB, grp, lname, 0); assert(lid >= 0); PCB->Data->Layer[lid].meta.real.vis = 1; PCB->Data->Layer[lid].meta.real.color = *pcb_layer_default_color(lid, 0); Index: trunk/src_plugins/io_autotrax/read.c =================================================================== --- trunk/src_plugins/io_autotrax/read.c (revision 29694) +++ trunk/src_plugins/io_autotrax/read.c (revision 29695) @@ -768,7 +768,7 @@ if (pcb_layer_list(st->pcb, mask, &id, 1) != 1) { pcb_layergrp_id_t gid; pcb_layergrp_list(st->pcb, mask, &gid, 1); - id = pcb_layer_create(st->pcb, gid, autotrax_layer); + id = pcb_layer_create(st->pcb, gid, autotrax_layer, 0); } return id; } @@ -791,9 +791,9 @@ if (pcb_layer_list(st->pcb, PCB_LYT_SILK | PCB_LYT_TOP, &id, 1) == 1) { pcb_layergrp_id_t gid; pcb_layergrp_list(st->pcb, PCB_LYT_SILK | PCB_LYT_TOP, &gid, 1); - st->protel_to_stackup[11] = pcb_layer_create(st->pcb, gid, "Board"); /* != outline, cutouts */ + st->protel_to_stackup[11] = pcb_layer_create(st->pcb, gid, "Board", 0); /* != outline, cutouts */ pcb_layergrp_list(st->pcb, PCB_LYT_SILK | PCB_LYT_TOP, &gid, 1); - st->protel_to_stackup[13] = pcb_layer_create(st->pcb, gid, "Multi"); + st->protel_to_stackup[13] = pcb_layer_create(st->pcb, gid, "Multi", 0); } else { pcb_message(PCB_MSG_ERROR, "Unable to create Keepout, Multi layers in default top silk group\n"); @@ -800,22 +800,22 @@ } g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[2] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid1"); + st->protel_to_stackup[2] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid1", 0); g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[3] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid2"); + st->protel_to_stackup[3] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid2", 0); g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[4] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid3"); + st->protel_to_stackup[4] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid3", 0); g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[5] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid4"); + st->protel_to_stackup[5] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Mid4", 0); g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[9] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "GND"); + st->protel_to_stackup[9] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "GND", 0); g = pcb_get_grp_new_intern(st->pcb, -1); - st->protel_to_stackup[10] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Power"); + st->protel_to_stackup[10] = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Power", 0); g = pcb_get_grp_new_intern(st->pcb, -1); g->name = pcb_strdup("outline"); /* equivalent to keepout = layer 12 in autotrax */ Index: trunk/src_plugins/io_eagle/read.c =================================================================== --- trunk/src_plugins/io_eagle/read.c (revision 29694) +++ trunk/src_plugins/io_eagle/read.c (revision 29695) @@ -344,7 +344,7 @@ break; case 20: /*199: 20 is dimension, 199 is contour */ grp = pcb_get_grp_new_intern(st->pcb, -1); - ly->lid = pcb_layer_create(st->pcb, grp - st->pcb->LayerGroups.grp, ly->name); + ly->lid = pcb_layer_create(st->pcb, grp - st->pcb->LayerGroups.grp, ly->name, 0); pcb_layergrp_fix_turn_to_outline(grp); break; @@ -352,7 +352,7 @@ if ((id > 1) && (id < 16)) { /* new internal layer */ grp = pcb_get_grp_new_intern(st->pcb, -1); - ly->lid = pcb_layer_create(st->pcb, grp - st->pcb->LayerGroups.grp, ly->name); + ly->lid = pcb_layer_create(st->pcb, grp - st->pcb->LayerGroups.grp, ly->name, 0); } } if (typ != 0) { @@ -359,7 +359,7 @@ if (reuse) pcb_layer_list(st->pcb, typ, &ly->lid, 1); if ((ly->lid < 0) && (pcb_layergrp_list(st->pcb, typ, &gid, 1) > 0)) - ly->lid = pcb_layer_create(st->pcb, gid, ly->name); + ly->lid = pcb_layer_create(st->pcb, gid, ly->name, 0); } } } @@ -406,7 +406,7 @@ ly->visible = 0; ly->active = 1; pcb_layergrp_list(st->pcb, typ, &gid, 1); - ly->lid = pcb_layer_create(st->pcb, gid, ly->name); + ly->lid = pcb_layer_create(st->pcb, gid, ly->name, 0); } else return NULL; /* not found and not supported */ Index: trunk/src_plugins/io_eagle/read_dru.c =================================================================== --- trunk/src_plugins/io_eagle/read_dru.c (revision 29694) +++ trunk/src_plugins/io_eagle/read_dru.c (revision 29695) @@ -216,14 +216,14 @@ /* set up layers */ pcb_layer_group_setup_default(pcb); if (pcb_layergrp_list(pcb, PCB_LYT_COPPER | PCB_LYT_TOP, &gid, 1)) - pcb_layer_create(pcb, gid, "top_copper"); + pcb_layer_create(pcb, gid, "top_copper", 0); if (pcb_layergrp_list(pcb, PCB_LYT_COPPER | PCB_LYT_BOTTOM, &gid, 1)) - pcb_layer_create(pcb, gid, "bottom_copper"); + pcb_layer_create(pcb, gid, "bottom_copper", 0); num_layers--; for(n = 0; n < num_layers; n++) { pcb_layergrp_t *grp = pcb_get_grp_new_intern(pcb, -1); sprintf(tmp, "signal_%d", n); - pcb_layer_create(pcb, grp - pcb->LayerGroups.grp, tmp); + pcb_layer_create(pcb, grp - pcb->LayerGroups.grp, tmp, 0); } pcb_layer_group_setup_silks(pcb); Index: trunk/src_plugins/io_hyp/parser.c =================================================================== --- trunk/src_plugins/io_hyp/parser.c (revision 29694) +++ trunk/src_plugins/io_hyp/parser.c (revision 29695) @@ -807,25 +807,25 @@ id = -1; if (pcb_layergrp_list(PCB, PCB_LYT_SILK | PCB_LYT_TOP, &gid, 1) == 1) - id = pcb_layer_create(PCB, gid, "top silk"); + id = pcb_layer_create(PCB, gid, "top silk", 0); if (id < 0) pcb_message(PCB_MSG_ERROR, "failed to create top silk\n"); id = -1; if (pcb_layergrp_list(PCB, PCB_LYT_SILK | PCB_LYT_BOTTOM, &gid, 1) == 1) - id = pcb_layer_create(PCB, gid, "bottom silk"); + id = pcb_layer_create(PCB, gid, "bottom silk", 0); if (id < 0) pcb_message(PCB_MSG_ERROR, "failed to create bottom silk\n"); top_layer_id = -1; if (pcb_layergrp_list(PCB, PCB_LYT_COPPER | PCB_LYT_TOP, &gid, 1) == 1) - top_layer_id = pcb_layer_create(PCB, gid, ""); + top_layer_id = pcb_layer_create(PCB, gid, "", 0); if (top_layer_id < 0) pcb_message(PCB_MSG_ERROR, "failed to create top copper\n"); bottom_layer_id = -1; if (pcb_layergrp_list(PCB, PCB_LYT_COPPER | PCB_LYT_BOTTOM, &gid, 1) == 1) - bottom_layer_id = pcb_layer_create(PCB, gid, ""); + bottom_layer_id = pcb_layer_create(PCB, gid, "", 0); if (bottom_layer_id < 0) pcb_message(PCB_MSG_ERROR, "failed to create bottom copper\n"); @@ -834,7 +834,7 @@ id = -1; grp = pcb_get_grp_new_intern(PCB, -1); if (grp != NULL) { - id = pcb_layer_create(PCB, grp - PCB->LayerGroups.grp, "outline"); + id = pcb_layer_create(PCB, grp - PCB->LayerGroups.grp, "outline", 0); pcb_layergrp_fix_turn_to_outline(grp); } if (id < 0) @@ -899,7 +899,7 @@ /* create new bottom layer */ pcb_layergrp_list(PCB, PCB_LYT_COPPER | PCB_LYT_BOTTOM, &gid, 1); - layer_id = pcb_layer_create(PCB, gid, lname); + layer_id = pcb_layer_create(PCB, gid, lname, 0); /* check if new bottom layer valid */ if (layer_id < 0) { Index: trunk/src_plugins/io_kicad/read.c =================================================================== --- trunk/src_plugins/io_kicad/read.c (revision 29694) +++ trunk/src_plugins/io_kicad/read.c (revision 29695) @@ -234,7 +234,7 @@ static int kicad_create_copper_layer_(read_state_t *st, pcb_layergrp_id_t gid, const char *lname, const char *ltype, gsxl_node_t *subtree) { pcb_layer_id_t id; - id = pcb_layer_create(st->pcb, gid, lname); + id = pcb_layer_create(st->pcb, gid, lname, 0); htsi_set(&st->layer_k2i, pcb_strdup(lname), id); if (ltype != NULL) { pcb_layer_t *ly = pcb_get_layer(st->pcb->Data, id); @@ -343,7 +343,7 @@ case LYACT_EXISTING: gid = -1; pcb_layergrp_list(st->pcb, best->type, &gid, 1); - lid = pcb_layer_create(st->pcb, gid, lname); + lid = pcb_layer_create(st->pcb, gid, lname, 0); new_grp = NULL; break; @@ -351,7 +351,7 @@ grp = pcb_get_grp_new_misc(st->pcb); grp->name = pcb_strdup(lname); grp->ltype = best->type; - lid = pcb_layer_create(st->pcb, grp - st->pcb->LayerGroups.grp, lname); + lid = pcb_layer_create(st->pcb, grp - st->pcb->LayerGroups.grp, lname, 0); new_grp = grp; break; @@ -358,7 +358,7 @@ case LYACT_NEW_OUTLINE: grp = pcb_get_grp_new_intern(PCB, -1); pcb_layergrp_fix_turn_to_outline(grp); - lid = pcb_layer_create(st->pcb, grp - st->pcb->LayerGroups.grp, lname); + lid = pcb_layer_create(st->pcb, grp - st->pcb->LayerGroups.grp, lname, 0); new_grp = grp; break; } @@ -395,7 +395,7 @@ if (pcb_layer_listp(st->pcb, mask, &id, 1, -1, purpose) != 1) { pcb_layergrp_id_t gid; pcb_layergrp_listp(PCB, mask, &gid, 1, -1, purpose); - id = pcb_layer_create(st->pcb, gid, kicad_name); + id = pcb_layer_create(st->pcb, gid, kicad_name, 0); } } else { @@ -472,7 +472,7 @@ /* one intern copper */ g = pcb_get_grp_new_intern(st->pcb, -1); - pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Inner1.Cu"); + pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "Inner1.Cu", 0); kicad_create_layer(st, 0, "F.Cu", "signal", subtree, last_copper); kicad_create_layer(st, 1, "Inner1.Cu", "signal", subtree, last_copper); @@ -2689,7 +2689,7 @@ /* create an extra layer for plated slots so they show up properly */ { pcb_layergrp_t *g = pcb_get_grp_new_misc(st->pcb); - pcb_layer_id_t lid = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "plated_slots"); + pcb_layer_id_t lid = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "plated_slots", 0); pcb_layer_t *ly = pcb_get_layer(st->pcb->Data, lid); g->ltype = PCB_LYT_MECH; pcb_layergrp_set_purpose(g, "proute", 0); Index: trunk/src_plugins/io_pcb/file.c =================================================================== --- trunk/src_plugins/io_pcb/file.c (revision 29694) +++ trunk/src_plugins/io_pcb/file.c (revision 29695) @@ -795,10 +795,10 @@ res = pcb_layergrp_list(PCB, PCB_LYT_TOP | PCB_LYT_COPPER, &gid, 1); assert(res == 1); - pcb_layer_create(PCB, gid, "top copper"); + pcb_layer_create(PCB, gid, "top copper", 0); res = pcb_layergrp_list(PCB, PCB_LYT_BOTTOM | PCB_LYT_COPPER, &gid, 1); assert(res == 1); - pcb_layer_create(PCB, gid, "bottom copper"); + pcb_layer_create(PCB, gid, "bottom copper", 0); } pcb_layergrp_upgrade_to_pstk(yyPCB); Index: trunk/src_plugins/io_tedax/stackup.c =================================================================== --- trunk/src_plugins/io_tedax/stackup.c (revision 29694) +++ trunk/src_plugins/io_tedax/stackup.c (revision 29695) @@ -373,7 +373,7 @@ grp = get_grp_by_name(ctx, pcb, argv[1]); tedax_layer_set_by_str(pcb, grp, argv[2], argv[3]); if (!(grp->ltype & PCB_LYT_SUBSTRATE)) - pcb_layer_create(pcb, grp - pcb->LayerGroups.grp, pcb_strdup(argv[1])); + pcb_layer_create(pcb, grp - pcb->LayerGroups.grp, pcb_strdup(argv[1]), 0); } else if (strcmp(argv[0], "lprop") == 0) {