Index: trunk/src/layer_vis.c =================================================================== --- trunk/src/layer_vis.c (revision 8629) +++ trunk/src/layer_vis.c (revision 8630) @@ -76,12 +76,15 @@ * changes the visibility of all layers in a group * returns the number of changed layers */ -int pcb_layervis_change_group_vis(pcb_layer_id_t Layer, pcb_bool On, pcb_bool ChangeStackOrder) +int pcb_layervis_change_group_vis(pcb_layer_id_t Layer, int On, pcb_bool ChangeStackOrder) { pcb_layergrp_id_t group; int i, changed = 1; /* at least the current layer changes */ + if (Layer & PCB_LYT_UI) { + if (On < 0) + On = !pcb_uilayer.array[Layer].On; Layer &= ~(PCB_LYT_UI | PCB_LYT_VIRTUAL); if (Layer >= vtlayer_len(&pcb_uilayer)) return 0; @@ -90,6 +93,9 @@ goto done; } + if (On < 0) + On = !PCB->Data->Layer[Layer].On; + if (conf_core.rc.verbose) printf("pcb_layervis_change_group_vis(Layer=%d, On=%d, ChangeStackOrder=%d)\n", Layer, On, ChangeStackOrder); Index: trunk/src/layer_vis.h =================================================================== --- trunk/src/layer_vis.h (revision 8629) +++ trunk/src/layer_vis.h (revision 8630) @@ -33,8 +33,8 @@ #include "layer.h" /* changes the visibility of all layers in a group; returns the number of - changed layers */ -int pcb_layervis_change_group_vis(pcb_layer_id_t Layer, pcb_bool On, pcb_bool ChangeStackOrder); + changed layers; on should be 0 or 1 for setting the state or -1 for toggling it */ +int pcb_layervis_change_group_vis(pcb_layer_id_t Layer, int On, pcb_bool ChangeStackOrder); /* resets the layer visibility stack setting */ void pcb_layervis_reset_stack(void);