Index: trunk/src_plugins/import_sch2/import_sch.c =================================================================== --- trunk/src_plugins/import_sch2/import_sch.c (revision 29557) +++ trunk/src_plugins/import_sch2/import_sch.c (revision 29558) @@ -31,6 +31,7 @@ #include #include #include +#include #include #include "plug_import.h" @@ -41,6 +42,7 @@ static conf_import_sch_t conf_import_sch; static int do_import(void); +static const char *import_sch_cookie = "import_sch2 plugin"; #include "import_sch_dlg.c" @@ -142,7 +144,6 @@ return 0; } -static const char *import_sch_cookie = "import_sch2 plugin"; static pcb_action_t import_sch_action_list[] = { {"ImportSch", pcb_act_ImportSch, pcb_acth_ImportSch, pcb_acts_ImportSch} @@ -154,6 +155,7 @@ { pcb_remove_actions_by_cookie(import_sch_cookie); pcb_conf_unreg_fields("plugins/import_sch/"); + isch_dlg_uninit(); } int pplg_init_import_sch2(void) @@ -165,6 +167,7 @@ #define conf_reg(field,isarray,type_name,cpath,cname,desc,flags) \ pcb_conf_reg_field(conf_import_sch, field,isarray,type_name,cpath,cname,desc,flags); #include "import_sch_conf_fields.h" + isch_dlg_init(); return 0; } Index: trunk/src_plugins/import_sch2/import_sch_dlg.c =================================================================== --- trunk/src_plugins/import_sch2/import_sch_dlg.c (revision 29557) +++ trunk/src_plugins/import_sch2/import_sch_dlg.c (revision 29558) @@ -38,6 +38,7 @@ } isch_ctx_t; static isch_ctx_t isch_ctx; +static int isch_conf_lock = 0; static void isch_arg2pcb(void) { @@ -44,6 +45,7 @@ int n; pcb_conf_listitem_t *ci; + isch_conf_lock++; restart:; for(n = 0, ci = pcb_conflist_first(&conf_import_sch.plugins.import_sch.args); ci != NULL; ci = pcb_conflist_next(ci), n++) { const char *newval = isch_ctx.dlg[isch_ctx.warg[n]].val.str; @@ -54,6 +56,7 @@ goto restart; /* elements may be deleted and added with different pointers... */ } } + isch_conf_lock--; isch_ctx.arg_dirty = 0; } @@ -100,6 +103,7 @@ const pcb_plug_import_t *p = pcb_lookup_importer(isch_ctx.inames[target]); int len, n, controllable; + isch_conf_lock++; PCB_DAD_SET_VALUE(isch_ctx.dlg_hid_ctx, isch_ctx.wtab, lng, target); if (setconf && (p != NULL)) pcb_conf_set(CFR_DESIGN, "plugins/import_sch/import_fmt", 0, p->name, POL_OVERWRITE); @@ -129,6 +133,7 @@ } pcb_gui->attr_dlg_widget_hide(isch_ctx.dlg_hid_ctx, isch_ctx.warg_ctrl, !controllable); + isch_conf_lock--; } @@ -175,9 +180,11 @@ { int len = pcb_conflist_length(&conf_import_sch.plugins.import_sch.args); if (len < MAX_ARGS+1) { + isch_conf_lock++; pcb_conf_grow("plugins/import_sch/args", len+1); pcb_conf_set(CFR_DESIGN, "plugins/import_sch/args", len, "", POL_OVERWRITE); isch_pcb2dlg(); + isch_conf_lock--; } } @@ -202,9 +209,12 @@ name = pcb_gui->fileselect(pcb_gui, "Import schematics", "Import netlist and footprints from schematics", cwd, NULL, NULL, "schematics", PCB_HID_FSD_MAY_NOT_EXIST, NULL); if (name == NULL) return; + + isch_conf_lock++; pcb_conf_set(CFR_DESIGN, "plugins/import_sch/args", idx, name, POL_OVERWRITE); isch_pcb2dlg(); free(name); + isch_conf_lock--; } @@ -320,3 +330,28 @@ isch_pcb2dlg(); return 0; } + +static isch_cfg_chg(conf_native_t *cfg, int arr_idx) +{ + if ((isch_conf_lock == 0) && isch_ctx.active) + isch_pcb2dlg(); +} + +static conf_hid_id_t cfgid; + +static void isch_dlg_uninit(void) +{ + pcb_conf_hid_unreg(import_sch_cookie); +} + +static void isch_dlg_init(void) +{ + static conf_hid_callbacks_t cbs; + cfgid = pcb_conf_hid_reg(import_sch_cookie, NULL); + + cbs.val_change_post = isch_cfg_chg; + + pcb_conf_hid_set_cb(pcb_conf_get_field("plugins/import_sch/args"), cfgid, &cbs); + pcb_conf_hid_set_cb(pcb_conf_get_field("plugins/import_sch/import_fmt"), cfgid, &cbs); + pcb_conf_hid_set_cb(pcb_conf_get_field("plugins/import_sch/verbose"), cfgid, &cbs); +}