Index: trunk/src/crosshair.c =================================================================== --- trunk/src/crosshair.c (revision 29335) +++ trunk/src/crosshair.c (revision 29336) @@ -43,6 +43,7 @@ #include #include #include +#include #include "vtonpoint.h" #include "find.h" #include "undo.h" @@ -1047,6 +1048,25 @@ } } +static void crosshair_chg_mode(conf_native_t *cfg, int arr_idx) +{ + pcb_tool_chg_mode(&PCB->hidlib); +} + +static void pcb_crosshair_mode_init(void) +{ + static conf_hid_callbacks_t cbs_mode; + static conf_hid_id_t tool_conf_id; + conf_native_t *n_mode = pcb_conf_get_field("editor/mode"); + tool_conf_id = pcb_conf_hid_reg(crosshair_cookie, NULL); + + if (n_mode != NULL) { + memset(&cbs_mode, 0, sizeof(conf_hid_callbacks_t)); + cbs_mode.val_change_post = crosshair_chg_mode; + pcb_conf_hid_set_cb(n_mode, tool_conf_id, &cbs_mode); + } +} + /* allocate GC only when the GUI is already up and running */ static void pcb_crosshair_gui_init(pcb_hidlib_t *hidlib, void *user_data, int argc, pcb_event_arg_t argv[]) { @@ -1079,6 +1099,7 @@ pcb_event_bind(PCB_EVENT_GUI_INIT, pcb_crosshair_gui_init, NULL, crosshair_cookie); pcb_event_bind(PCB_EVENT_TOOL_SELECT_PRE, pcb_crosshair_tool_logics, NULL, crosshair_cookie); + pcb_crosshair_mode_init(); } @@ -1089,6 +1110,7 @@ if (pcb_render != NULL) pcb_hid_destroy_gc(pcb_crosshair.GC); pcb_event_unbind_allcookie(crosshair_cookie); + pcb_conf_hid_unreg(crosshair_cookie); } void pcb_crosshair_set_local_ref(pcb_coord_t X, pcb_coord_t Y, pcb_bool Showing) Index: trunk/src/main.c =================================================================== --- trunk/src/main.c (revision 29335) +++ trunk/src/main.c (revision 29336) @@ -285,7 +285,6 @@ gui_support_plugins(0); pcb_render = pcb_gui = NULL; - pcb_tool_uninit_conf(); pcb_crosshair_uninit(); pcb_hidlib_uninit(); /* plugin unload */ Index: trunk/src/tool.c =================================================================== --- trunk/src/tool.c (revision 29335) +++ trunk/src/tool.c (revision 29336) @@ -35,7 +35,6 @@ #include #include -#include "board.h" #include "conf_core.h" #include "crosshair.h" @@ -50,30 +49,11 @@ static void init_current_tool(void); static void uninit_current_tool(void); -static conf_hid_id_t tool_conf_id; -static const char *pcb_tool_cookie = "default tools"; static int tool_select_lock = 0; -void tool_chg_mode(conf_native_t *cfg, int arr_idx) -{ - if ((PCB != NULL) && (!tool_select_lock)) - pcb_tool_select_by_id(&PCB->hidlib, pcbhl_conf.editor.mode); -} - void pcb_tool_init(void) { - static conf_hid_callbacks_t cbs_mode; - conf_native_t *n_mode = pcb_conf_get_field("editor/mode"); - vtp0_init(&pcb_tools); - - tool_conf_id = pcb_conf_hid_reg(pcb_tool_cookie, NULL); - - if (n_mode != NULL) { - memset(&cbs_mode, 0, sizeof(conf_hid_callbacks_t)); - cbs_mode.val_change_post = tool_chg_mode; - pcb_conf_hid_set_cb(n_mode, tool_conf_id, &cbs_mode); - } } void pcb_tool_uninit(void) @@ -86,12 +66,12 @@ vtp0_uninit(&pcb_tools); } -void pcb_tool_uninit_conf(void) +void pcb_tool_chg_mode(pcb_hidlib_t *hl) { - pcb_conf_hid_unreg(pcb_tool_cookie); + if ((hl != NULL) && (!tool_select_lock)) + pcb_tool_select_by_id(hl, pcbhl_conf.editor.mode); } - pcb_toolid_t pcb_tool_reg(pcb_tool_t *tool, const char *cookie) { pcb_toolid_t id; @@ -286,6 +266,10 @@ /**** tool helper functions ****/ +#include "board.h" +#include "data.h" +#include "draw.h" + pcb_bool pcb_tool_is_saved = pcb_false; static void get_grid_lock_coordinates(int type, void *ptr1, void *ptr2, void *ptr3, pcb_coord_t * x, pcb_coord_t * y) @@ -368,8 +352,6 @@ } /*** old helpers ***/ -#include "data.h" -#include "draw.h" void pcb_release_mode(pcb_hidlib_t *hidlib) { Index: trunk/src/tool.h =================================================================== --- trunk/src/tool.h (revision 29335) +++ trunk/src/tool.h (revision 29336) @@ -76,8 +76,10 @@ /* (un)initialize the tool subsystem */ void pcb_tool_init(void); void pcb_tool_uninit(void); -void pcb_tool_uninit_conf(void); /* call this one before hidlib uninit for conf uninit */ +/* call this when the mode (tool) config node changes */ +void pcb_tool_chg_mode(pcb_hidlib_t *hl); + /* Insert a new tool in pcb_tools; returns -1 on failure */ pcb_toolid_t pcb_tool_reg(pcb_tool_t *tool, const char *cookie);