Index: trunk/src/librnd/hid/hid.h =================================================================== --- trunk/src/librnd/hid/hid.h (revision 34624) +++ trunk/src/librnd/hid/hid.h (revision 34625) @@ -237,11 +237,14 @@ and persistent. */ const rnd_export_opt_t *(*get_export_options)(rnd_hid_t *hid, int *n_ret); - /* Exports (or print) the current design. The options given represent - the choices made from the options returned from + /* Exports (or print) the current design (also passed as an argument so that + pure export plugins don't have to implement set_design). The options given + represent the choices made from the options returned from get_export_options. Call with options_ == NULL to start the - primary GUI (create a main window, print, export, etc) */ - void (*do_export)(rnd_hid_t *hid, rnd_hid_attr_val_t *options); + primary GUI (create a main window, print, export, etc). + Appspec is application specific custom config (used by app-specific + exporters only) */ + void (*do_export)(rnd_hid_t *hid, rnd_design_t *design, rnd_hid_attr_val_t *options, void *appspec); /* Export plugins: if not NULL, rnd_hid_parse_command_line() sets up opt value backing memory from this array */ Index: trunk/src/librnd/hid/hid_init.c =================================================================== --- trunk/src/librnd/hid/hid_init.c (revision 34624) +++ trunk/src/librnd/hid/hid_init.c (revision 34625) @@ -1052,7 +1052,7 @@ return 0; } -int rnd_main_exported(rnd_main_args_t *ga, rnd_design_t *hidlib, rnd_bool is_empty) +int rnd_main_exported(rnd_main_args_t *ga, rnd_design_t *design, rnd_bool is_empty, void *appspec) { if (!rnd_main_exporting) return 0; @@ -1060,22 +1060,22 @@ if (is_empty) rnd_message(RND_MSG_WARNING, "Exporting empty design (nothing loaded or drawn).\n"); if (rnd_gui->set_design != NULL) - rnd_gui->set_design(rnd_gui, hidlib); - rnd_event(hidlib, RND_EVENT_EXPORT_SESSION_BEGIN, NULL); - rnd_gui->do_export(rnd_gui, 0); - rnd_event(hidlib, RND_EVENT_EXPORT_SESSION_END, NULL); + rnd_gui->set_design(rnd_gui, design); + rnd_event(design, RND_EVENT_EXPORT_SESSION_BEGIN, NULL); + rnd_gui->do_export(rnd_gui, design, 0, appspec); + rnd_event(design, RND_EVENT_EXPORT_SESSION_END, NULL); rnd_log_print_uninit_errs("Exporting"); return 1; } -void rnd_mainloop_interactive(rnd_main_args_t *ga, rnd_design_t *hidlib) +void rnd_mainloop_interactive(rnd_main_args_t *ga, rnd_design_t *design) { rnd_hid_in_main_loop = 1; - rnd_event(hidlib, RND_EVENT_MAINLOOP_CHANGE, "i", rnd_hid_in_main_loop); + rnd_event(design, RND_EVENT_MAINLOOP_CHANGE, "i", rnd_hid_in_main_loop); if (rnd_gui->set_design != NULL) - rnd_gui->set_design(rnd_gui, hidlib); - rnd_gui->do_export(rnd_gui, 0); + rnd_gui->set_design(rnd_gui, design); + rnd_gui->do_export(rnd_gui, design, 0, NULL); rnd_hid_in_main_loop = 0; - rnd_event(hidlib, RND_EVENT_MAINLOOP_CHANGE, "i", rnd_hid_in_main_loop); + rnd_event(design, RND_EVENT_MAINLOOP_CHANGE, "i", rnd_hid_in_main_loop); } Index: trunk/src/librnd/hid/hid_init.h =================================================================== --- trunk/src/librnd/hid/hid_init.h (revision 34624) +++ trunk/src/librnd/hid/hid_init.h (revision 34625) @@ -157,8 +157,9 @@ int rnd_main_args_setup2(rnd_main_args_t *ga, int *exitval); /* if -x was specified, do the export and return 1 (the caller should - exit); else return 0 */ -int rnd_main_exported(rnd_main_args_t *ga, rnd_design_t *design, rnd_bool is_empty); + exit); else return 0. Appspec is application specific custom config + passed on to the exporter's ->do_export as-is. */ +int rnd_main_exported(rnd_main_args_t *ga, rnd_design_t *design, rnd_bool is_empty, void *appspec); /* launches the GUI or CLI; after it returns, if rnd_gui is not NULL, the user has selected another GUI to switch to. */ Index: trunk/src/librnd/hid/hid_nogui.c =================================================================== --- trunk/src/librnd/hid/hid_nogui.c (revision 34624) +++ trunk/src/librnd/hid/hid_nogui.c (revision 34625) @@ -61,7 +61,7 @@ return NULL; } -static void nogui_do_export(rnd_hid_t *hid, rnd_hid_attr_val_t *options) +static void nogui_do_export(rnd_hid_t *hid, rnd_design_t *design, rnd_hid_attr_val_t *options, void *appspec) { CRASH("do_export"); } Index: trunk/src/librnd/plugins/hid_batch/batch.c =================================================================== --- trunk/src/librnd/plugins/hid_batch/batch.c (revision 34624) +++ trunk/src/librnd/plugins/hid_batch/batch.c (revision 34625) @@ -133,7 +133,7 @@ /* ----------------------------------------------------------------------------- */ static int batch_stay; -static void batch_do_export(rnd_hid_t *hid, rnd_hid_attr_val_t *options) +static void batch_do_export(rnd_hid_t *hid, rnd_design_t *design, rnd_hid_attr_val_t *options, void *appspec) { int interactive; char line[1000]; Index: trunk/src/librnd/plugins/hid_lesstif/main.c =================================================================== --- trunk/src/librnd/plugins/hid_lesstif/main.c (revision 34624) +++ trunk/src/librnd/plugins/hid_lesstif/main.c (revision 34625) @@ -1574,7 +1574,7 @@ ltf_fullscreen_bottom = messages; } -static void lesstif_do_export(rnd_hid_t *hid, rnd_hid_attr_val_t *options) +static void lesstif_do_export(rnd_hid_t *hid, rnd_design_t *design, rnd_hid_attr_val_t *options, void *appspec) { Dimension width, height; Index: trunk/src/librnd/plugins/hid_remote/remote.c =================================================================== --- trunk/src/librnd/plugins/hid_remote/remote.c (revision 34624) +++ trunk/src/librnd/plugins/hid_remote/remote.c (revision 34625) @@ -55,7 +55,7 @@ remote_hidlib = hidlib; } -static void remote_do_export(rnd_hid_t *hid, rnd_hid_attr_val_t *options) +static void remote_do_export(rnd_hid_t *hid, rnd_design_t *design, rnd_hid_attr_val_t *options, void *appspec) { rnd_hid_expose_ctx_t ctx; rnd_design_t *hidlib = remote_hidlib; Index: trunk/src/librnd/plugins/lib_exp_text/lpr_hid.c =================================================================== --- trunk/src/librnd/plugins/lib_exp_text/lpr_hid.c (revision 34624) +++ trunk/src/librnd/plugins/lib_exp_text/lpr_hid.c (revision 34625) @@ -106,7 +106,7 @@ static void (*rnd_lpr_hid_export_to_file)(FILE *, rnd_hid_attr_val_t *, rnd_xform_t *) = NULL; -static void lpr_do_export(rnd_hid_t *hid, rnd_hid_attr_val_t *options) +static void lpr_do_export(rnd_hid_t *hid, rnd_design_t *design, rnd_hid_attr_val_t *options, void *appspec) { FILE *f; const char *filename; Index: trunk/src/librnd/plugins/lib_gtk2_common/glue_hid.c =================================================================== --- trunk/src/librnd/plugins/lib_gtk2_common/glue_hid.c (revision 34624) +++ trunk/src/librnd/plugins/lib_gtk2_common/glue_hid.c (revision 34625) @@ -12,7 +12,7 @@ #include -static void rnd_gtkg_do_export(rnd_hid_t *hid, rnd_hid_attr_val_t *options) +static void rnd_gtkg_do_export(rnd_hid_t *hid, rnd_design_t *design, rnd_hid_attr_val_t *options, void *appspec) { rnd_gtk_t *gctx = hid->hid_data; Index: trunk/src/librnd/plugins/lib_gtk4_common/glue_hid.c =================================================================== --- trunk/src/librnd/plugins/lib_gtk4_common/glue_hid.c (revision 34624) +++ trunk/src/librnd/plugins/lib_gtk4_common/glue_hid.c (revision 34625) @@ -9,7 +9,7 @@ static int rnd_gtkg_gtk4_stay = 1; -static void rnd_gtkg_do_export(rnd_hid_t *hid, rnd_hid_attr_val_t *options) +static void rnd_gtkg_do_export(rnd_hid_t *hid, rnd_design_t *design, rnd_hid_attr_val_t *options, void *appspec) { rnd_gtk_t *gctx = hid->hid_data; Index: trunk/src/librnd/plugins/lib_gtk_common/glue_hid.c =================================================================== --- trunk/src/librnd/plugins/lib_gtk_common/glue_hid.c (revision 34624) +++ trunk/src/librnd/plugins/lib_gtk_common/glue_hid.c (revision 34625) @@ -170,7 +170,7 @@ hid->hid_data = NULL; } -static void rnd_gtkg_do_export(rnd_hid_t *hid, rnd_hid_attr_val_t *options); +static void rnd_gtkg_do_export(rnd_hid_t *hid, rnd_design_t *design, rnd_hid_attr_val_t *options, void *appspec); static void rnd_gtkg_do_exit_(rnd_gtk_t *gctx) { Index: trunk/src/librnd/plugins/lib_hid_common/dlg_export.c =================================================================== --- trunk/src/librnd/plugins/lib_hid_common/dlg_export.c (revision 34624) +++ trunk/src/librnd/plugins/lib_hid_common/dlg_export.c (revision 34625) @@ -36,6 +36,7 @@ typedef struct{ RND_DAD_DECL_NOINIT(dlg) int active; /* already open - allow only one instance */ + void *appspec; int tabs, len; @@ -80,7 +81,7 @@ rnd_render = export_ctx->hid[h]; rnd_event(hl, RND_EVENT_EXPORT_SESSION_BEGIN, NULL); - export_ctx->hid[h]->do_export(export_ctx->hid[h], results); + export_ctx->hid[h]->do_export(export_ctx->hid[h], hl, results, export_ctx->appspec); rnd_event(hl, RND_EVENT_EXPORT_SESSION_END, NULL); rnd_render = render_save; free(results); Index: trunk/src/librnd/plugins/lib_mbtk_common/glue_hid.c =================================================================== --- trunk/src/librnd/plugins/lib_mbtk_common/glue_hid.c (revision 34624) +++ trunk/src/librnd/plugins/lib_mbtk_common/glue_hid.c (revision 34625) @@ -535,7 +535,7 @@ return 0; } -static void rnd_mbtk_do_export(rnd_hid_t *hid, rnd_hid_attr_val_t *options) +static void rnd_mbtk_do_export(rnd_hid_t *hid, rnd_design_t *design, rnd_hid_attr_val_t *options, void *appspec) { rnd_mbtk_t *mctx = hid->hid_data; Index: trunk/src/librnd/plugins/loghid/hid-logger.c =================================================================== --- trunk/src/librnd/plugins/loghid/hid-logger.c (revision 34624) +++ trunk/src/librnd/plugins/loghid/hid-logger.c (revision 34625) @@ -45,11 +45,11 @@ delegatee_->do_exit(delegatee_); } -static void log_do_export(rnd_hid_t *hid, rnd_hid_attr_val_t *opt) +static void log_do_export(rnd_hid_t *hid, rnd_design_t *design, rnd_hid_attr_val_t *options, void *appspec) { SANITY(return); rnd_fprintf(out_, "do_export()\n"); - delegatee_->do_export(delegatee_, opt); + delegatee_->do_export(delegatee_, design, options, appspec); } static int log_parse_arguments(rnd_hid_t *hid, int *argc, char ***argv) Index: trunk/src/test-rnd.c =================================================================== --- trunk/src/test-rnd.c (revision 34624) +++ trunk/src/test-rnd.c (revision 34625) @@ -204,7 +204,7 @@ /* foobar: load the design specified on command line */ - if (rnd_main_exported(&ga, &foobar.hidlib, 0)) { + if (rnd_main_exported(&ga, &foobar.hidlib, 0, NULL)) { foobar_main_uninit(); rnd_main_args_uninit(&ga); exit(0); Index: trunk/tests/librnd/librnd_test.c =================================================================== --- trunk/tests/librnd/librnd_test.c (revision 34624) +++ trunk/tests/librnd/librnd_test.c (revision 34625) @@ -64,7 +64,7 @@ exit(n); } - if (rnd_main_exported(&ga, &CTX.hidlib, 0)) { + if (rnd_main_exported(&ga, &CTX.hidlib, 0, NULL)) { fprintf(stderr, "main_exported fail\n"); rnd_main_args_uninit(&ga); exit(1);