Index: layersel/layersel.c =================================================================== --- layersel/layersel.c (revision 8544) +++ layersel/layersel.c (revision 8545) @@ -101,6 +101,16 @@ gtk_widget_show_all(lsg->grp_closed); gtk_widget_set_no_show_all(lsg->grp_closed, 1); pcb_gtk_widget_hide_all(lsg->grp_open); + if (lsg->vis_on != NULL) { + if (lsg->on) { + gtk_widget_show(lsg->vis_on); + gtk_widget_hide(lsg->vis_off); + } + else { + gtk_widget_show(lsg->vis_off); + gtk_widget_hide(lsg->vis_on); + } + } } } @@ -111,7 +121,8 @@ { switch(event->button.button) { case 1: - printf("TODO: group vis change\n"); + lsg->on = !lsg->on; + group_vis_sync(lsg); break; case 3: pcb_hid_actionl("Popup", "group", NULL); @@ -189,6 +200,16 @@ /*** Row builder ***/ +static GtkWidget *build_visbox(const char *color, GtkWidget **on, GtkWidget **off) +{ + GtkWidget *vis_box = gtkc_hbox_new(0, 0); + *on = layer_vis_box(1, color); + gtk_box_pack_start(GTK_BOX(vis_box), *on, FALSE, FALSE, 0); + *off = layer_vis_box(0, color); + gtk_box_pack_start(GTK_BOX(vis_box), *off, FALSE, FALSE, 0); + return vis_box; +} + static GtkWidget *build_layer(layersel_grp_t *lsg, layersel_layer_t *lsl, const char *name) { GtkWidget *vis_box, *vis_ebox, *ly_name_bx, *lab; @@ -197,11 +218,7 @@ lsl->box = gtkc_hbox_new(0, 0); /* sensitive layer visibility widgets */ - vis_box = gtkc_hbox_new(0, 0); - lsl->vis_on = layer_vis_box(1, "#ff0000"); - gtk_box_pack_start(GTK_BOX(vis_box), lsl->vis_on, FALSE, FALSE, 0); - lsl->vis_off = layer_vis_box(0, "#ff0000"); - gtk_box_pack_start(GTK_BOX(vis_box), lsl->vis_off, FALSE, FALSE, 0); + vis_box = build_visbox("#ff0000", &lsl->vis_on, &lsl->vis_off); vis_ebox = wrap_bind_click(vis_box, G_CALLBACK(layer_vis_press_cb), lsl); gtk_box_pack_start(GTK_BOX(lsl->box), vis_ebox, FALSE, FALSE, 0); @@ -257,7 +274,7 @@ if (has_group_vis) { GtkWidget *vis; - vis = wrap_bind_click(layer_vis_box(0, "#ff0000"), G_CALLBACK(group_vis_press_cb), lsg); + vis = wrap_bind_click(build_visbox("#ff0000", &lsg->vis_on, &lsg->vis_off), G_CALLBACK(group_vis_press_cb), lsg); gtk_box_pack_start(GTK_BOX(lsg->grp_closed), vis, FALSE, FALSE, 0); } cld = wrap_bind_click(gtk_label_new(gname), G_CALLBACK(group_open_press_cb), lsg); Index: layersel/layersel.h =================================================================== --- layersel/layersel.h (revision 8544) +++ layersel/layersel.h (revision 8545) @@ -17,7 +17,7 @@ }; struct layersel_grp_s { - GtkWidget *grp_row, *grp_closed, *grp_open, *layers; + GtkWidget *grp_row, *grp_closed, *grp_open, *layers, *vis_on, *vis_off; layersel_layer_t layer[4];