Index: trunk/src/gui_act.c =================================================================== --- trunk/src/gui_act.c (revision 29675) +++ trunk/src/gui_act.c (revision 29676) @@ -751,7 +751,7 @@ } else if (strncmp(arg, "name=", 5) == 0) { interactive = 0; - ret |= pcb_layergrp_rename_(g, pcb_strdup(arg+5)); + ret |= pcb_layergrp_rename_(g, pcb_strdup(arg+5), 1); pcb_board_set_changed_flag(pcb_true); } else if (strncmp(arg, "type=", 5) == 0) { @@ -905,7 +905,7 @@ pcb_layer_id_t lid; if (spurp != NULL) - pcb_layergrp_set_purpose__(g, pcb_strdup(spurp)); + pcb_layergrp_set_purpose__(g, pcb_strdup(spurp), 1); free(g->name); if (name != NULL) Index: trunk/src/layer_grp.c =================================================================== --- trunk/src/layer_grp.c (revision 29675) +++ trunk/src/layer_grp.c (revision 29676) @@ -598,7 +598,7 @@ g->ltype &= ~(PCB_LYT_ANYWHERE); free(g->name); g->name = pcb_strdup("global_outline"); - pcb_layergrp_set_purpose__(g, pcb_strdup("uroute")); + pcb_layergrp_set_purpose__(g, pcb_strdup("uroute"), 0); } @@ -830,7 +830,7 @@ pcb_layer_create(pcb, gid, "silk"); } -int pcb_layergrp_rename_(pcb_layergrp_t *grp, char *name) +int pcb_layergrp_rename_(pcb_layergrp_t *grp, char *name, pcb_bool undoable) { free(grp->name); grp->name = name; @@ -840,14 +840,14 @@ return 0; } -int pcb_layergrp_rename(pcb_board_t *pcb, pcb_layergrp_id_t gid, const char *name) +int pcb_layergrp_rename(pcb_board_t *pcb, pcb_layergrp_id_t gid, const char *name, pcb_bool undoable) { pcb_layergrp_t *grp = pcb_get_layergrp(pcb, gid); if (grp == NULL) return -1; - return pcb_layergrp_rename_(grp, pcb_strdup(name)); + return pcb_layergrp_rename_(grp, pcb_strdup(name), undoable); } -int pcb_layergrp_set_purpose__(pcb_layergrp_t *lg, char *purpose) +int pcb_layergrp_set_purpose__(pcb_layergrp_t *lg, char *purpose, pcb_bool undoable) { free(lg->purpose); if (purpose == NULL) { @@ -863,17 +863,17 @@ return 0; } -int pcb_layergrp_set_purpose_(pcb_layergrp_t *lg, char *purpose) +int pcb_layergrp_set_purpose_(pcb_layergrp_t *lg, char *purpose, pcb_bool undoable) { - int ret = pcb_layergrp_set_purpose__(lg, purpose); + int ret = pcb_layergrp_set_purpose__(lg, purpose, undoable); assert(lg->parent_type == PCB_PARENT_BOARD); pcb_event(&lg->parent.board->hidlib, PCB_EVENT_LAYERS_CHANGED, NULL); return ret; } -int pcb_layergrp_set_purpose(pcb_layergrp_t *lg, const char *purpose) +int pcb_layergrp_set_purpose(pcb_layergrp_t *lg, const char *purpose, pcb_bool undoable) { - return pcb_layergrp_set_purpose_(lg, pcb_strdup(purpose)); + return pcb_layergrp_set_purpose_(lg, pcb_strdup(purpose), undoable); } pcb_layergrp_id_t pcb_layergrp_by_name(pcb_board_t *pcb, const char *name) @@ -986,7 +986,7 @@ grp->ltype = PCB_LYT_BOUNDARY; grp->name = pcb_strdup("outline"); if (ly->meta.bound.purpose != NULL) - pcb_layergrp_set_purpose__(grp, pcb_strdup(ly->meta.bound.purpose)); + pcb_layergrp_set_purpose__(grp, pcb_strdup(ly->meta.bound.purpose), 0); nlid = pcb_layer_create(pcb, pcb_layergrp_id(pcb, grp), ly->name); nly = pcb_get_layer(pcb->Data, nlid); if (nly != NULL) @@ -1159,7 +1159,7 @@ free(grp->purpose); grp->purpose = NULL; if (src->purpose != NULL) - pcb_layergrp_set_purpose__(grp, pcb_strdup(src->purpose)); + 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); Index: trunk/src/layer_grp.h =================================================================== --- trunk/src/layer_grp.h (revision 29675) +++ trunk/src/layer_grp.h (revision 29676) @@ -168,15 +168,15 @@ void pcb_layergrp_notify(pcb_board_t *pcb); /* Rename an existing layer by idx */ -int pcb_layergrp_rename(pcb_board_t *pcb, pcb_layergrp_id_t gid, const char *lname); +int pcb_layergrp_rename(pcb_board_t *pcb, pcb_layergrp_id_t gid, const char *lname, pcb_bool undoable); /* changes the name of a layer; memory has to be already allocated */ -int pcb_layergrp_rename_(pcb_layergrp_t *grp, char *name); +int pcb_layergrp_rename_(pcb_layergrp_t *grp, char *name, pcb_bool undoable); /* Change the purpose field and recalc purpi (not undoable) */ -int pcb_layergrp_set_purpose__(pcb_layergrp_t *lg, char *purpose); /* no strdup, no event */ -int pcb_layergrp_set_purpose_(pcb_layergrp_t *lg, char *purpose); /* no strdup, send layer change event */ -int pcb_layergrp_set_purpose(pcb_layergrp_t *lg, const char *purpose); /* strdup, send event */ +int pcb_layergrp_set_purpose__(pcb_layergrp_t *lg, char *purpose, pcb_bool undoable); /* no strdup, no event */ +int pcb_layergrp_set_purpose_(pcb_layergrp_t *lg, char *purpose, pcb_bool undoable); /* no strdup, send layer change event */ +int pcb_layergrp_set_purpose(pcb_layergrp_t *lg, const char *purpose, pcb_bool undoable); /* strdup, send event */ /* Slow linear search for a layer group by name */ Index: trunk/src_plugins/dialogs/dlg_layer_flags.c =================================================================== --- trunk/src_plugins/dialogs/dlg_layer_flags.c (revision 29675) +++ trunk/src_plugins/dialogs/dlg_layer_flags.c (revision 29676) @@ -166,7 +166,7 @@ PCB_DAD_AUTORUN("layer_grp_prop", dlg, "Edit the properties of a layer group (physical layer)", NULL, failed); if (failed == 0) { if (strcmp(g->name, dlg[wname].val.str) != 0) { - ar |= pcb_layergrp_rename_(g, (char *)dlg[wname].val.str); + ar |= pcb_layergrp_rename_(g, (char *)dlg[wname].val.str, 1); dlg[wname].val.str = NULL; pcb_board_set_changed_flag(pcb_true); } @@ -192,15 +192,15 @@ if (dlg[wpurp].val.str == NULL) { if (g->purpose != NULL) { - pcb_layergrp_set_purpose__(g, NULL); + pcb_layergrp_set_purpose__(g, NULL, 1); changed = 1; } } else if ((g->purpose == NULL) || (strcmp(g->purpose, dlg[wpurp].val.str) != 0)) { if (*dlg[wpurp].val.str == '\0') - pcb_layergrp_set_purpose__(g, NULL); + pcb_layergrp_set_purpose__(g, NULL, 1); else - pcb_layergrp_set_purpose__(g, pcb_strdup(dlg[wpurp].val.str)); + pcb_layergrp_set_purpose__(g, pcb_strdup(dlg[wpurp].val.str), 1); changed = 1; } Index: trunk/src_plugins/io_autotrax/read.c =================================================================== --- trunk/src_plugins/io_autotrax/read.c (revision 29675) +++ trunk/src_plugins/io_autotrax/read.c (revision 29676) @@ -820,7 +820,7 @@ g = pcb_get_grp_new_intern(st->pcb, -1); g->name = pcb_strdup("outline"); /* equivalent to keepout = layer 12 in autotrax */ g->ltype = PCB_LYT_BOUNDARY; /* and includes cutouts */ - pcb_layergrp_set_purpose__(g, pcb_strdup("uroute")); + pcb_layergrp_set_purpose__(g, pcb_strdup("uroute"), 0); st->protel_to_stackup[12] = autotrax_reg_layer(st, "outline", PCB_LYT_BOUNDARY); pcb_layergrp_inhibit_dec(); Index: trunk/src_plugins/io_kicad/read.c =================================================================== --- trunk/src_plugins/io_kicad/read.c (revision 29675) +++ trunk/src_plugins/io_kicad/read.c (revision 29676) @@ -2692,7 +2692,7 @@ pcb_layer_id_t lid = pcb_layer_create(st->pcb, g - st->pcb->LayerGroups.grp, "plated_slots"); pcb_layer_t *ly = pcb_get_layer(st->pcb->Data, lid); g->ltype = PCB_LYT_MECH; - pcb_layergrp_set_purpose(g, "proute"); + pcb_layergrp_set_purpose(g, "proute", 0); if (ly != NULL) ly->comb = PCB_LYC_AUTO; } Index: trunk/src_plugins/io_lihata/read.c =================================================================== --- trunk/src_plugins/io_lihata/read.c (revision 29675) +++ trunk/src_plugins/io_lihata/read.c (revision 29676) @@ -1585,12 +1585,12 @@ if (rdver < 6) iolht_warn(grp, -1, "Layer groups could not have a purpose field before lihata v6 - still loading the purpose,\nbut it will be ignored by older versions of pcb-rnd.\n"); if (npurp->type == LHT_TEXT) - pcb_layergrp_set_purpose__(g, pcb_strdup(npurp->data.text.value)); + pcb_layergrp_set_purpose__(g, pcb_strdup(npurp->data.text.value), 0); else iolht_warn(npurp, -1, "Group purpose shall be text - ignoring this field\n"); } else if (prp != NULL) /* or the implicit one returned by parse_layer_type() */ - pcb_layergrp_set_purpose__(g, pcb_strdup(prp)); + pcb_layergrp_set_purpose__(g, pcb_strdup(prp), 0); /* load attributes */ nattr = lht_dom_hash_get(grp, "attributes"); Index: trunk/src_plugins/io_tedax/stackup.c =================================================================== --- trunk/src_plugins/io_tedax/stackup.c (revision 29675) +++ trunk/src_plugins/io_tedax/stackup.c (revision 29676) @@ -264,7 +264,7 @@ grp->ltype |= t->type; grp->purpose = NULL; if (t->purpose != NULL) - pcb_layergrp_set_purpose(grp, t->purpose); + pcb_layergrp_set_purpose(grp, t->purpose, 0); return 0; } } Index: trunk/src_plugins/propedit/propsel.c =================================================================== --- trunk/src_plugins/propedit/propsel.c (revision 29675) +++ trunk/src_plugins/propedit/propsel.c (revision 29676) @@ -450,10 +450,10 @@ if (strncmp(st->name, "p/layer_group/", 14) == 0) { if ((strcmp(pn, "name") == 0) && - (pcb_layergrp_rename_(grp, pcb_strdup(st->s)) == 0)) DONE; + (pcb_layergrp_rename_(grp, pcb_strdup(st->s), 1) == 0)) DONE; if ((strcmp(pn, "purpose") == 0) && - (pcb_layergrp_set_purpose(grp, st->s) == 0)) DONE; + (pcb_layergrp_set_purpose(grp, st->s, 1) == 0)) DONE; } }