[gimp] libgimp: add preliminary function gimp_run_procedure_with_array()



commit 9a547c14d5630b5ae9316a28e3b2600d175d9912
Author: Michael Natterer <mitch gimp org>
Date:   Mon Jul 29 12:53:27 2019 +0200

    libgimp: add preliminary function gimp_run_procedure_with_array()
    
    which takes and returns GimpValueArrays. This or something similar is
    the new central function for running core procedures. Use the new
    function from gimp_run_procedure2().

 libgimp/gimp.c | 44 +++++++++++++++++++++++++++++---------------
 libgimp/gimp.h |  8 ++++++++
 2 files changed, 37 insertions(+), 15 deletions(-)
---
diff --git a/libgimp/gimp.c b/libgimp/gimp.c
index 7316b73d33..c710cf2820 100644
--- a/libgimp/gimp.c
+++ b/libgimp/gimp.c
@@ -1474,18 +1474,39 @@ gimp_run_procedure2 (const gchar     *name,
                      gint             n_params,
                      const GimpParam *params)
 {
-  GPProcRun        proc_run;
-  GPProcReturn    *proc_return;
-  GimpValueArray  *arguments;
-  GimpValueArray  *return_values;
-  GimpWireMessage  msg;
-  GimpParam       *return_vals;
+  GimpValueArray *arguments;
+  GimpValueArray *return_values;
+  GimpParam      *return_vals;
 
   g_return_val_if_fail (name != NULL, NULL);
   g_return_val_if_fail (n_return_vals != NULL, NULL);
 
   arguments = _gimp_params_to_value_array (params, n_params, FALSE);
 
+  return_values = gimp_run_procedure_with_array (name, arguments);
+
+  gimp_value_array_unref (arguments);
+
+  *n_return_vals = gimp_value_array_length (return_values);
+  return_vals    = _gimp_value_array_to_params (return_values, TRUE);
+
+  gimp_value_array_unref (return_values);
+
+  return return_vals;
+}
+
+GimpValueArray *
+gimp_run_procedure_with_array (const gchar    *name,
+                               GimpValueArray *arguments)
+{
+  GPProcRun        proc_run;
+  GPProcReturn    *proc_return;
+  GimpWireMessage  msg;
+  GimpValueArray  *return_values;
+
+  g_return_val_if_fail (name != NULL, NULL);
+  g_return_val_if_fail (arguments != NULL, NULL);
+
   proc_run.name    = (gchar *) name;
   proc_run.nparams = gimp_value_array_length (arguments);
   proc_run.params  = _gimp_value_array_to_gp_params (arguments, FALSE);
@@ -1494,9 +1515,6 @@ gimp_run_procedure2 (const gchar     *name,
   if (! gp_proc_run_write (_writechannel, &proc_run, NULL))
     gimp_quit ();
 
-  g_free (proc_run.params);
-  gimp_value_array_unref (arguments);
-
   gimp_read_expect_msg (&msg, GP_PROC_RETURN);
   gp_unlock ();
 
@@ -1507,15 +1525,11 @@ gimp_run_procedure2 (const gchar     *name,
                                                   proc_return->nparams,
                                                   TRUE, FALSE);
 
-  *n_return_vals = gimp_value_array_length (return_values);
-  return_vals    = _gimp_value_array_to_params (return_values, TRUE);
+  gimp_wire_destroy (&msg);
 
   gimp_set_pdb_error (return_values);
 
-  gimp_value_array_unref (return_values);
-  gimp_wire_destroy (&msg);
-
-  return return_vals;
+  return return_values;
 }
 
 /**
diff --git a/libgimp/gimp.h b/libgimp/gimp.h
index ff5c847b86..bb52b16daf 100644
--- a/libgimp/gimp.h
+++ b/libgimp/gimp.h
@@ -411,6 +411,14 @@ GimpParam    * gimp_run_procedure2      (const gchar     *name,
                                          gint             n_params,
                                          const GimpParam *params);
 
+/* Run a procedure in the procedure database. The parameters are
+ *  specified as a GimpValueArray, so are the return values.
+ *
+ * FIXME this API is not final!
+ */
+GimpValueArray * gimp_run_procedure_with_array (const gchar    *name,
+                                                GimpValueArray *arguments);
+
 /* Destroy the an array of parameters. This is useful for
  *  destroying the return values returned by a call to
  *  'gimp_run_procedure'.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]