Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 18340) +++ trunk/src/layer.c (revision 18341) @@ -228,8 +228,8 @@ pcb_layer_id_t pcb_layer_id(pcb_data_t *Data, pcb_layer_t *Layer) { - if ((Layer >= pcb_uilayer.array) && (Layer < pcb_uilayer.array + vtlayer_len(&pcb_uilayer))) - return (Layer - pcb_uilayer.array) | PCB_LYT_UI; + if (Layer->parent_type == PCB_PARENT_UI) + return pcb_uilayer_get_id(Layer); if (Layer->parent.data != Data) { /* the only case this makes sense is when we are resolving a bound layer */ @@ -676,11 +676,8 @@ { if ((id >= 0) && (id < data->LayerN)) return &data->Layer[id]; - if (id & PCB_LYT_UI) { - id &= ~(PCB_LYT_VIRTUAL | PCB_LYT_UI); - if ((id >= 0) && (id < vtlayer_len(&pcb_uilayer))) - return &(pcb_uilayer.array[id]); - } + if (id & PCB_LYT_UI) + return pcb_uilayer_get(id); return NULL; } Index: trunk/src/layer_ui.c =================================================================== --- trunk/src/layer_ui.c (revision 18340) +++ trunk/src/layer_ui.c (revision 18341) @@ -122,3 +122,12 @@ return NULL; return (pcb_layer_t *)(*p); } + +long pcb_uilayer_get_id(pcb_layer_t *ly) +{ + int n; + for(n = 0; n < vtp0_len(&pcb_uilayers); n++) + if (pcb_uilayers.array[n] == ly) + return (long)n | PCB_LYT_UI; + return -1; +} Index: trunk/src/layer_ui.h =================================================================== --- trunk/src/layer_ui.h (revision 18340) +++ trunk/src/layer_ui.h (revision 18341) @@ -61,5 +61,6 @@ void pcb_uilayer_uninit(void); pcb_layer_t *pcb_uilayer_get(long ui_ly_id); +long pcb_uilayer_get_id(pcb_layer_t *ly); #endif