Issue #6767: sensitivity API NO_IMAGE not working in Python.

When GIMP_PROCEDURE_SENSITIVE_NO_IMAGE is set on a GimpImageProcedure,
add GIMP_PARAM_NO_VALIDATE to the param spec flags, allowing to pass a
NULL image.
This commit is contained in:
Jehan 2021-04-29 23:53:35 +02:00
parent 8d8c77730c
commit 3ce0e66321
3 changed files with 49 additions and 15 deletions

View file

@ -43,6 +43,9 @@ static GimpProcedureConfig *
gimp_image_procedure_create_config (GimpProcedure *procedure,
GParamSpec **args,
gint n_args);
static gboolean
gimp_image_procedure_set_sensitivity (GimpProcedure *procedure,
gint sensitivity_mask);
G_DEFINE_TYPE_WITH_PRIVATE (GimpImageProcedure, gimp_image_procedure,
@ -57,11 +60,12 @@ gimp_image_procedure_class_init (GimpImageProcedureClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpProcedureClass *procedure_class = GIMP_PROCEDURE_CLASS (klass);
object_class->constructed = gimp_image_procedure_constructed;
object_class->finalize = gimp_image_procedure_finalize;
object_class->constructed = gimp_image_procedure_constructed;
object_class->finalize = gimp_image_procedure_finalize;
procedure_class->run = gimp_image_procedure_run;
procedure_class->create_config = gimp_image_procedure_create_config;
procedure_class->run = gimp_image_procedure_run;
procedure_class->create_config = gimp_image_procedure_create_config;
procedure_class->set_sensitivity = gimp_image_procedure_set_sensitivity;
}
static void
@ -175,6 +179,24 @@ gimp_image_procedure_create_config (GimpProcedure *procedure,
n_args);
}
static gboolean
gimp_image_procedure_set_sensitivity (GimpProcedure *procedure,
gint sensitivity_mask)
{
GParamSpec *pspec;
g_return_val_if_fail (GIMP_IS_IMAGE_PROCEDURE (procedure), FALSE);
pspec = gimp_procedure_find_argument (procedure, "image");
g_return_val_if_fail (pspec, FALSE);
if (sensitivity_mask & GIMP_PROCEDURE_SENSITIVE_NO_IMAGE)
pspec->flags |= GIMP_PARAM_NO_VALIDATE;
else
pspec->flags &= ~GIMP_PARAM_NO_VALIDATE;
return TRUE;
}
/* public functions */

View file

@ -733,13 +733,22 @@ void
gimp_procedure_set_sensitivity_mask (GimpProcedure *procedure,
gint sensitivity_mask)
{
gboolean success = TRUE;
g_return_if_fail (GIMP_IS_PROCEDURE (procedure));
procedure->priv->sensitivity_mask = sensitivity_mask;
if (GIMP_PROCEDURE_GET_CLASS (procedure)->set_sensitivity)
success = GIMP_PROCEDURE_GET_CLASS (procedure)->set_sensitivity (procedure,
sensitivity_mask);
if (procedure->priv->installed)
_gimp_pdb_set_proc_sensitivity_mask (gimp_procedure_get_name (procedure),
procedure->priv->sensitivity_mask);
if (success)
{
procedure->priv->sensitivity_mask = sensitivity_mask;
if (procedure->priv->installed)
_gimp_pdb_set_proc_sensitivity_mask (gimp_procedure_get_name (procedure),
procedure->priv->sensitivity_mask);
}
}
/**

View file

@ -104,15 +104,18 @@ struct _GimpProcedureClass
{
GObjectClass parent_class;
void (* install) (GimpProcedure *procedure);
void (* uninstall) (GimpProcedure *procedure);
void (* install) (GimpProcedure *procedure);
void (* uninstall) (GimpProcedure *procedure);
GimpValueArray * (* run) (GimpProcedure *procedure,
const GimpValueArray *args);
GimpValueArray * (* run) (GimpProcedure *procedure,
const GimpValueArray *args);
GimpProcedureConfig * (* create_config) (GimpProcedure *procedure,
GParamSpec **args,
gint n_args);
GimpProcedureConfig * (* create_config) (GimpProcedure *procedure,
GParamSpec **args,
gint n_args);
gboolean (* set_sensitivity) (GimpProcedure *procedure,
gint sensitivity_mask);
/* Padding for future expansion */
/*< private >*/