Index: work/gtk/layersel/layersel.c =================================================================== --- work/gtk/layersel/layersel.c (revision 8521) +++ work/gtk/layersel/layersel.c (revision 8522) @@ -64,13 +64,29 @@ } /*** Sync ***/ + +static void layer_vis_sync(layersel_layer_t *lsl) +{ + if (lsl->on) { + gtk_widget_show(lsl->vis_on); + gtk_widget_hide(lsl->vis_off); + } + else { + gtk_widget_show(lsl->vis_off); + gtk_widget_hide(lsl->vis_on); + } +} + static void group_vis_sync(layersel_grp_t *lsg) { if (lsg->on) { + int n; pcb_gtk_widget_hide_all(lsg->grp_closed); gtk_widget_set_no_show_all(lsg->grp_open, 0); gtk_widget_show_all(lsg->grp_open); gtk_widget_set_no_show_all(lsg->grp_open, 1); + for(n = 0; n < 4; n++) + layer_vis_sync(&lsg->layer[n]); } else { gtk_widget_set_no_show_all(lsg->grp_closed, 0); @@ -80,11 +96,14 @@ } } + /*** Event handling ***/ static gboolean layer_vis_press_cb(GtkWidget *widget, GdkEvent *event, gpointer user_data) { layersel_layer_t *lsl = user_data; + lsl->on = !lsl->on; + layer_vis_sync(lsl); printf("clicked on layer %p/%d\n", lsl->lsg, lsl - lsl->lsg->layer); return TRUE; } @@ -179,6 +198,7 @@ spring = gtkc_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(lsg->layer[n].box), spring, TRUE, TRUE, 0); + layer_vis_sync(&lsg->layer[n]); } /* Make sure gtk_show_all() won't mess with our hardwired hide/show */ Index: work/gtk/layersel/layersel.h =================================================================== --- work/gtk/layersel/layersel.h (revision 8521) +++ work/gtk/layersel/layersel.h (revision 8522) @@ -10,6 +10,8 @@ struct layersel_layer_s { GtkWidget *box, *vis_on, *vis_off; + unsigned on:1; /* TODO: temporary hack: should be extracted from the layer struct */ + /* for callbacks */ layersel_grp_t *lsg; /* points to parent */ };