diff --git a/ChangeLog b/ChangeLog index ab40e93f43..b30bb406f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2006-08-10 Sven Neumann + + * app/file/file-utils.[ch]: added a GError parameter to + file_utils_find_proc(). + + * app/actions/file-commands.c + * app/dialogs/file-save-dialog.c + * app/file/file-open.c + * app/widgets/gimpdnd-xds.c + * tools/pdbgen/pdb/fileops.pdb: changed accordingly. + + * app/pdb/fileops_cmds.c: regenerated. + 2006-08-10 Bill Skaggs * libgimpwidgets/gimpwidgets.c (gimp_coordinate_callback): diff --git a/app/actions/file-commands.c b/app/actions/file-commands.c index 36f3d2b618..5de68df96f 100644 --- a/app/actions/file-commands.c +++ b/app/actions/file-commands.c @@ -206,8 +206,9 @@ file_save_cmd_callback (GtkAction *action, save_proc = gimp_image_get_save_proc (image); if (uri && ! save_proc) - save_proc = file_utils_find_proc (image->gimp->plug_in_manager->save_procs, - uri); + save_proc = + file_utils_find_proc (image->gimp->plug_in_manager->save_procs, + uri, NULL); if (! (uri && save_proc)) { diff --git a/app/dialogs/file-save-dialog.c b/app/dialogs/file-save-dialog.c index 4e125a11a0..815cb5b265 100644 --- a/app/dialogs/file-save-dialog.c +++ b/app/dialogs/file-save-dialog.c @@ -173,9 +173,9 @@ file_save_dialog_check_uri (GtkWidget *save_dialog, save_proc = dialog->file_proc; uri_proc = file_utils_find_proc (gimp->plug_in_manager->save_procs, - uri); + uri, NULL); basename_proc = file_utils_find_proc (gimp->plug_in_manager->save_procs, - basename); + basename, NULL); #ifdef DEBUG_SPEW g_print ("\n\n%s: URI = %s\n", @@ -234,10 +234,10 @@ file_save_dialog_check_uri (GtkWidget *save_dialog, uri = ext_uri; basename = ext_basename; - uri_proc = file_utils_find_proc (gimp->plug_in_manager->save_procs, - uri); + uri_proc = file_utils_find_proc (gimp->plug_in_manager->save_procs, + uri, NULL); basename_proc = file_utils_find_proc (gimp->plug_in_manager->save_procs, - basename); + basename, NULL); utf8 = g_filename_to_utf8 (basename, -1, NULL, NULL, NULL); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (save_dialog), diff --git a/app/file/file-open.c b/app/file/file-open.c index bf0c434fd6..f196a706ef 100644 --- a/app/file/file-open.c +++ b/app/file/file-open.c @@ -98,14 +98,11 @@ file_open_image (Gimp *gimp, *status = GIMP_PDB_EXECUTION_ERROR; if (! file_proc) - file_proc = file_utils_find_proc (gimp->plug_in_manager->load_procs, uri); + file_proc = file_utils_find_proc (gimp->plug_in_manager->load_procs, + uri, error); if (! file_proc) - { - g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, - _("Unknown file type")); - return NULL; - } + return NULL; filename = file_utils_filename_from_uri (uri); @@ -203,7 +200,8 @@ file_open_thumbnail (Gimp *gimp, *image_width = 0; *image_height = 0; - file_proc = file_utils_find_proc (gimp->plug_in_manager->load_procs, uri); + file_proc = file_utils_find_proc (gimp->plug_in_manager->load_procs, + uri, NULL); if (! file_proc || ! file_proc->thumb_loader) return NULL; diff --git a/app/file/file-utils.c b/app/file/file-utils.c index a6ee049c50..368858ab5e 100644 --- a/app/file/file-utils.c +++ b/app/file/file-utils.c @@ -21,6 +21,7 @@ #include "config.h" +#include #include #include @@ -186,7 +187,8 @@ file_utils_filename_from_uri (const gchar *uri) GimpPlugInProcedure * file_utils_find_proc (GSList *procs, - const gchar *uri) + const gchar *uri, + GError **error) { GimpPlugInProcedure *file_proc; GSList *all_procs = procs; @@ -194,6 +196,7 @@ file_utils_find_proc (GSList *procs, g_return_val_if_fail (procs != NULL, NULL); g_return_val_if_fail (uri != NULL, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); /* First, check magicless prefixes/suffixes */ file_proc = file_proc_find_by_name (all_procs, uri, TRUE); @@ -223,8 +226,18 @@ file_utils_find_proc (GSList *procs, if (head_size == -2) { head_size = 0; + if ((ifp = g_fopen (filename, "rb")) != NULL) - head_size = fread ((gchar *) head, 1, sizeof (head), ifp); + { + head_size = fread ((gchar *) head, 1, sizeof (head), ifp); + } + else + { + g_set_error (error, + G_FILE_ERROR, + g_file_error_from_errno (errno), + g_strerror (errno)); + } } if (head_size >= 4) @@ -259,7 +272,13 @@ file_utils_find_proc (GSList *procs, } /* As a last resort, try matching by name */ - return file_proc_find_by_name (all_procs, uri, FALSE); + file_proc = file_proc_find_by_name (all_procs, uri, FALSE); + + if (! file_proc && error && *error == NULL) + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Unknown file type")); + + return file_proc; } GimpPlugInProcedure * diff --git a/app/file/file-utils.h b/app/file/file-utils.h index 9f2f07e1d7..1002ad56d9 100644 --- a/app/file/file-utils.h +++ b/app/file/file-utils.h @@ -36,7 +36,8 @@ gchar * file_utils_uri_display_basename (const gchar *uri); gchar * file_utils_uri_display_name (const gchar *uri); GimpPlugInProcedure * file_utils_find_proc (GSList *procs, - const gchar *filename); + const gchar *filename, + GError **error); GimpPlugInProcedure * file_utils_find_proc_by_extension (GSList *procs, const gchar *uri); diff --git a/app/pdb/fileops_cmds.c b/app/pdb/fileops_cmds.c index 9f265af0a4..369023a9ad 100644 --- a/app/pdb/fileops_cmds.c +++ b/app/pdb/fileops_cmds.c @@ -63,7 +63,8 @@ file_load_invoker (GimpProcedure *procedure, if (! uri) return gimp_procedure_get_return_values (procedure, FALSE); - file_proc = file_utils_find_proc (gimp->plug_in_manager->load_procs, uri); + file_proc = + file_utils_find_proc (gimp->plug_in_manager->load_procs, uri, NULL); g_free (uri); @@ -157,7 +158,8 @@ file_save_invoker (GimpProcedure *procedure, if (! uri) return gimp_procedure_get_return_values (procedure, FALSE); - file_proc = file_utils_find_proc (gimp->plug_in_manager->save_procs, uri); + file_proc = + file_utils_find_proc (gimp->plug_in_manager->save_procs, uri, NULL); g_free (uri); diff --git a/app/widgets/gimpdnd-xds.c b/app/widgets/gimpdnd-xds.c index 37bf208cef..ad9c931db1 100644 --- a/app/widgets/gimpdnd-xds.c +++ b/app/widgets/gimpdnd-xds.c @@ -141,7 +141,8 @@ gimp_dnd_xds_save_image (GdkDragContext *context, uri = g_strndup ((const gchar *) data, length); g_free (data); - proc = file_utils_find_proc (image->gimp->plug_in_manager->save_procs, uri); + proc = + file_utils_find_proc (image->gimp->plug_in_manager->save_procs, uri, NULL); if (proc) { diff --git a/tools/pdbgen/pdb/fileops.pdb b/tools/pdbgen/pdb/fileops.pdb index 4fc106d2e1..b97737c9de 100644 --- a/tools/pdbgen/pdb/fileops.pdb +++ b/tools/pdbgen/pdb/fileops.pdb @@ -65,7 +65,8 @@ HELP if (! uri) return gimp_procedure_get_return_values (procedure, FALSE); - file_proc = file_utils_find_proc (gimp->plug_in_manager->load_procs, uri); + file_proc = + file_utils_find_proc (gimp->plug_in_manager->load_procs, uri, NULL); g_free (uri); @@ -191,7 +192,8 @@ HELP if (! uri) return gimp_procedure_get_return_values (procedure, FALSE); - file_proc = file_utils_find_proc (gimp->plug_in_manager->save_procs, uri); + file_proc = + file_utils_find_proc (gimp->plug_in_manager->save_procs, uri, NULL); g_free (uri);