[gimp] Issue #6767: sensitivity API NO_IMAGE not working in Python.
- From: Jehan <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Issue #6767: sensitivity API NO_IMAGE not working in Python.
- Date: Thu, 29 Apr 2021 21:57:01 +0000 (UTC)
commit 3ce0e66321a5c8eced0b7dcb9a6c99e20313ea1f
Author: Jehan <jehan girinstud io>
Date: Thu Apr 29 23:53:35 2021 +0200
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.
libgimp/gimpimageprocedure.c | 30 ++++++++++++++++++++++++++----
libgimp/gimpprocedure.c | 17 +++++++++++++----
libgimp/gimpprocedure.h | 17 ++++++++++-------
3 files changed, 49 insertions(+), 15 deletions(-)
---
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 >*/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]