Index: work/gtk/layersel/layersel.c =================================================================== --- work/gtk/layersel/layersel.c (revision 8527) +++ work/gtk/layersel/layersel.c (revision 8528) @@ -152,11 +152,35 @@ /*** Row builder ***/ +static GtkWidget *build_layer(layersel_grp_t *lsg, layersel_layer_t *lsl, const char *name) +{ + GtkWidget *vis_box, *vis_ebox, *spring; + + lsl->lsg = lsg; + 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_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); + + gtk_box_pack_start(GTK_BOX(lsl->box), gtk_label_new(name), FALSE, FALSE, 10); + + spring = gtkc_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(lsl->box), spring, TRUE, TRUE, 0); + layer_vis_sync(lsl); + + return lsl->box; +} + static GtkWidget *build_grp(pcb_gtk_layersel_t *ls, layersel_grp_t *lsg, const char *gname) { - GtkWidget *gn_vert, *grp_layers, *vlabel, *spring, *vis_box, *vis_ebox, *opn, *cld; + GtkWidget *gn_vert, *grp_layers, *vlabel, *opn, *cld; int n; - char tmp[32]; /* Layout: +--------------------------+<- grp_row @@ -196,26 +220,12 @@ /* install layers */ for(n = 0; n < 4; n++) { - lsg->layer[n].lsg = lsg; - lsg->layer[n].box = gtkc_hbox_new(0, 0); - gtk_box_pack_start(GTK_BOX(grp_layers), lsg->layer[n].box, FALSE, FALSE, 1); - + char tmp[32]; + GtkWidget *ly; sprintf(tmp, "layer %d", n); + ly = build_layer(lsg, &lsg->layer[n], tmp); + gtk_box_pack_start(GTK_BOX(grp_layers), ly, FALSE, FALSE, 1); - /* sensitive layer visibility widgets */ - vis_box = gtkc_hbox_new(0, 0); - lsg->layer[n].vis_on = layer_vis_box(1, "#ff0000"); - gtk_box_pack_start(GTK_BOX(vis_box), lsg->layer[n].vis_on, FALSE, FALSE, 0); - lsg->layer[n].vis_off = layer_vis_box(0, "#ff0000"); - gtk_box_pack_start(GTK_BOX(vis_box), lsg->layer[n].vis_off, FALSE, FALSE, 0); - vis_ebox = wrap_bind_click(vis_box, G_CALLBACK(layer_vis_press_cb), &lsg->layer[n]); - gtk_box_pack_start(GTK_BOX(lsg->layer[n].box), vis_ebox, FALSE, FALSE, 0); - - gtk_box_pack_start(GTK_BOX(lsg->layer[n].box), gtk_label_new(tmp), FALSE, FALSE, 10); - - 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 */