diff --git a/libgimp/gimpimageprocedure.c b/libgimp/gimpimageprocedure.c index 05c068610b..565d01e085 100644 --- a/libgimp/gimpimageprocedure.c +++ b/libgimp/gimpimageprocedure.c @@ -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 */ diff --git a/libgimp/gimpprocedure.c b/libgimp/gimpprocedure.c index 2eae229e62..e56e035a8c 100644 --- a/libgimp/gimpprocedure.c +++ b/libgimp/gimpprocedure.c @@ -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); + } } /** diff --git a/libgimp/gimpprocedure.h b/libgimp/gimpprocedure.h index c52f8adb0b..6e614009b5 100644 --- a/libgimp/gimpprocedure.h +++ b/libgimp/gimpprocedure.h @@ -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 >*/