mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-03 17:33:25 +00:00
app, libgimpbase: do not try to open a non existing file.
Now that GimpParamSpecFile makes file validation depending on the action set in the param spec, when trying to open a non-existing file (which can happen through GUI, for instance when opening through the Document History dockable or Open Recent menu), we had a quite obscure error about a value "out of range" used "for argument 'file' (#2, type GFile)", which is because core tried to set the GFile for a non-existing file into the second parameter of the plug-in PDB. This is not a very nice error for end-users. The old error was much nicer as it used to say things like: > Could not open '/path/not/existing.png' for reading: No such file or directory But in fact, this string came from the plug-in, which means: * first that the error can be different depending on the format (inconsistency of error message); * depending on bugs in plug-ins, it may just crash or return no error messages; * finally we were making a useless call to a load plug-in while we should already know from core that it won't work. The new message is something like: > Error when getting information for file "/path/not/existing.png: No such file or directory This error is generated by core, so it will always be consistently the same, is understandable too and the plug-in won't even be called. As a side related fix, I updated the GimpParamSpecFile validation to only validate local files, just like we do in core. Remote files can always be set (and we let plug-ins handle them), at least for the time being.
This commit is contained in:
parent
f9203916c0
commit
042d3051c6
2 changed files with 26 additions and 19 deletions
|
@ -121,8 +121,7 @@ file_open_image (Gimp *gimp,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME enable these tests for remote files again, needs testing */
|
/* FIXME enable these tests for remote files again, needs testing */
|
||||||
if (g_file_is_native (file) &&
|
if (g_file_is_native (file))
|
||||||
g_file_query_exists (file, NULL))
|
|
||||||
{
|
{
|
||||||
GFileInfo *info;
|
GFileInfo *info;
|
||||||
|
|
||||||
|
@ -131,27 +130,35 @@ file_open_image (Gimp *gimp,
|
||||||
G_FILE_ATTRIBUTE_ACCESS_CAN_READ,
|
G_FILE_ATTRIBUTE_ACCESS_CAN_READ,
|
||||||
G_FILE_QUERY_INFO_NONE,
|
G_FILE_QUERY_INFO_NONE,
|
||||||
NULL, error);
|
NULL, error);
|
||||||
if (! info)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_STANDARD_TYPE) != G_FILE_TYPE_REGULAR)
|
if (info != NULL)
|
||||||
{
|
{
|
||||||
g_set_error_literal (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
if (g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_STANDARD_TYPE) != G_FILE_TYPE_REGULAR)
|
||||||
_("Not a regular file"));
|
{
|
||||||
|
g_set_error_literal (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||||
|
_("Not a regular file"));
|
||||||
|
g_object_unref (info);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! g_file_info_get_attribute_boolean (info,
|
||||||
|
G_FILE_ATTRIBUTE_ACCESS_CAN_READ))
|
||||||
|
{
|
||||||
|
g_set_error_literal (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
||||||
|
_("Permission denied"));
|
||||||
|
g_object_unref (info);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
g_object_unref (info);
|
g_object_unref (info);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* File likely does not exists. error will already have a more
|
||||||
|
* accurate reason.
|
||||||
|
*/
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! g_file_info_get_attribute_boolean (info,
|
|
||||||
G_FILE_ATTRIBUTE_ACCESS_CAN_READ))
|
|
||||||
{
|
|
||||||
g_set_error_literal (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
|
|
||||||
_("Permission denied"));
|
|
||||||
g_object_unref (info);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_unref (info);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! file_proc)
|
if (! file_proc)
|
||||||
|
|
|
@ -293,7 +293,7 @@ gimp_param_spec_file_validate (GParamSpec *pspec,
|
||||||
{
|
{
|
||||||
modifying = TRUE;
|
modifying = TRUE;
|
||||||
}
|
}
|
||||||
else if (file != NULL)
|
else if (file != NULL && g_file_is_native (file))
|
||||||
{
|
{
|
||||||
gboolean exists = g_file_query_exists (file, NULL);
|
gboolean exists = g_file_query_exists (file, NULL);
|
||||||
GFileType type = g_file_query_file_type (file, G_FILE_QUERY_INFO_NONE, NULL);
|
GFileType type = g_file_query_file_type (file, G_FILE_QUERY_INFO_NONE, NULL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue