[gimp] app: add a "settings" argument to GimpGeglProcedure
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add a "settings" argument to GimpGeglProcedure
- Date: Wed, 31 May 2017 22:08:29 +0000 (UTC)
commit ed2fb2944f39b785fd3678cb25dfa069899066b5
Author: Michael Natterer <mitch gimp org>
Date: Mon May 29 23:53:36 2017 +0200
app: add a "settings" argument to GimpGeglProcedure
which gets added automatically by procedure_commands_get_display_args().
Move the non-interactive and run-with-last-vals code to
gimp_gegl_procedure_execute() (not execute_async()) because it makes
more sence to call it synchronously anyway (not implemented yet).
This commit should change no behavior.
app/actions/filters-commands.c | 4 +-
app/actions/gimpgeglprocedure.c | 121 ++++++++++++++++++++++----------------
app/actions/plug-in-commands.c | 2 +-
app/actions/procedure-commands.c | 14 ++++-
app/actions/procedure-commands.h | 3 +-
5 files changed, 86 insertions(+), 58 deletions(-)
---
diff --git a/app/actions/filters-commands.c b/app/actions/filters-commands.c
index fb2f85a..87d2a10 100644
--- a/app/actions/filters-commands.c
+++ b/app/actions/filters-commands.c
@@ -81,7 +81,7 @@ filters_repeat_cmd_callback (GtkAction *action,
{
GimpValueArray *args;
- args = procedure_commands_get_display_args (procedure, display);
+ args = procedure_commands_get_display_args (procedure, display, NULL);
if (args)
{
@@ -109,7 +109,7 @@ filters_history_cmd_callback (GtkAction *action,
return_if_no_gimp (gimp, data);
return_if_no_display (display, data);
- args = procedure_commands_get_display_args (procedure, display);
+ args = procedure_commands_get_display_args (procedure, display, NULL);
if (args)
{
diff --git a/app/actions/gimpgeglprocedure.c b/app/actions/gimpgeglprocedure.c
index a599489..4ab628e 100644
--- a/app/actions/gimpgeglprocedure.c
+++ b/app/actions/gimpgeglprocedure.c
@@ -233,9 +233,29 @@ gimp_gegl_procedure_execute (GimpProcedure *procedure,
GimpValueArray *args,
GError **error)
{
- return GIMP_PROCEDURE_CLASS (parent_class)->execute (procedure, gimp,
- context, progress,
- args, error);
+ GimpImage *image;
+ GimpDrawable *drawable;
+ GimpObject *settings;
+ GeglNode *node;
+
+ image = gimp_value_get_image (gimp_value_array_index (args, 1), gimp);
+ drawable = gimp_value_get_drawable (gimp_value_array_index (args, 2), gimp);
+ settings = g_value_get_object (gimp_value_array_index (args, 3));
+
+ node = gegl_node_new_child (NULL,
+ "operation", procedure->original_name,
+ NULL);
+ if (settings)
+ gimp_operation_config_sync_node (settings, node);
+
+ gimp_drawable_apply_operation (drawable, progress,
+ gimp_procedure_get_label (procedure),
+ node);
+ g_object_unref (node);
+
+ gimp_image_flush (image);
+
+ return gimp_procedure_get_return_values (procedure, TRUE, NULL);
}
static void
@@ -246,59 +266,48 @@ gimp_gegl_procedure_execute_async (GimpProcedure *procedure,
GimpValueArray *args,
GimpObject *display)
{
- GimpRunMode run_mode = g_value_get_int (gimp_value_array_index (args, 0));
- GimpObject *settings;
- GimpContainer *container;
- GimpTool *active_tool;
- GType config_type;
-
- config_type = gimp_operation_config_get_type (gimp,
- procedure->original_name,
- gimp_viewable_get_icon_name (GIMP_VIEWABLE (procedure)),
- GIMP_TYPE_SETTINGS);
-
- container =
- gimp_operation_config_get_container (gimp, config_type,
- (GCompareFunc) gimp_settings_compare);
+ GimpRunMode run_mode;
+ GimpObject *settings;
+ GimpTool *active_tool;
- /* the last used settings */
- settings = gimp_container_get_child_by_index (container, 0);
+ run_mode = g_value_get_int (gimp_value_array_index (args, 0));
+ settings = g_value_get_object (gimp_value_array_index (args, 3));
- /* only use the settings if they are automatically created "last used"
- * values, not if they were saved explicitly and have a zero timestamp;
- * and if they are not a separator.
- */
- if (settings &&
- (GIMP_SETTINGS (settings)->time == 0 ||
- ! gimp_object_get_name (settings)))
+ if (! settings)
{
- settings = NULL;
- }
+ /* if we didn't get settings passed, get the last used settings */
- if (run_mode == GIMP_RUN_WITH_LAST_VALS)
- {
- if (settings)
- {
- GimpImage *image;
- GimpDrawable *drawable;
- GeglNode *node;
+ GType config_type;
+ GimpContainer *container;
- node = gegl_node_new_child (NULL,
- "operation", procedure->original_name,
- NULL);
- gimp_operation_config_sync_node (settings, node);
+ config_type = G_VALUE_TYPE (gimp_value_array_index (args, 3));
- image = gimp_value_get_image (gimp_value_array_index (args, 1),
- gimp);
- drawable = gimp_value_get_drawable (gimp_value_array_index (args, 2),
- gimp);
+ container = gimp_operation_config_get_container (gimp, config_type,
+ (GCompareFunc)
+ gimp_settings_compare);
- gimp_drawable_apply_operation (drawable, progress,
- gimp_procedure_get_label (procedure),
- node);
- g_object_unref (node);
+ settings = gimp_container_get_child_by_index (container, 0);
+
+ /* only use the settings if they are automatically created
+ * "last used" values, not if they were saved explicitly and
+ * have a zero timestamp; and if they are not a separator.
+ */
+ if (settings &&
+ (GIMP_SETTINGS (settings)->time == 0 ||
+ ! gimp_object_get_name (settings)))
+ {
+ settings = NULL;
+ }
+ }
- gimp_image_flush (image);
+ if (run_mode == GIMP_RUN_NONINTERACTIVE ||
+ run_mode == GIMP_RUN_WITH_LAST_VALS)
+ {
+ if (settings || run_mode == GIMP_RUN_NONINTERACTIVE)
+ {
+ g_value_set_object (gimp_value_array_index (args, 3), settings);
+ gimp_procedure_execute (procedure, gimp, context, progress,
+ args, NULL);
return;
}
@@ -372,12 +381,16 @@ gimp_gegl_procedure_new (Gimp *gimp,
const gchar *help_id)
{
GimpProcedure *procedure;
+ GType config_type;
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
g_return_val_if_fail (operation != NULL, NULL);
g_return_val_if_fail (name != NULL, NULL);
g_return_val_if_fail (menu_label != NULL, NULL);
+ config_type = gimp_operation_config_get_type (gimp, operation, icon_name,
+ GIMP_TYPE_SETTINGS);
+
procedure = g_object_new (GIMP_TYPE_GEGL_PROCEDURE, NULL);
GIMP_GEGL_PROCEDURE (procedure)->menu_label = g_strdup (menu_label);
@@ -393,9 +406,9 @@ gimp_gegl_procedure_new (Gimp *gimp,
NULL);
gimp_procedure_add_argument (procedure,
- gimp_param_spec_int32 ("dummy-param",
- "Dummy Param",
- "Dummy parameter",
+ gimp_param_spec_int32 ("run-mode",
+ "Run mode",
+ "Run mode",
G_MININT32, G_MAXINT32, 0,
GIMP_PARAM_READWRITE));
gimp_procedure_add_argument (procedure,
@@ -410,6 +423,12 @@ gimp_gegl_procedure_new (Gimp *gimp,
"Input drawable",
gimp, TRUE,
GIMP_PARAM_READWRITE));
+ gimp_procedure_add_argument (procedure,
+ g_param_spec_object ("settings",
+ "Settings",
+ "Settings",
+ config_type,
+ GIMP_PARAM_READWRITE));
return procedure;
}
diff --git a/app/actions/plug-in-commands.c b/app/actions/plug-in-commands.c
index 462d1c3..ddb4511 100644
--- a/app/actions/plug-in-commands.c
+++ b/app/actions/plug-in-commands.c
@@ -130,7 +130,7 @@ plug_in_run_cmd_callback (GtkAction *action,
{
display = action_data_get_display (data);
- args = procedure_commands_get_display_args (procedure, display);
+ args = procedure_commands_get_display_args (procedure, display, NULL);
}
break;
diff --git a/app/actions/procedure-commands.c b/app/actions/procedure-commands.c
index 28e1b98..40300a2 100644
--- a/app/actions/procedure-commands.c
+++ b/app/actions/procedure-commands.c
@@ -180,7 +180,8 @@ procedure_commands_get_item_args (GimpProcedure *procedure,
GimpValueArray *
procedure_commands_get_display_args (GimpProcedure *procedure,
- GimpDisplay *display)
+ GimpDisplay *display,
+ GimpObject *settings)
{
GimpValueArray *args;
gint n_args = 0;
@@ -216,8 +217,7 @@ procedure_commands_get_display_args (GimpProcedure *procedure,
if (image)
{
- gimp_value_set_image (gimp_value_array_index (args, n_args),
- image);
+ gimp_value_set_image (gimp_value_array_index (args, n_args), image);
n_args++;
if (gimp_value_array_length (args) > n_args &&
@@ -241,6 +241,14 @@ procedure_commands_get_display_args (GimpProcedure *procedure,
}
}
+ if (gimp_value_array_length (args) > n_args &&
+ g_type_is_a (G_PARAM_SPEC_VALUE_TYPE (procedure->args[n_args]),
+ GIMP_TYPE_OBJECT))
+ {
+ g_value_set_object (gimp_value_array_index (args, n_args), settings);
+ n_args++;
+ }
+
gimp_value_array_truncate (args, n_args);
return args;
diff --git a/app/actions/procedure-commands.h b/app/actions/procedure-commands.h
index 72748d3..59747c9 100644
--- a/app/actions/procedure-commands.h
+++ b/app/actions/procedure-commands.h
@@ -28,7 +28,8 @@ GimpValueArray * procedure_commands_get_item_args (GimpProcedure *procedure,
GimpImage *image,
GimpItem *item);
GimpValueArray * procedure_commands_get_display_args (GimpProcedure *procedure,
- GimpDisplay *display);
+ GimpDisplay *display,
+ GimpObject *settings);
gboolean procedure_commands_run_procedure (GimpProcedure *procedure,
Gimp *gimp,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]