Index: trunk/src/plug_io.c =================================================================== --- trunk/src/plug_io.c (revision 5358) +++ trunk/src/plug_io.c (revision 5359) @@ -836,7 +836,7 @@ } -int pcb_io_list(pcb_io_formats_t *out, pcb_plug_iot_t typ, int wr, int do_digest) +int pcb_io_list(pcb_io_formats_t *out, pcb_plug_iot_t typ, int wr, int do_digest, pcb_io_list_ext_t ext) { pcb_find_io_t available[PCB_IO_MAX_FORMATS]; int n; @@ -849,7 +849,11 @@ for(n = 0; n < out->len; n++) { out->plug[n] = available[n].plug; - out->extension[n] = out->plug[n]->default_extension; + switch(ext) { + case PCB_IOL_EXT_NONE: out->extension[n] = NULL; break; + case PCB_IOL_EXT_BOARD: out->extension[n] = out->plug[n]->default_extension; break; + case PCB_IOL_EXT_FP: out->extension[n] = out->plug[n]->fp_extension; break; + } } if (do_digest) { Index: trunk/src/plug_io.h =================================================================== --- trunk/src/plug_io.h (revision 5358) +++ trunk/src/plug_io.h (revision 5359) @@ -137,11 +137,17 @@ const char *extension[PCB_IO_MAX_FORMATS+1]; /* default file extension, with the leading . (not strdup'd) */ } pcb_io_formats_t; +typedef enum { + PCB_IOL_EXT_NONE, + PCB_IOL_EXT_BOARD, + PCB_IOL_EXT_FP +} pcb_io_list_ext_t; + /* Search all io plugins to see if typ/wr is supported. Return an ordered list in out. If do_digest is non-zero, fill in the digest field. Returns number of suitable io plugins. Call pcb_io_list_free() on out when it is not needed anymore. */ -int pcb_io_list(pcb_io_formats_t *out, pcb_plug_iot_t typ, int wr, int do_digest); +int pcb_io_list(pcb_io_formats_t *out, pcb_plug_iot_t typ, int wr, int do_digest, pcb_io_list_ext_t ext); void pcb_io_list_free(pcb_io_formats_t *out); extern int pcb_io_err_inhibit; Index: trunk/src_plugins/hid_gtk/gtkhid-main.c =================================================================== --- trunk/src_plugins/hid_gtk/gtkhid-main.c (revision 5358) +++ trunk/src_plugins/hid_gtk/gtkhid-main.c (revision 5359) @@ -1224,7 +1224,7 @@ if (strcasecmp(function, "PasteBuffer") == 0) { prompt = _("Save element as"); - if (pcb_io_list(&avail, PCB_IOT_BUFFER, 1, 1) > 0) { + if (pcb_io_list(&avail, PCB_IOT_BUFFER, 1, 1, PCB_IOL_EXT_FP) > 0) { formats_param = (const char **)avail.digest; extensions_param = (const char **)avail.extension; fmt_param = &fmt; @@ -1238,7 +1238,7 @@ else { int num_fmts, n; prompt = _("Save layout as"); - num_fmts = pcb_io_list(&avail, PCB_IOT_PCB, 1, 1); + num_fmts = pcb_io_list(&avail, PCB_IOT_PCB, 1, 1, PCB_IOL_EXT_BOARD); if (num_fmts > 0) { formats_param = (const char **)avail.digest; extensions_param = (const char **)avail.extension; Index: trunk/src_plugins/hid_gtk/gui-dialog.c =================================================================== --- trunk/src_plugins/hid_gtk/gui-dialog.c (revision 5358) +++ trunk/src_plugins/hid_gtk/gui-dialog.c (revision 5359) @@ -273,7 +273,7 @@ || (strcmp(title, _("Load layout file to buffer")) == 0)) { /* add a filter for layout files */ pcb_io_formats_t fmts; - int n, num_fmts = pcb_io_list(&fmts, PCB_IOT_PCB, 0, 0); + int n, num_fmts = pcb_io_list(&fmts, PCB_IOT_PCB, 0, 0, PCB_IOL_EXT_BOARD); for(n = 0; n < num_fmts; n++) { int i; char *ext;