Index: work/gtk/layersel/layersel.c =================================================================== --- work/gtk/layersel/layersel.c (revision 8528) +++ work/gtk/layersel/layersel.c (revision 8529) @@ -177,10 +177,9 @@ return lsl->box; } -static GtkWidget *build_grp(pcb_gtk_layersel_t *ls, layersel_grp_t *lsg, const char *gname) +static GtkWidget *build_group_start(pcb_gtk_layersel_t *ls, layersel_grp_t *lsg, const char *gname) { - GtkWidget *gn_vert, *grp_layers, *vlabel, *opn, *cld; - int n; + GtkWidget *gn_vert, *vlabel, *opn, *cld; /* Layout: +--------------------------+<- grp_row @@ -202,12 +201,11 @@ gtk_box_pack_start(GTK_BOX(lsg->grp_row), lsg->grp_open, FALSE, FALSE, 5); gn_vert = gtkc_vbox_new(0, 0); - grp_layers = gtkc_vbox_new(0, 0); + lsg->layers = gtkc_vbox_new(0, 0); opn = wrap_bind_click(gn_vert, G_CALLBACK(group_close_press_cb), lsg); gtk_box_pack_start(GTK_BOX(lsg->grp_open), opn, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(lsg->grp_open), grp_layers, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(lsg->grp_open), lsg->layers, FALSE, FALSE, 0); - /* install group name */ vlabel = gtk_label_new(gname); gtk_label_set_angle(GTK_LABEL(vlabel), 90); @@ -218,6 +216,22 @@ cld = wrap_bind_click(gtk_label_new(gname), G_CALLBACK(group_open_press_cb), lsg); gtk_box_pack_start(GTK_BOX(lsg->grp_closed), cld, FALSE, FALSE, 0); + return lsg->grp_row; +} + +static void build_group_finish(layersel_grp_t *lsg) +{ + /* Make sure gtk_show_all() won't mess with our hardwired hide/show */ + group_vis_sync(lsg); + gtk_widget_set_no_show_all(lsg->grp_closed, 1); + gtk_widget_set_no_show_all(lsg->grp_open, 1); +} + +static GtkWidget *build_group_real(pcb_gtk_layersel_t *ls, layersel_grp_t *lsg, const char *gname) +{ + int n; + GtkWidget *wg = build_group_start(ls, lsg, gname); + /* install layers */ for(n = 0; n < 4; n++) { char tmp[32]; @@ -224,18 +238,15 @@ 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); - + gtk_box_pack_start(GTK_BOX(lsg->layers), ly, FALSE, FALSE, 1); } - /* Make sure gtk_show_all() won't mess with our hardwired hide/show */ - group_vis_sync(lsg); - gtk_widget_set_no_show_all(lsg->grp_closed, 1); - gtk_widget_set_no_show_all(lsg->grp_open, 1); + build_group_finish(lsg); - return lsg->grp_row; + return wg; } + /*** Layer selector widget building function ***/ GtkWidget *pcb_gtk_layersel_build(pcb_gtk_layersel_t *ls) { @@ -242,9 +253,9 @@ GtkWidget *main_box, *spring; main_box = gtkc_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(main_box), build_grp(ls, &ls->grp[0], "group0"), FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(main_box), build_grp(ls, &ls->grp[1], "group1"), FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(main_box), build_grp(ls, &ls->grp[2], "group2longnamed"), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(main_box), build_group_real(ls, &ls->grp[0], "group0"), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(main_box), build_group_real(ls, &ls->grp[1], "group1"), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(main_box), build_group_real(ls, &ls->grp[2], "group2longnamed"), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(main_box), gtk_hseparator_new(), FALSE, FALSE, 0); Index: work/gtk/layersel/layersel.h =================================================================== --- work/gtk/layersel/layersel.h (revision 8528) +++ work/gtk/layersel/layersel.h (revision 8529) @@ -17,7 +17,7 @@ }; struct layersel_grp_s { - GtkWidget *grp_row, *grp_closed, *grp_open; + GtkWidget *grp_row, *grp_closed, *grp_open, *layers; layersel_layer_t layer[4];