app, libgimp, pdb, plug-ins: new gimp_resources_loaded() function.
And use the function in script-fu. While we want wrong resource names to trigger WARNINGs in Script-Fu scripts and plug-ins (because these can be considered as a bug), we don't want it to happen when the resource is not loaded on purpose (mostly it means that we run GIMP with --no-data or --no-fonts). This was happening in our own builds when running GIMP through the in-build-gimp.py script and that was always very annoying. Now in such a case, we will only output an INFO message on stderr (it's still a good idea to warn about this, because if we imagined someone was running a script non-interactively, which called one of these procedures, they may have relied on the default value of some arguments. Therefore they'd want to know about such a behavior change).
This commit is contained in:
parent
9cab16c193
commit
7dc8fefbfd
9 changed files with 177 additions and 3 deletions
|
|
@ -30,7 +30,7 @@
|
|||
#include "internal-procs.h"
|
||||
|
||||
|
||||
/* 785 procedures registered total */
|
||||
/* 786 procedures registered total */
|
||||
|
||||
void
|
||||
internal_procs_init (GimpPDB *pdb)
|
||||
|
|
|
|||
|
|
@ -48,6 +48,38 @@
|
|||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
static GimpValueArray *
|
||||
resources_loaded_invoker (GimpProcedure *procedure,
|
||||
Gimp *gimp,
|
||||
GimpContext *context,
|
||||
GimpProgress *progress,
|
||||
const GimpValueArray *args,
|
||||
GError **error)
|
||||
{
|
||||
gboolean success = TRUE;
|
||||
GimpValueArray *return_vals;
|
||||
const gchar *type_name;
|
||||
gboolean loaded = FALSE;
|
||||
|
||||
type_name = g_value_get_string (gimp_value_array_index (args, 0));
|
||||
|
||||
if (success)
|
||||
{
|
||||
if (g_type_from_name (type_name) == GIMP_TYPE_FONT)
|
||||
loaded = ! gimp->no_fonts;
|
||||
else
|
||||
loaded = ! gimp->no_data;
|
||||
}
|
||||
|
||||
return_vals = gimp_procedure_get_return_values (procedure, success,
|
||||
error ? *error : NULL);
|
||||
|
||||
if (success)
|
||||
g_value_set_boolean (gimp_value_array_index (return_vals, 1), loaded);
|
||||
|
||||
return return_vals;
|
||||
}
|
||||
|
||||
static GimpValueArray *
|
||||
resource_get_by_name_invoker (GimpProcedure *procedure,
|
||||
Gimp *gimp,
|
||||
|
|
@ -510,6 +542,37 @@ register_resource_procs (GimpPDB *pdb)
|
|||
{
|
||||
GimpProcedure *procedure;
|
||||
|
||||
/*
|
||||
* gimp-resources-loaded
|
||||
*/
|
||||
procedure = gimp_procedure_new (resources_loaded_invoker, TRUE);
|
||||
gimp_object_set_static_name (GIMP_OBJECT (procedure),
|
||||
"gimp-resources-loaded");
|
||||
gimp_procedure_set_static_help (procedure,
|
||||
"Returns whether resource of a given type were loaded.",
|
||||
"Returns whether resources of a given type were loaded.\n"
|
||||
"In particular, it would return FALSE if GIMP was started with `--no-data` or `--no-fonts` for fonts.",
|
||||
NULL);
|
||||
gimp_procedure_set_static_attribution (procedure,
|
||||
"Jehan",
|
||||
"Jehan",
|
||||
"2026");
|
||||
gimp_procedure_add_argument (procedure,
|
||||
gimp_param_spec_string ("type-name",
|
||||
"type name",
|
||||
"The name of the resource type e.g. GimpFont",
|
||||
FALSE, FALSE, TRUE,
|
||||
NULL,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_procedure_add_return_value (procedure,
|
||||
g_param_spec_boolean ("loaded",
|
||||
"loaded",
|
||||
"Whether resources of @type_name were loaded",
|
||||
FALSE,
|
||||
GIMP_PARAM_READWRITE));
|
||||
gimp_pdb_register_procedure (pdb, procedure);
|
||||
g_object_unref (procedure);
|
||||
|
||||
/*
|
||||
* gimp-resource-get-by-name
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1059,6 +1059,7 @@ EXPORTS
|
|||
gimp_resource_rename
|
||||
gimp_resource_select_new
|
||||
gimp_resource_select_set
|
||||
gimp_resources_loaded
|
||||
gimp_selection_all
|
||||
gimp_selection_border
|
||||
gimp_selection_bounds
|
||||
|
|
|
|||
|
|
@ -273,6 +273,31 @@ gimp_resource_deserialize_create (GType type,
|
|||
return GIMP_CONFIG (resource);;
|
||||
}
|
||||
|
||||
|
||||
/* Public functions */
|
||||
|
||||
/**
|
||||
* gimp_resources_loaded:
|
||||
* @resource_type: The #GType of the resource.
|
||||
*
|
||||
* Returns whether the resource with the given @resource_type were
|
||||
* loaded.
|
||||
*
|
||||
* In particular, it would return FALSE if GIMP was started with
|
||||
* `--no-data` (or `--no-fonts` for fonts).
|
||||
*
|
||||
* Returns: Whether resources of @resource_type were loaded.
|
||||
*
|
||||
* Since: 3.2.4
|
||||
**/
|
||||
gboolean
|
||||
gimp_resources_loaded (GType resource_type)
|
||||
{
|
||||
g_return_val_if_fail (g_type_is_a (resource_type, GIMP_TYPE_RESOURCE), FALSE);
|
||||
|
||||
return _gimp_resources_loaded (g_type_name (resource_type));
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_resource_get_id:
|
||||
* @resource: The resource.
|
||||
|
|
|
|||
|
|
@ -49,6 +49,8 @@ struct _GimpResourceClass
|
|||
void (*_gimp_reserved9) (void);
|
||||
};
|
||||
|
||||
gboolean gimp_resources_loaded (GType resource_type);
|
||||
|
||||
gint32 gimp_resource_get_id (GimpResource *resource);
|
||||
GimpResource * gimp_resource_get_by_id (gint32 resource_id);
|
||||
GimpResource * gimp_resource_get_by_name (GType resource_type,
|
||||
|
|
|
|||
|
|
@ -36,6 +36,44 @@
|
|||
**/
|
||||
|
||||
|
||||
/**
|
||||
* _gimp_resources_loaded:
|
||||
* @type_name: The name of the resource type e.g. GimpFont.
|
||||
*
|
||||
* Returns whether resource of a given type were loaded.
|
||||
*
|
||||
* Returns whether resources of a given type were loaded.
|
||||
* In particular, it would return FALSE if GIMP was started with
|
||||
* `--no-data` or `--no-fonts` for fonts.
|
||||
*
|
||||
* Returns: Whether resources of @type_name were loaded.
|
||||
*
|
||||
* Since: 3.2.4
|
||||
**/
|
||||
gboolean
|
||||
_gimp_resources_loaded (const gchar *type_name)
|
||||
{
|
||||
GimpValueArray *args;
|
||||
GimpValueArray *return_vals;
|
||||
gboolean loaded = FALSE;
|
||||
|
||||
args = gimp_value_array_new_from_types (NULL,
|
||||
G_TYPE_STRING, type_name,
|
||||
G_TYPE_NONE);
|
||||
|
||||
return_vals = _gimp_pdb_run_procedure_array (gimp_get_pdb (),
|
||||
"gimp-resources-loaded",
|
||||
args);
|
||||
gimp_value_array_unref (args);
|
||||
|
||||
if (GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS)
|
||||
loaded = GIMP_VALUES_GET_BOOLEAN (return_vals, 1);
|
||||
|
||||
gimp_value_array_unref (return_vals);
|
||||
|
||||
return loaded;
|
||||
}
|
||||
|
||||
/**
|
||||
* _gimp_resource_get_by_name:
|
||||
* @type_name: The name of the resource type e.g. GimpFont.
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ G_BEGIN_DECLS
|
|||
/* For information look into the C source or the html documentation */
|
||||
|
||||
|
||||
G_GNUC_INTERNAL gboolean _gimp_resources_loaded (const gchar *type_name);
|
||||
G_GNUC_INTERNAL GimpResource* _gimp_resource_get_by_name (const gchar *type_name,
|
||||
const gchar *resource_name);
|
||||
G_GNUC_INTERNAL GimpResource* _gimp_resource_get_by_identifiers (const gchar *type_name,
|
||||
|
|
|
|||
|
|
@ -16,6 +16,41 @@
|
|||
|
||||
# "Perlized" from C source by Manish Singh <yosh@gimp.org>
|
||||
|
||||
sub resources_loaded {
|
||||
$blurb = "Returns whether resource of a given type were loaded.";
|
||||
$help = <<HELP;
|
||||
Returns whether resources of a given type were loaded.
|
||||
|
||||
In particular, it would return FALSE if GIMP was started with `--no-data`
|
||||
or `--no-fonts` for fonts.
|
||||
HELP
|
||||
|
||||
&jehan_pdb_misc('2026', '3.2.4');
|
||||
|
||||
$lib_private = 1;
|
||||
|
||||
@inargs = (
|
||||
{ name => 'type_name', type => 'string', non_empty => 1,
|
||||
desc => 'The name of the resource type e.g. GimpFont' }
|
||||
);
|
||||
|
||||
@outargs = (
|
||||
{ name => 'loaded', type => 'boolean',
|
||||
desc => 'Whether resources of @type_name were loaded' }
|
||||
);
|
||||
|
||||
%invoke = (
|
||||
code => <<'CODE'
|
||||
{
|
||||
if (g_type_from_name (type_name) == GIMP_TYPE_FONT)
|
||||
loaded = ! gimp->no_fonts;
|
||||
else
|
||||
loaded = ! gimp->no_data;
|
||||
}
|
||||
CODE
|
||||
);
|
||||
}
|
||||
|
||||
sub resource_get_by_name {
|
||||
$blurb = "Returns a resource with the given name.";
|
||||
$help = <<HELP;
|
||||
|
|
@ -497,7 +532,8 @@ CODE
|
|||
"gimppdberror.h"
|
||||
"gimp-intl.h");
|
||||
|
||||
@procs = qw(resource_get_by_name
|
||||
@procs = qw(resources_loaded
|
||||
resource_get_by_name
|
||||
resource_get_by_identifiers
|
||||
resource_id_is_valid
|
||||
resource_id_is_brush
|
||||
|
|
|
|||
|
|
@ -311,7 +311,15 @@ script_fu_add_resource_arg (
|
|||
* later on, the fonts will likely have been loaded by then.
|
||||
*/
|
||||
if (arg->default_value.sfa_resource.resource_type != GIMP_TYPE_FONT)
|
||||
g_warning ("%s declared resource name is invalid %s", G_STRFUNC, declared_name_of_default);
|
||||
{
|
||||
if (gimp_resources_loaded (arg->default_value.sfa_resource.resource_type))
|
||||
g_warning ("%s declared resource name is invalid %s", G_STRFUNC, declared_name_of_default);
|
||||
else
|
||||
g_printerr ("INFO: argument '%s' (value \"%s\") of procedure '%s' ignored "
|
||||
"because resources of type %s are not loaded.\n",
|
||||
name, declared_name_of_default, gimp_procedure_get_name (procedure),
|
||||
g_type_name (arg->default_value.sfa_resource.resource_type));
|
||||
}
|
||||
script_fu_add_resource_arg_default_from_context (procedure, name, nick, blurb, func);
|
||||
}
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in a new issue