Index: trunk/src/plug_io.h =================================================================== --- trunk/src/plug_io.h (revision 25684) +++ trunk/src/plug_io.h (revision 25685) @@ -98,9 +98,10 @@ subdialog; init() returns an plugin-allocated context that is then passed to uninit at the end. Note: save_as_subd_init() shall be unique; if multiple pcb_plug_io_t structs share the same init(), - only one, shared format-setting-tab is created for them */ + only one, shared format-setting-tab is created for them. If apply is + true, the dialog box was closed with okay on this format selected. */ void *(*save_as_subd_init)(const pcb_plug_io_t *ctx, pcb_hid_dad_subdialog_t *sub, pcb_plug_iot_t type); - void (*save_as_subd_uninit)(const pcb_plug_io_t *ctx, void *plg_ctx, pcb_hid_dad_subdialog_t *sub); + void (*save_as_subd_uninit)(const pcb_plug_io_t *ctx, void *plg_ctx, pcb_hid_dad_subdialog_t *sub, pcb_bool apply); void (*save_as_fmt_changed)(const pcb_plug_io_t *ctx, void *plg_ctx, pcb_hid_dad_subdialog_t *sub); const char *default_fmt; Index: trunk/src_plugins/dialogs/dlg_loadsave.c =================================================================== --- trunk/src_plugins/dialogs/dlg_loadsave.c (revision 25684) +++ trunk/src_plugins/dialogs/dlg_loadsave.c (revision 25685) @@ -260,11 +260,8 @@ if ((seen[n] == 0) && (save->opt_tab[i] == n)) { const pcb_plug_io_t *plug = save->avail->plug[i]; seen[n] = 1; - if (plug->save_as_subd_uninit != NULL) { - int apply = (ok && (n == tab_selection)); - TODO("must pass on apply"); - plug->save_as_subd_uninit(plug, save->fmt_plug_data[n], sub); - } + if (plug->save_as_subd_uninit != NULL) + plug->save_as_subd_uninit(plug, save->fmt_plug_data[n], sub, (ok && (n == tab_selection))); } } } Index: trunk/src_plugins/io_lihata/write.c =================================================================== --- trunk/src_plugins/io_lihata/write.c (revision 25684) +++ trunk/src_plugins/io_lihata/write.c (revision 25685) @@ -1752,18 +1752,21 @@ return save; } -void io_lihata_save_as_subd_uninit(const pcb_plug_io_t *ctx, void *plg_ctx, pcb_hid_dad_subdialog_t *sub) +void io_lihata_save_as_subd_uninit(const pcb_plug_io_t *ctx, void *plg_ctx, pcb_hid_dad_subdialog_t *sub, pcb_bool apply) { io_lihata_save_t *save = plg_ctx; - int omit_font = !!sub->dlg[save->womit_font].default_val.int_value; - int omit_config = !!sub->dlg[save->womit_config].default_val.int_value; - if (omit_font != !!conf_io_lihata.plugins.io_lihata.omit_font) - conf_setf(CFR_CLI, "plugins/io_lihata/omit_font", 0, "%d", omit_font); + if (apply) { + int omit_font = !!sub->dlg[save->womit_font].default_val.int_value; + int omit_config = !!sub->dlg[save->womit_config].default_val.int_value; - if (omit_config != !!conf_io_lihata.plugins.io_lihata.omit_config) - conf_setf(CFR_CLI, "plugins/io_lihata/omit_config", 0, "%d", omit_config); + if (omit_font != !!conf_io_lihata.plugins.io_lihata.omit_font) + conf_setf(CFR_CLI, "plugins/io_lihata/omit_font", 0, "%d", omit_font); + if (omit_config != !!conf_io_lihata.plugins.io_lihata.omit_config) + conf_setf(CFR_CLI, "plugins/io_lihata/omit_config", 0, "%d", omit_config); + } + free(save); } Index: trunk/src_plugins/io_lihata/write.h =================================================================== --- trunk/src_plugins/io_lihata/write.h (revision 25684) +++ trunk/src_plugins/io_lihata/write.h (revision 25685) @@ -37,5 +37,5 @@ int io_lihata_write_element(pcb_plug_io_t *ctx, FILE *f, pcb_data_t *dt); void *io_lihata_save_as_subd_init(const pcb_plug_io_t *ctx, pcb_hid_dad_subdialog_t *sub, pcb_plug_iot_t type); -void io_lihata_save_as_subd_uninit(const pcb_plug_io_t *ctx, void *plg_ctx, pcb_hid_dad_subdialog_t *sub); +void io_lihata_save_as_subd_uninit(const pcb_plug_io_t *ctx, void *plg_ctx, pcb_hid_dad_subdialog_t *sub, pcb_bool apply); void io_lihata_save_as_fmt_changed(const pcb_plug_io_t *ctx, void *plg_ctx, pcb_hid_dad_subdialog_t *sub);