Index: trunk/src/buffer.c =================================================================== --- trunk/src/buffer.c (revision 9010) +++ trunk/src/buffer.c (revision 9011) @@ -216,6 +216,7 @@ Buffer->Y = newPCB->CursorY; pcb_board_remove(newPCB); Buffer->Data->pcb = pcb; + pcb_data_set_layer_parents(Buffer->Data); pcb_event(PCB_EVENT_LAYERS_CHANGED, NULL); /* undo the events generated on load */ return (pcb_true); } @@ -335,6 +336,7 @@ pcb_data_t *data; data = (pcb_data_t *) calloc(1, sizeof(pcb_data_t)); data->pcb = (pcb_board_t *)pcb; + pcb_data_set_layer_parents(data); return data; } Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 9010) +++ trunk/src/data.c (revision 9011) @@ -336,3 +336,9 @@ return (pcb_data_is_empty(Data) ? NULL : out); } +void pcb_data_set_layer_parents(pcb_data_t *data) +{ + pcb_layer_id_t n; + for(n = 0; n < PCB_MAX_LAYER; n++) + data->Layer[n].parent = data; +} Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 9010) +++ trunk/src/data.h (revision 9011) @@ -119,4 +119,7 @@ * returns NULL if layout is empty */ pcb_box_t *pcb_data_bbox(pcb_box_t *out, pcb_data_t *Data); +/* Make sure all layers of data has their .parent field pointing to the data */ +void pcb_data_set_layer_parents(pcb_data_t *data); + #endif Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 9010) +++ trunk/src/layer.c (revision 9011) @@ -323,6 +323,7 @@ } PCB->Data->Layer[id].grp = grp; + PCB->Data->Layer[id].parent = PCB->Data; return id; } @@ -394,7 +395,7 @@ } /* Initialize a new layer with safe initial values */ -static void layer_init(pcb_layer_t *lp, pcb_layer_id_t idx, pcb_layergrp_id_t gid) +static void layer_init(pcb_layer_t *lp, pcb_layer_id_t idx, pcb_layergrp_id_t gid, pcb_data_t *parent) { memset(lp, 0, sizeof(pcb_layer_t)); lp->grp = gid; @@ -410,6 +411,7 @@ default: break; } } + lp->parent = parent; } int pcb_layer_move(pcb_layer_id_t old_index, pcb_layer_id_t new_index, pcb_layergrp_id_t new_in_grp) @@ -448,9 +450,9 @@ lp = &PCB->Data->Layer[new_lid]; if (new_in_grp >= 0) - layer_init(lp, new_lid, new_in_grp); + layer_init(lp, new_lid, new_in_grp, PCB->Data); else - layer_init(lp, new_lid, PCB->Data->Layer[new_index].grp); + layer_init(lp, new_lid, PCB->Data->Layer[new_index].grp, PCB->Data); g = pcb_get_layergrp(PCB, lp->grp); Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 9010) +++ trunk/src/layer.h (revision 9011) @@ -111,6 +111,7 @@ pcb_layer_combining_t comb; /* how to combine this layer with other layers in the group */ const char *cookie; /* for UI layers: registration cookie; NULL for unused UI layers */ + pcb_data_t *parent; }; Index: trunk/src_plugins/fp_board/fp_board.c =================================================================== --- trunk/src_plugins/fp_board/fp_board.c (revision 9010) +++ trunk/src_plugins/fp_board/fp_board.c (revision 9011) @@ -116,6 +116,7 @@ Later on we should just return the footprint. */ memset(&op, 0, sizeof(op)); op.buffer.dst = calloc(sizeof(pcb_data_t), 1); + pcb_data_set_layer_parents(op.buffer.dst); AddElementToBuffer(&op, element); f = fopen(tmp_name, "w"); Index: trunk/src_plugins/io_lihata/read.c =================================================================== --- trunk/src_plugins/io_lihata/read.c (revision 9010) +++ trunk/src_plugins/io_lihata/read.c (revision 9011) @@ -555,6 +555,7 @@ dt->LayerN = layer_id+1; ly->Name = pcb_strdup(grp->name); + ly->parent = dt; parse_bool(&ly->On, lht_dom_hash_get(grp, "visible")); if (pcb != NULL) { @@ -889,8 +890,7 @@ if (nd->type != LHT_HASH) return NULL; - dt = calloc(sizeof(pcb_data_t), 1); - dt->pcb = pcb; + dt = pcb_buffer_new(pcb); pcb->Data = dt; grp = lht_dom_hash_get(nd, "layers"); Index: trunk/src_plugins/io_pcb/file.c =================================================================== --- trunk/src_plugins/io_pcb/file.c (revision 9010) +++ trunk/src_plugins/io_pcb/file.c (revision 9011) @@ -712,6 +712,7 @@ return -1; lid = pcb->Data->LayerN; pcb->Data->Layer[lid].Name = pcb_strdup(name); + pcb->Data->Layer[lid].parent = pcb->Data; pcb->Data->LayerN++; return lid; } Index: trunk/src_plugins/io_pcb/parse_l.c =================================================================== --- trunk/src_plugins/io_pcb/parse_l.c (revision 9010) +++ trunk/src_plugins/io_pcb/parse_l.c (revision 9011) @@ -2473,6 +2473,7 @@ yy_settings_dest = CFR_invalid; yyPCB = NULL; yyData = Ptr; + pcb_data_set_layer_parents(Ptr); yyFont = pcb_font(PCB, 0, 1); yyFontkitValid = NULL; yyElement = NULL; Index: trunk/src_plugins/io_pcb/parse_l.l =================================================================== --- trunk/src_plugins/io_pcb/parse_l.l (revision 9010) +++ trunk/src_plugins/io_pcb/parse_l.l (revision 9011) @@ -332,6 +332,7 @@ yy_settings_dest = CFR_invalid; yyPCB = NULL; yyData = Ptr; + pcb_data_set_layer_parents(Ptr); yyFont = pcb_font(PCB, 0, 1); yyFontkitValid = NULL; yyElement = NULL; Index: trunk/src_plugins/io_pcb/parse_y.c =================================================================== --- trunk/src_plugins/io_pcb/parse_y.c (revision 9010) +++ trunk/src_plugins/io_pcb/parse_y.c (revision 9011) @@ -590,21 +590,21 @@ 564, 591, 595, 600, 628, 632, 676, 685, 694, 698, 699, 703, 704, 708, 709, 709, 710, 711, 713, 713, 720, 724, 725, 726, 727, 728, 764, 774, 785, 795, - 805, 841, 846, 878, 877, 905, 906, 910, 911, 915, - 916, 917, 918, 919, 920, 922, 927, 928, 929, 930, - 930, 931, 961, 970, 979, 1027, 1036, 1045, 1082, 1092, - 1110, 1160, 1159, 1198, 1200, 1205, 1204, 1211, 1213, 1218, - 1222, 1282, 1283, 1284, 1285, 1286, 1294, 1293, 1312, 1311, - 1330, 1329, 1350, 1348, 1372, 1370, 1456, 1457, 1461, 1462, - 1463, 1464, 1465, 1467, 1472, 1477, 1482, 1487, 1492, 1497, - 1497, 1501, 1502, 1506, 1507, 1508, 1509, 1511, 1517, 1524, - 1529, 1534, 1534, 1575, 1587, 1599, 1610, 1626, 1680, 1694, - 1707, 1718, 1729, 1730, 1734, 1735, 1757, 1759, 1775, 1794, - 1795, 1798, 1800, 1801, 1822, 1829, 1845, 1846, 1850, 1855, - 1856, 1860, 1861, 1885, 1884, 1894, 1895, 1899, 1900, 1919, - 1936, 1937, 1941, 1946, 1947, 1951, 1952, 1967, 1968, 1969, - 1996, 2004, 2005, 2009, 2010, 2015, 2016, 2017, 2018, 2019, - 2020, 2021, 2022, 2023, 2024 + 805, 841, 846, 878, 877, 906, 907, 911, 912, 916, + 917, 918, 919, 920, 921, 923, 928, 929, 930, 931, + 931, 932, 962, 971, 980, 1028, 1037, 1046, 1083, 1093, + 1111, 1161, 1160, 1199, 1201, 1206, 1205, 1212, 1214, 1219, + 1223, 1283, 1284, 1285, 1286, 1287, 1295, 1294, 1313, 1312, + 1331, 1330, 1351, 1349, 1373, 1371, 1457, 1458, 1462, 1463, + 1464, 1465, 1466, 1468, 1473, 1478, 1483, 1488, 1493, 1498, + 1498, 1502, 1503, 1507, 1508, 1509, 1510, 1512, 1518, 1525, + 1530, 1535, 1535, 1576, 1588, 1600, 1611, 1627, 1681, 1695, + 1708, 1719, 1730, 1731, 1735, 1736, 1758, 1760, 1776, 1795, + 1796, 1799, 1801, 1802, 1823, 1830, 1846, 1847, 1851, 1856, + 1857, 1861, 1862, 1886, 1885, 1895, 1896, 1900, 1901, 1920, + 1937, 1938, 1942, 1947, 1948, 1952, 1953, 1968, 1969, 1970, + 1997, 2005, 2006, 2010, 2011, 2016, 2017, 2018, 2019, 2020, + 2021, 2022, 2023, 2024, 2025 }; #endif @@ -2234,6 +2234,7 @@ YYABORT; } Layer = &yyData->Layer[(yyvsp[-4].integer)-1]; + Layer->parent = yyData; /* memory for name is already allocated */ if (Layer->Name != NULL) @@ -2245,44 +2246,44 @@ if ((yyvsp[-2].string) != NULL) free((yyvsp[-2].string)); } -#line 2249 "parse_y.c" /* yacc.c:1646 */ +#line 2250 "parse_y.c" /* yacc.c:1646 */ break; case 85: -#line 923 "parse_y.y" /* yacc.c:1646 */ +#line 924 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_new_from_rectangle(Layer, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-5].measure)) + OU ((yyvsp[-3].measure)), OU ((yyvsp[-4].measure)) + OU ((yyvsp[-2].measure)), pcb_flag_old((yyvsp[-1].integer))); } -#line 2258 "parse_y.c" /* yacc.c:1646 */ +#line 2259 "parse_y.c" /* yacc.c:1646 */ break; case 89: -#line 930 "parse_y.y" /* yacc.c:1646 */ +#line 931 "parse_y.y" /* yacc.c:1646 */ { attr_list = & Layer->Attributes; } -#line 2264 "parse_y.c" /* yacc.c:1646 */ +#line 2265 "parse_y.c" /* yacc.c:1646 */ break; case 92: -#line 962 "parse_y.y" /* yacc.c:1646 */ +#line 963 "parse_y.y" /* yacc.c:1646 */ { pcb_line_new(Layer, NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), NU ((yyvsp[-3].measure)), NU ((yyvsp[-2].measure)), (yyvsp[-1].flagtype)); } -#line 2273 "parse_y.c" /* yacc.c:1646 */ +#line 2274 "parse_y.c" /* yacc.c:1646 */ break; case 93: -#line 971 "parse_y.y" /* yacc.c:1646 */ +#line 972 "parse_y.y" /* yacc.c:1646 */ { pcb_line_new(Layer, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), pcb_flag_old((yyvsp[-1].integer))); } -#line 2282 "parse_y.c" /* yacc.c:1646 */ +#line 2283 "parse_y.c" /* yacc.c:1646 */ break; case 94: -#line 980 "parse_y.y" /* yacc.c:1646 */ +#line 981 "parse_y.y" /* yacc.c:1646 */ { /* eliminate old-style rat-lines */ if ((IV ((yyvsp[-1].measure)) & PCB_FLAG_RAT) == 0) @@ -2289,48 +2290,48 @@ pcb_line_new(Layer, OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), 200*PCB_GROUNDPLANEFRAME, pcb_flag_old(IV ((yyvsp[-1].measure)))); } -#line 2293 "parse_y.c" /* yacc.c:1646 */ +#line 2294 "parse_y.c" /* yacc.c:1646 */ break; case 95: -#line 1028 "parse_y.y" /* yacc.c:1646 */ +#line 1029 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, NU ((yyvsp[-9].measure)), NU ((yyvsp[-8].measure)), NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), (yyvsp[-3].number), (yyvsp[-2].number), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-1].flagtype)); } -#line 2302 "parse_y.c" /* yacc.c:1646 */ +#line 2303 "parse_y.c" /* yacc.c:1646 */ break; case 96: -#line 1037 "parse_y.y" /* yacc.c:1646 */ +#line 1038 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, OU ((yyvsp[-9].measure)), OU ((yyvsp[-8].measure)), OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), (yyvsp[-3].number), (yyvsp[-2].number), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), pcb_flag_old((yyvsp[-1].integer))); } -#line 2311 "parse_y.c" /* yacc.c:1646 */ +#line 2312 "parse_y.c" /* yacc.c:1646 */ break; case 97: -#line 1046 "parse_y.y" /* yacc.c:1646 */ +#line 1047 "parse_y.y" /* yacc.c:1646 */ { pcb_arc_new(Layer, OU ((yyvsp[-8].measure)), OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-6].measure)), IV ((yyvsp[-3].measure)), (yyvsp[-2].number), OU ((yyvsp[-4].measure)), 200*PCB_GROUNDPLANEFRAME, pcb_flag_old((yyvsp[-1].integer))); } -#line 2320 "parse_y.c" /* yacc.c:1646 */ +#line 2321 "parse_y.c" /* yacc.c:1646 */ break; case 98: -#line 1083 "parse_y.y" /* yacc.c:1646 */ +#line 1084 "parse_y.y" /* yacc.c:1646 */ { /* use a default scale of 100% */ pcb_text_new(Layer,yyFont,OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].number), 100, (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2330 "parse_y.c" /* yacc.c:1646 */ +#line 2331 "parse_y.c" /* yacc.c:1646 */ break; case 99: -#line 1093 "parse_y.y" /* yacc.c:1646 */ +#line 1094 "parse_y.y" /* yacc.c:1646 */ { if ((yyvsp[-1].integer) & PCB_FLAG_ONSILK) { @@ -2345,11 +2346,11 @@ pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2349 "parse_y.c" /* yacc.c:1646 */ +#line 2350 "parse_y.c" /* yacc.c:1646 */ break; case 100: -#line 1111 "parse_y.y" /* yacc.c:1646 */ +#line 1112 "parse_y.y" /* yacc.c:1646 */ { /* FIXME: shouldn't know about .f */ /* I don't think this matters because anything with hi_format @@ -2369,19 +2370,19 @@ pcb_text_new(Layer, yyFont, NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), (yyvsp[-4].number), (yyvsp[-3].number), (yyvsp[-2].string), (yyvsp[-1].flagtype)); free ((yyvsp[-2].string)); } -#line 2373 "parse_y.c" /* yacc.c:1646 */ +#line 2374 "parse_y.c" /* yacc.c:1646 */ break; case 101: -#line 1160 "parse_y.y" /* yacc.c:1646 */ +#line 1161 "parse_y.y" /* yacc.c:1646 */ { Polygon = pcb_poly_new(Layer, (yyvsp[-2].flagtype)); } -#line 2381 "parse_y.c" /* yacc.c:1646 */ +#line 2382 "parse_y.c" /* yacc.c:1646 */ break; case 102: -#line 1165 "parse_y.y" /* yacc.c:1646 */ +#line 1166 "parse_y.y" /* yacc.c:1646 */ { pcb_cardinal_t contour, contour_start, contour_end; pcb_bool bad_contour_found = pcb_false; @@ -2413,35 +2414,35 @@ pcb_r_insert_entry(Layer->polygon_tree, (pcb_box_t *) Polygon, 0); } } -#line 2417 "parse_y.c" /* yacc.c:1646 */ +#line 2418 "parse_y.c" /* yacc.c:1646 */ break; case 105: -#line 1205 "parse_y.y" /* yacc.c:1646 */ +#line 1206 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_hole_new(Polygon); } -#line 2425 "parse_y.c" /* yacc.c:1646 */ +#line 2426 "parse_y.c" /* yacc.c:1646 */ break; case 109: -#line 1219 "parse_y.y" /* yacc.c:1646 */ +#line 1220 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_point_new(Polygon, OU ((yyvsp[-2].measure)), OU ((yyvsp[-1].measure))); } -#line 2433 "parse_y.c" /* yacc.c:1646 */ +#line 2434 "parse_y.c" /* yacc.c:1646 */ break; case 110: -#line 1223 "parse_y.y" /* yacc.c:1646 */ +#line 1224 "parse_y.y" /* yacc.c:1646 */ { pcb_poly_point_new(Polygon, NU ((yyvsp[-2].measure)), NU ((yyvsp[-1].measure))); } -#line 2441 "parse_y.c" /* yacc.c:1646 */ +#line 2442 "parse_y.c" /* yacc.c:1646 */ break; case 116: -#line 1294 "parse_y.y" /* yacc.c:1646 */ +#line 1295 "parse_y.y" /* yacc.c:1646 */ { yyElement = pcb_element_new(yyData, yyElement, yyFont, pcb_no_flags(), (yyvsp[-6].string), (yyvsp[-5].string), NULL, OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), (yyvsp[-2].integer), 100, pcb_no_flags(), pcb_false); @@ -2449,19 +2450,19 @@ free ((yyvsp[-5].string)); pin_num = 1; } -#line 2453 "parse_y.c" /* yacc.c:1646 */ +#line 2454 "parse_y.c" /* yacc.c:1646 */ break; case 117: -#line 1302 "parse_y.y" /* yacc.c:1646 */ +#line 1303 "parse_y.y" /* yacc.c:1646 */ { pcb_element_bbox(yyData, yyElement, yyFont); } -#line 2461 "parse_y.c" /* yacc.c:1646 */ +#line 2462 "parse_y.c" /* yacc.c:1646 */ break; case 118: -#line 1312 "parse_y.y" /* yacc.c:1646 */ +#line 1313 "parse_y.y" /* yacc.c:1646 */ { yyElement = pcb_element_new(yyData, yyElement, yyFont, pcb_flag_old((yyvsp[-9].integer)), (yyvsp[-8].string), (yyvsp[-7].string), NULL, OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), IV ((yyvsp[-4].measure)), IV ((yyvsp[-3].measure)), pcb_flag_old((yyvsp[-2].integer)), pcb_false); @@ -2469,19 +2470,19 @@ free ((yyvsp[-7].string)); pin_num = 1; } -#line 2473 "parse_y.c" /* yacc.c:1646 */ +#line 2474 "parse_y.c" /* yacc.c:1646 */ break; case 119: -#line 1320 "parse_y.y" /* yacc.c:1646 */ +#line 1321 "parse_y.y" /* yacc.c:1646 */ { pcb_element_bbox(yyData, yyElement, yyFont); } -#line 2481 "parse_y.c" /* yacc.c:1646 */ +#line 2482 "parse_y.c" /* yacc.c:1646 */ break; case 120: -#line 1330 "parse_y.y" /* yacc.c:1646 */ +#line 1331 "parse_y.y" /* yacc.c:1646 */ { yyElement = pcb_element_new(yyData, yyElement, yyFont, pcb_flag_old((yyvsp[-10].integer)), (yyvsp[-9].string), (yyvsp[-8].string), (yyvsp[-7].string), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), IV ((yyvsp[-4].measure)), IV ((yyvsp[-3].measure)), pcb_flag_old((yyvsp[-2].integer)), pcb_false); @@ -2490,19 +2491,19 @@ free ((yyvsp[-7].string)); pin_num = 1; } -#line 2494 "parse_y.c" /* yacc.c:1646 */ +#line 2495 "parse_y.c" /* yacc.c:1646 */ break; case 121: -#line 1339 "parse_y.y" /* yacc.c:1646 */ +#line 1340 "parse_y.y" /* yacc.c:1646 */ { pcb_element_bbox(yyData, yyElement, yyFont); } -#line 2502 "parse_y.c" /* yacc.c:1646 */ +#line 2503 "parse_y.c" /* yacc.c:1646 */ break; case 122: -#line 1350 "parse_y.y" /* yacc.c:1646 */ +#line 1351 "parse_y.y" /* yacc.c:1646 */ { yyElement = pcb_element_new(yyData, yyElement, yyFont, pcb_flag_old((yyvsp[-12].integer)), (yyvsp[-11].string), (yyvsp[-10].string), (yyvsp[-9].string), OU ((yyvsp[-8].measure)) + OU ((yyvsp[-6].measure)), OU ((yyvsp[-7].measure)) + OU ((yyvsp[-5].measure)), @@ -2513,19 +2514,19 @@ free ((yyvsp[-10].string)); free ((yyvsp[-9].string)); } -#line 2517 "parse_y.c" /* yacc.c:1646 */ +#line 2518 "parse_y.c" /* yacc.c:1646 */ break; case 123: -#line 1361 "parse_y.y" /* yacc.c:1646 */ +#line 1362 "parse_y.y" /* yacc.c:1646 */ { pcb_element_bbox(yyData, yyElement, yyFont); } -#line 2525 "parse_y.c" /* yacc.c:1646 */ +#line 2526 "parse_y.c" /* yacc.c:1646 */ break; case 124: -#line 1372 "parse_y.y" /* yacc.c:1646 */ +#line 1373 "parse_y.y" /* yacc.c:1646 */ { yyElement = pcb_element_new(yyData, yyElement, yyFont, (yyvsp[-12].flagtype), (yyvsp[-11].string), (yyvsp[-10].string), (yyvsp[-9].string), NU ((yyvsp[-8].measure)) + NU ((yyvsp[-6].measure)), NU ((yyvsp[-7].measure)) + NU ((yyvsp[-5].measure)), @@ -2536,11 +2537,11 @@ free ((yyvsp[-10].string)); free ((yyvsp[-9].string)); } -#line 2540 "parse_y.c" /* yacc.c:1646 */ +#line 2541 "parse_y.c" /* yacc.c:1646 */ break; case 125: -#line 1383 "parse_y.y" /* yacc.c:1646 */ +#line 1384 "parse_y.y" /* yacc.c:1646 */ { if (pcb_element_is_empty(yyElement)) { pcb_element_free(yyElement); @@ -2549,111 +2550,111 @@ else pcb_element_bbox(yyData, yyElement, yyFont); } -#line 2553 "parse_y.c" /* yacc.c:1646 */ +#line 2554 "parse_y.c" /* yacc.c:1646 */ break; case 133: -#line 1468 "parse_y.y" /* yacc.c:1646 */ +#line 1469 "parse_y.y" /* yacc.c:1646 */ { pcb_element_line_new(yyElement, NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), NU ((yyvsp[-3].measure)), NU ((yyvsp[-2].measure)), NU ((yyvsp[-1].measure))); } -#line 2561 "parse_y.c" /* yacc.c:1646 */ +#line 2562 "parse_y.c" /* yacc.c:1646 */ break; case 134: -#line 1473 "parse_y.y" /* yacc.c:1646 */ +#line 1474 "parse_y.y" /* yacc.c:1646 */ { pcb_element_line_new(yyElement, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), OU ((yyvsp[-1].measure))); } -#line 2569 "parse_y.c" /* yacc.c:1646 */ +#line 2570 "parse_y.c" /* yacc.c:1646 */ break; case 135: -#line 1478 "parse_y.y" /* yacc.c:1646 */ +#line 1479 "parse_y.y" /* yacc.c:1646 */ { pcb_element_arc_new(yyElement, NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), NU ((yyvsp[-1].measure))); } -#line 2577 "parse_y.c" /* yacc.c:1646 */ +#line 2578 "parse_y.c" /* yacc.c:1646 */ break; case 136: -#line 1483 "parse_y.y" /* yacc.c:1646 */ +#line 1484 "parse_y.y" /* yacc.c:1646 */ { pcb_element_arc_new(yyElement, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), OU ((yyvsp[-1].measure))); } -#line 2585 "parse_y.c" /* yacc.c:1646 */ +#line 2586 "parse_y.c" /* yacc.c:1646 */ break; case 137: -#line 1488 "parse_y.y" /* yacc.c:1646 */ +#line 1489 "parse_y.y" /* yacc.c:1646 */ { yyElement->MarkX = NU ((yyvsp[-2].measure)); yyElement->MarkY = NU ((yyvsp[-1].measure)); } -#line 2594 "parse_y.c" /* yacc.c:1646 */ +#line 2595 "parse_y.c" /* yacc.c:1646 */ break; case 138: -#line 1493 "parse_y.y" /* yacc.c:1646 */ +#line 1494 "parse_y.y" /* yacc.c:1646 */ { yyElement->MarkX = OU ((yyvsp[-2].measure)); yyElement->MarkY = OU ((yyvsp[-1].measure)); } -#line 2603 "parse_y.c" /* yacc.c:1646 */ +#line 2604 "parse_y.c" /* yacc.c:1646 */ break; case 139: -#line 1497 "parse_y.y" /* yacc.c:1646 */ +#line 1498 "parse_y.y" /* yacc.c:1646 */ { attr_list = & yyElement->Attributes; } -#line 2609 "parse_y.c" /* yacc.c:1646 */ +#line 2610 "parse_y.c" /* yacc.c:1646 */ break; case 147: -#line 1512 "parse_y.y" /* yacc.c:1646 */ +#line 1513 "parse_y.y" /* yacc.c:1646 */ { pcb_element_line_new(yyElement, NU ((yyvsp[-5].measure)) + yyElement->MarkX, NU ((yyvsp[-4].measure)) + yyElement->MarkY, NU ((yyvsp[-3].measure)) + yyElement->MarkX, NU ((yyvsp[-2].measure)) + yyElement->MarkY, NU ((yyvsp[-1].measure))); } -#line 2619 "parse_y.c" /* yacc.c:1646 */ +#line 2620 "parse_y.c" /* yacc.c:1646 */ break; case 148: -#line 1518 "parse_y.y" /* yacc.c:1646 */ +#line 1519 "parse_y.y" /* yacc.c:1646 */ { pcb_element_line_new(yyElement, OU ((yyvsp[-5].measure)) + yyElement->MarkX, OU ((yyvsp[-4].measure)) + yyElement->MarkY, OU ((yyvsp[-3].measure)) + yyElement->MarkX, OU ((yyvsp[-2].measure)) + yyElement->MarkY, OU ((yyvsp[-1].measure))); } -#line 2629 "parse_y.c" /* yacc.c:1646 */ +#line 2630 "parse_y.c" /* yacc.c:1646 */ break; case 149: -#line 1525 "parse_y.y" /* yacc.c:1646 */ +#line 1526 "parse_y.y" /* yacc.c:1646 */ { pcb_element_arc_new(yyElement, NU ((yyvsp[-7].measure)) + yyElement->MarkX, NU ((yyvsp[-6].measure)) + yyElement->MarkY, NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), NU ((yyvsp[-1].measure))); } -#line 2638 "parse_y.c" /* yacc.c:1646 */ +#line 2639 "parse_y.c" /* yacc.c:1646 */ break; case 150: -#line 1530 "parse_y.y" /* yacc.c:1646 */ +#line 1531 "parse_y.y" /* yacc.c:1646 */ { pcb_element_arc_new(yyElement, OU ((yyvsp[-7].measure)) + yyElement->MarkX, OU ((yyvsp[-6].measure)) + yyElement->MarkY, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].number), (yyvsp[-2].number), OU ((yyvsp[-1].measure))); } -#line 2647 "parse_y.c" /* yacc.c:1646 */ +#line 2648 "parse_y.c" /* yacc.c:1646 */ break; case 151: -#line 1534 "parse_y.y" /* yacc.c:1646 */ +#line 1535 "parse_y.y" /* yacc.c:1646 */ { attr_list = & yyElement->Attributes; } -#line 2653 "parse_y.c" /* yacc.c:1646 */ +#line 2654 "parse_y.c" /* yacc.c:1646 */ break; case 153: -#line 1576 "parse_y.y" /* yacc.c:1646 */ +#line 1577 "parse_y.y" /* yacc.c:1646 */ { pcb_element_pin_new(yyElement, NU ((yyvsp[-9].measure)) + yyElement->MarkX, NU ((yyvsp[-8].measure)) + yyElement->MarkY, NU ((yyvsp[-7].measure)), NU ((yyvsp[-6].measure)), NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), (yyvsp[-3].string), @@ -2661,11 +2662,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2665 "parse_y.c" /* yacc.c:1646 */ +#line 2666 "parse_y.c" /* yacc.c:1646 */ break; case 154: -#line 1588 "parse_y.y" /* yacc.c:1646 */ +#line 1589 "parse_y.y" /* yacc.c:1646 */ { pcb_element_pin_new(yyElement, OU ((yyvsp[-9].measure)) + yyElement->MarkX, OU ((yyvsp[-8].measure)) + yyElement->MarkY, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), (yyvsp[-3].string), @@ -2673,11 +2674,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2677 "parse_y.c" /* yacc.c:1646 */ +#line 2678 "parse_y.c" /* yacc.c:1646 */ break; case 155: -#line 1600 "parse_y.y" /* yacc.c:1646 */ +#line 1601 "parse_y.y" /* yacc.c:1646 */ { pcb_element_pin_new(yyElement, OU ((yyvsp[-7].measure)), OU ((yyvsp[-6].measure)), OU ((yyvsp[-5].measure)), 2*PCB_GROUNDPLANEFRAME, OU ((yyvsp[-5].measure)) + 2*PCB_MASKFRAME, OU ((yyvsp[-4].measure)), (yyvsp[-3].string), (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); @@ -2684,11 +2685,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2688 "parse_y.c" /* yacc.c:1646 */ +#line 2689 "parse_y.c" /* yacc.c:1646 */ break; case 156: -#line 1611 "parse_y.y" /* yacc.c:1646 */ +#line 1612 "parse_y.y" /* yacc.c:1646 */ { char p_number[8]; @@ -2698,11 +2699,11 @@ free ((yyvsp[-2].string)); } -#line 2702 "parse_y.c" /* yacc.c:1646 */ +#line 2703 "parse_y.c" /* yacc.c:1646 */ break; case 157: -#line 1627 "parse_y.y" /* yacc.c:1646 */ +#line 1628 "parse_y.y" /* yacc.c:1646 */ { pcb_coord_t hole = OU ((yyvsp[-3].measure)) * PCB_DEFAULT_DRILLINGHOLE; char p_number[8]; @@ -2717,11 +2718,11 @@ OU ((yyvsp[-3].measure)) + 2*PCB_MASKFRAME, hole, (yyvsp[-2].string), p_number, pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2721 "parse_y.c" /* yacc.c:1646 */ +#line 2722 "parse_y.c" /* yacc.c:1646 */ break; case 158: -#line 1681 "parse_y.y" /* yacc.c:1646 */ +#line 1682 "parse_y.y" /* yacc.c:1646 */ { pcb_element_pad_new(yyElement, NU ((yyvsp[-10].measure)) + yyElement->MarkX, NU ((yyvsp[-9].measure)) + yyElement->MarkY, @@ -2731,11 +2732,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2735 "parse_y.c" /* yacc.c:1646 */ +#line 2736 "parse_y.c" /* yacc.c:1646 */ break; case 159: -#line 1695 "parse_y.y" /* yacc.c:1646 */ +#line 1696 "parse_y.y" /* yacc.c:1646 */ { pcb_element_pad_new(yyElement,OU ((yyvsp[-10].measure)) + yyElement->MarkX, OU ((yyvsp[-9].measure)) + yyElement->MarkY, OU ((yyvsp[-8].measure)) + yyElement->MarkX, @@ -2744,11 +2745,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2748 "parse_y.c" /* yacc.c:1646 */ +#line 2749 "parse_y.c" /* yacc.c:1646 */ break; case 160: -#line 1708 "parse_y.y" /* yacc.c:1646 */ +#line 1709 "parse_y.y" /* yacc.c:1646 */ { pcb_element_pad_new(yyElement,OU ((yyvsp[-8].measure)),OU ((yyvsp[-7].measure)),OU ((yyvsp[-6].measure)),OU ((yyvsp[-5].measure)),OU ((yyvsp[-4].measure)), 2*PCB_GROUNDPLANEFRAME, OU ((yyvsp[-4].measure)) + 2*PCB_MASKFRAME, (yyvsp[-3].string), (yyvsp[-2].string), pcb_flag_old((yyvsp[-1].integer))); @@ -2755,11 +2756,11 @@ free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2759 "parse_y.c" /* yacc.c:1646 */ +#line 2760 "parse_y.c" /* yacc.c:1646 */ break; case 161: -#line 1719 "parse_y.y" /* yacc.c:1646 */ +#line 1720 "parse_y.y" /* yacc.c:1646 */ { char p_number[8]; @@ -2768,23 +2769,23 @@ OU ((yyvsp[-3].measure)) + 2*PCB_MASKFRAME, (yyvsp[-2].string),p_number, pcb_flag_old((yyvsp[-1].integer))); free ((yyvsp[-2].string)); } -#line 2772 "parse_y.c" /* yacc.c:1646 */ +#line 2773 "parse_y.c" /* yacc.c:1646 */ break; case 162: -#line 1729 "parse_y.y" /* yacc.c:1646 */ +#line 1730 "parse_y.y" /* yacc.c:1646 */ { (yyval.flagtype) = pcb_flag_old((yyvsp[0].integer)); } -#line 2778 "parse_y.c" /* yacc.c:1646 */ +#line 2779 "parse_y.c" /* yacc.c:1646 */ break; case 163: -#line 1730 "parse_y.y" /* yacc.c:1646 */ +#line 1731 "parse_y.y" /* yacc.c:1646 */ { (yyval.flagtype) = pcb_strflg_s2f((yyvsp[0].string), yyerror); free((yyvsp[0].string)); } -#line 2784 "parse_y.c" /* yacc.c:1646 */ +#line 2785 "parse_y.c" /* yacc.c:1646 */ break; case 167: -#line 1760 "parse_y.y" /* yacc.c:1646 */ +#line 1761 "parse_y.y" /* yacc.c:1646 */ { if ((yyvsp[-3].integer) <= 0 || (yyvsp[-3].integer) > PCB_MAX_FONTPOSITION) { @@ -2800,11 +2801,11 @@ Symbol->Valid = pcb_true; Symbol->Delta = NU ((yyvsp[-2].measure)); } -#line 2804 "parse_y.c" /* yacc.c:1646 */ +#line 2805 "parse_y.c" /* yacc.c:1646 */ break; case 168: -#line 1776 "parse_y.y" /* yacc.c:1646 */ +#line 1777 "parse_y.y" /* yacc.c:1646 */ { if ((yyvsp[-3].integer) <= 0 || (yyvsp[-3].integer) > PCB_MAX_FONTPOSITION) { @@ -2820,158 +2821,158 @@ Symbol->Valid = pcb_true; Symbol->Delta = OU ((yyvsp[-2].measure)); } -#line 2824 "parse_y.c" /* yacc.c:1646 */ +#line 2825 "parse_y.c" /* yacc.c:1646 */ break; case 174: -#line 1823 "parse_y.y" /* yacc.c:1646 */ +#line 1824 "parse_y.y" /* yacc.c:1646 */ { pcb_font_new_line_in_sym(Symbol, OU ((yyvsp[-5].measure)), OU ((yyvsp[-4].measure)), OU ((yyvsp[-3].measure)), OU ((yyvsp[-2].measure)), OU ((yyvsp[-1].measure))); } -#line 2832 "parse_y.c" /* yacc.c:1646 */ +#line 2833 "parse_y.c" /* yacc.c:1646 */ break; case 175: -#line 1830 "parse_y.y" /* yacc.c:1646 */ +#line 1831 "parse_y.y" /* yacc.c:1646 */ { pcb_font_new_line_in_sym(Symbol, NU ((yyvsp[-5].measure)), NU ((yyvsp[-4].measure)), NU ((yyvsp[-3].measure)), NU ((yyvsp[-2].measure)), NU ((yyvsp[-1].measure))); } -#line 2840 "parse_y.c" /* yacc.c:1646 */ +#line 2841 "parse_y.c" /* yacc.c:1646 */ break; case 183: -#line 1885 "parse_y.y" /* yacc.c:1646 */ +#line 1886 "parse_y.y" /* yacc.c:1646 */ { Menu = pcb_lib_net_new((pcb_lib_t *)&yyPCB->NetlistLib, (yyvsp[-3].string), (yyvsp[-2].string)); free ((yyvsp[-3].string)); free ((yyvsp[-2].string)); } -#line 2850 "parse_y.c" /* yacc.c:1646 */ +#line 2851 "parse_y.c" /* yacc.c:1646 */ break; case 189: -#line 1920 "parse_y.y" /* yacc.c:1646 */ +#line 1921 "parse_y.y" /* yacc.c:1646 */ { pcb_lib_conn_new(Menu, (yyvsp[-1].string)); free ((yyvsp[-1].string)); } -#line 2859 "parse_y.c" /* yacc.c:1646 */ +#line 2860 "parse_y.c" /* yacc.c:1646 */ break; case 197: -#line 1967 "parse_y.y" /* yacc.c:1646 */ +#line 1968 "parse_y.y" /* yacc.c:1646 */ { pcb_ratspatch_append(yyPCB, RATP_ADD_CONN, (yyvsp[-2].string), (yyvsp[-1].string), NULL); free((yyvsp[-2].string)); free((yyvsp[-1].string)); } -#line 2865 "parse_y.c" /* yacc.c:1646 */ +#line 2866 "parse_y.c" /* yacc.c:1646 */ break; case 198: -#line 1968 "parse_y.y" /* yacc.c:1646 */ +#line 1969 "parse_y.y" /* yacc.c:1646 */ { pcb_ratspatch_append(yyPCB, RATP_DEL_CONN, (yyvsp[-2].string), (yyvsp[-1].string), NULL); free((yyvsp[-2].string)); free((yyvsp[-1].string)); } -#line 2871 "parse_y.c" /* yacc.c:1646 */ +#line 2872 "parse_y.c" /* yacc.c:1646 */ break; case 199: -#line 1969 "parse_y.y" /* yacc.c:1646 */ +#line 1970 "parse_y.y" /* yacc.c:1646 */ { pcb_ratspatch_append(yyPCB, RATP_CHANGE_ATTRIB, (yyvsp[-3].string), (yyvsp[-2].string), (yyvsp[-1].string)); free((yyvsp[-3].string)); free((yyvsp[-2].string)); free((yyvsp[-1].string)); } -#line 2877 "parse_y.c" /* yacc.c:1646 */ +#line 2878 "parse_y.c" /* yacc.c:1646 */ break; case 200: -#line 1997 "parse_y.y" /* yacc.c:1646 */ +#line 1998 "parse_y.y" /* yacc.c:1646 */ { pcb_attribute_put(attr_list, (yyvsp[-2].string), (yyvsp[-1].string) ? (yyvsp[-1].string) : (char *)"", 0); free ((yyvsp[-2].string)); free ((yyvsp[-1].string)); } -#line 2887 "parse_y.c" /* yacc.c:1646 */ +#line 2888 "parse_y.c" /* yacc.c:1646 */ break; case 201: -#line 2004 "parse_y.y" /* yacc.c:1646 */ +#line 2005 "parse_y.y" /* yacc.c:1646 */ { (yyval.string) = (yyvsp[0].string); } -#line 2893 "parse_y.c" /* yacc.c:1646 */ +#line 2894 "parse_y.c" /* yacc.c:1646 */ break; case 202: -#line 2005 "parse_y.y" /* yacc.c:1646 */ +#line 2006 "parse_y.y" /* yacc.c:1646 */ { (yyval.string) = 0; } -#line 2899 "parse_y.c" /* yacc.c:1646 */ +#line 2900 "parse_y.c" /* yacc.c:1646 */ break; case 203: -#line 2009 "parse_y.y" /* yacc.c:1646 */ +#line 2010 "parse_y.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[0].number); } -#line 2905 "parse_y.c" /* yacc.c:1646 */ +#line 2906 "parse_y.c" /* yacc.c:1646 */ break; case 204: -#line 2010 "parse_y.y" /* yacc.c:1646 */ +#line 2011 "parse_y.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[0].integer); } -#line 2911 "parse_y.c" /* yacc.c:1646 */ +#line 2912 "parse_y.c" /* yacc.c:1646 */ break; case 205: -#line 2015 "parse_y.y" /* yacc.c:1646 */ +#line 2016 "parse_y.y" /* yacc.c:1646 */ { do_measure(&(yyval.measure), (yyvsp[0].number), PCB_MIL_TO_COORD ((yyvsp[0].number)) / 100.0, 0); } -#line 2917 "parse_y.c" /* yacc.c:1646 */ +#line 2918 "parse_y.c" /* yacc.c:1646 */ break; case 206: -#line 2016 "parse_y.y" /* yacc.c:1646 */ +#line 2017 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MIL_TO_COORD ((yyvsp[-1].number)) / 100000.0); } -#line 2923 "parse_y.c" /* yacc.c:1646 */ +#line 2924 "parse_y.c" /* yacc.c:1646 */ break; case 207: -#line 2017 "parse_y.y" /* yacc.c:1646 */ +#line 2018 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MIL_TO_COORD ((yyvsp[-1].number)) / 100.0); } -#line 2929 "parse_y.c" /* yacc.c:1646 */ +#line 2930 "parse_y.c" /* yacc.c:1646 */ break; case 208: -#line 2018 "parse_y.y" /* yacc.c:1646 */ +#line 2019 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MIL_TO_COORD ((yyvsp[-1].number))); } -#line 2935 "parse_y.c" /* yacc.c:1646 */ +#line 2936 "parse_y.c" /* yacc.c:1646 */ break; case 209: -#line 2019 "parse_y.y" /* yacc.c:1646 */ +#line 2020 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_INCH_TO_COORD ((yyvsp[-1].number))); } -#line 2941 "parse_y.c" /* yacc.c:1646 */ +#line 2942 "parse_y.c" /* yacc.c:1646 */ break; case 210: -#line 2020 "parse_y.y" /* yacc.c:1646 */ +#line 2021 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) / 1000000.0); } -#line 2947 "parse_y.c" /* yacc.c:1646 */ +#line 2948 "parse_y.c" /* yacc.c:1646 */ break; case 211: -#line 2021 "parse_y.y" /* yacc.c:1646 */ +#line 2022 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) / 1000.0); } -#line 2953 "parse_y.c" /* yacc.c:1646 */ +#line 2954 "parse_y.c" /* yacc.c:1646 */ break; case 212: -#line 2022 "parse_y.y" /* yacc.c:1646 */ +#line 2023 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number))); } -#line 2959 "parse_y.c" /* yacc.c:1646 */ +#line 2960 "parse_y.c" /* yacc.c:1646 */ break; case 213: -#line 2023 "parse_y.y" /* yacc.c:1646 */ +#line 2024 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) * 1000.0); } -#line 2965 "parse_y.c" /* yacc.c:1646 */ +#line 2966 "parse_y.c" /* yacc.c:1646 */ break; case 214: -#line 2024 "parse_y.y" /* yacc.c:1646 */ +#line 2025 "parse_y.y" /* yacc.c:1646 */ { M ((yyval.measure), (yyvsp[-1].number), PCB_MM_TO_COORD ((yyvsp[-1].number)) * 1000000.0); } -#line 2971 "parse_y.c" /* yacc.c:1646 */ +#line 2972 "parse_y.c" /* yacc.c:1646 */ break; -#line 2975 "parse_y.c" /* yacc.c:1646 */ +#line 2976 "parse_y.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -3199,7 +3200,7 @@ #endif return yyresult; } -#line 2027 "parse_y.y" /* yacc.c:1906 */ +#line 2028 "parse_y.y" /* yacc.c:1906 */ /* --------------------------------------------------------------------------- Index: trunk/src_plugins/io_pcb/parse_y.y =================================================================== --- trunk/src_plugins/io_pcb/parse_y.y (revision 9010) +++ trunk/src_plugins/io_pcb/parse_y.y (revision 9011) @@ -887,6 +887,7 @@ YYABORT; } Layer = &yyData->Layer[$3-1]; + Layer->parent = yyData; /* memory for name is already allocated */ if (Layer->Name != NULL) Index: trunk/src_plugins/lib_gtk_common/dlg_propedit.c =================================================================== --- trunk/src_plugins/lib_gtk_common/dlg_propedit.c (revision 9010) +++ trunk/src_plugins/lib_gtk_common/dlg_propedit.c (revision 9011) @@ -323,6 +323,7 @@ preview_pcb.LayerGroups.grp[0].len = 1; preview_pcb.LayerGroups.len = 1; preview_pcb.Data->pcb = &preview_pcb; + preview_pcb.Data->Layer[0].parent = &preview_pcb.Data; #warning TODO: preview_pcb is never freed