Index: work/gtk/layersel/layersel.c =================================================================== --- work/gtk/layersel/layersel.c (revision 8516) +++ work/gtk/layersel/layersel.c (revision 8517) @@ -65,9 +65,10 @@ /*** Event handling ***/ -static gboolean group_button_press_cb(GtkWidget * widget, GdkEvent * event, gpointer user_data) +static gboolean layer_vis_press_cb(GtkWidget *widget, GdkEvent *event, gpointer user_data) { - printf("clicked\n"); + layersel_layer_t *lsl = user_data; + printf("clicked on layer %p/%d\n", lsl->lsg, lsl - lsl->lsg->layer); return TRUE; } @@ -123,6 +124,7 @@ /* 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, 0); @@ -134,7 +136,7 @@ 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(group_button_press_cb), NULL); + 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); @@ -149,6 +151,7 @@ gtk_widget_set_no_show_all(lsg->grp_closed, 1); gtk_widget_set_no_show_all(lsg->grp_open, 1); + lsg->ls = ls; return lsg->grp_row; } Index: work/gtk/layersel/layersel.h =================================================================== --- work/gtk/layersel/layersel.h (revision 8516) +++ work/gtk/layersel/layersel.h (revision 8517) @@ -3,20 +3,30 @@ #include -typedef struct layersel_layer_s { +typedef struct pcb_gtk_layersel_s pcb_gtk_layersel_t; +typedef struct layersel_grp_s layersel_grp_t; +typedef struct layersel_layer_s layersel_layer_t; + +struct layersel_layer_s { GtkWidget *box, *vis_on, *vis_off; -} layersel_layer_t; -typedef struct layersel_grp_s { + /* for callbacks */ + layersel_grp_t *lsg; /* points to parent */ +}; + +struct layersel_grp_s { GtkWidget *grp_row, *grp_closed, *grp_open; layersel_layer_t layer[4]; -} layersel_grp_t; + /* for callbacks */ + pcb_gtk_layersel_t *ls; /* points to parent */ +}; -typedef struct pcb_gtk_layersel_s { + +struct pcb_gtk_layersel_s { layersel_grp_t grp[3]; -} pcb_gtk_layersel_t; +}; GtkWidget *pcb_gtk_layersel_build(pcb_gtk_layersel_t *ls); Index: work/gtk/layersel/layersel_demo.c =================================================================== --- work/gtk/layersel/layersel_demo.c (revision 8516) +++ work/gtk/layersel/layersel_demo.c (revision 8517) @@ -1,6 +1,7 @@ #include #include "layersel.h" +#include "lib_gtk_common/compat.h" int main(int argc, char **argv) { @@ -19,9 +20,14 @@ layer_selector = pcb_gtk_layersel_build(&ls); gtk_container_add(GTK_CONTAINER(mainwin), layer_selector); + gtk_widget_hide_all(ls.grp[0].grp_closed); + gtk_widget_hide_all(ls.grp[1].grp_open); + gtk_widget_hide(ls.grp[2].layer[1].vis_on); + /* Show the application window */ gtk_widget_show_all(mainwin); + /* Enter the main event loop, and wait for user interaction */ gtk_main();