Index: trunk/src_plugins/lib_hid_pcbui/layer_menu.c =================================================================== --- trunk/src_plugins/lib_hid_pcbui/layer_menu.c (revision 29892) +++ trunk/src_plugins/lib_hid_pcbui/layer_menu.c (revision 29893) @@ -208,6 +208,15 @@ } +static void layer_install_menu_keys(void) +{ + ly_ctx_t ctx; + + ctx.view = 0; + ctx.anch = "@layerkeys"; + pcb_hid_cfg_map_anchor_menus(ctx.anch, layer_install_menu_key, &ctx); +} + static void layer_install_menu(void) { ly_ctx_t ctx; @@ -220,9 +229,7 @@ ctx.anch = "@layerpick"; pcb_hid_cfg_map_anchor_menus(ctx.anch, layer_install_menu1, &ctx); - - ctx.anch = "@layerkeys"; - pcb_hid_cfg_map_anchor_menus(ctx.anch, layer_install_menu_key, &ctx); + layer_install_menu_keys(); } void pcb_layer_menu_update_ev(pcb_hidlib_t *hidlib, void *user_data, int argc, pcb_event_arg_t argv[]) @@ -238,3 +245,30 @@ pcb_gui->update_menu_checkbox(pcb_gui, NULL); } + +static int layer_menu_key_timer_active = 0; +static pcb_hidval_t layer_menu_key_timer; + +static void timed_layer_menu_key_update_cb(pcb_hidval_t user_data) +{ +/* pcb_trace("************ layer key update timer!\n");*/ + layer_install_menu_keys(); + layer_menu_key_timer_active = 0; +} + + +void pcb_layer_menu_key_update_ev(pcb_hidlib_t *hidlib, void *user_data, int argc, pcb_event_arg_t argv[]) +{ + pcb_hidval_t timerdata; + +/* pcb_trace("************ layer key update ev!\n");*/ + + if (layer_menu_key_timer_active) { + pcb_gui->stop_timer(pcb_gui, layer_menu_key_timer); + layer_menu_key_timer_active = 0; + } + + timerdata.ptr = NULL; + layer_menu_key_timer = pcb_gui->add_timer(pcb_gui, timed_layer_menu_key_update_cb, 500, timerdata); + layer_menu_key_timer_active = 1; +} Index: trunk/src_plugins/lib_hid_pcbui/layer_menu.h =================================================================== --- trunk/src_plugins/lib_hid_pcbui/layer_menu.h (revision 29892) +++ trunk/src_plugins/lib_hid_pcbui/layer_menu.h (revision 29893) @@ -2,4 +2,6 @@ void pcb_layer_menu_update_ev(pcb_hidlib_t *hidlib, void *user_data, int argc, pcb_event_arg_t argv[]); void pcb_layer_menu_vis_update_ev(pcb_hidlib_t *hidlib, void *user_data, int argc, pcb_event_arg_t argv[]); +void pcb_layer_menu_key_update_ev(pcb_hidlib_t *hidlib, void *user_data, int argc, pcb_event_arg_t argv[]); + Index: trunk/src_plugins/lib_hid_pcbui/lib_hid_pcbui.c =================================================================== --- trunk/src_plugins/lib_hid_pcbui/lib_hid_pcbui.c (revision 29892) +++ trunk/src_plugins/lib_hid_pcbui/lib_hid_pcbui.c (revision 29893) @@ -138,6 +138,7 @@ pcb_event_bind(PCB_EVENT_LAYERS_CHANGED, pcb_layersel_stack_chg_ev, NULL, layersel_cookie); pcb_event_bind(PCB_EVENT_LAYERVIS_CHANGED, pcb_layer_menu_vis_update_ev, NULL, layer_cookie); pcb_event_bind(PCB_EVENT_LAYERVIS_CHANGED, pcb_layersel_vis_chg_ev, NULL, layersel_cookie); + pcb_event_bind(PCB_EVENT_LAYER_KEY_CHANGE, pcb_layer_menu_key_update_ev, NULL, layer_cookie); pcb_event_bind(PCB_EVENT_ROUTE_STYLES_CHANGED, pcb_rst_update_ev, NULL, rst_cookie); pcb_event_bind(PCB_EVENT_BOARD_CHANGED, pcb_rst_update_ev, NULL, rst_cookie); pcb_event_bind(PCB_EVENT_GUI_INIT, pcb_layersel_gui_init_ev, NULL, layersel_cookie);