[gimp] libgimpbase: add support for arrays of object IDs to gimpprotocol



commit 85591eb799822c5758623ac3d97325ac63cbe78c
Author: Michael Natterer <mitch gimp org>
Date:   Thu Sep 5 11:34:54 2019 +0200

    libgimpbase: add support for arrays of object IDs to gimpprotocol

 libgimpbase/gimpprotocol.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++
 libgimpbase/gimpprotocol.h | 20 ++++++++++++++-
 2 files changed, 81 insertions(+), 1 deletion(-)
---
diff --git a/libgimpbase/gimpprotocol.c b/libgimpbase/gimpprotocol.c
index b3c5175c07..bc35fe0fca 100644
--- a/libgimpbase/gimpprotocol.c
+++ b/libgimpbase/gimpprotocol.c
@@ -1133,6 +1133,13 @@ _gp_param_def_read (GIOChannel *channel,
         return FALSE;
       break;
 
+    case GP_PARAM_DEF_TYPE_ID_ARRAY:
+      if (! _gimp_wire_read_string (channel,
+                                    &param_def->meta.m_id_array.type_name, 1,
+                                    user_data))
+        return FALSE;
+      break;
+
     case GP_PARAM_DEF_TYPE_PARAM_DEF:
       if (! _gimp_wire_read_string (channel,
                                     &param_def->meta.m_param_def.type_name, 1,
@@ -1175,6 +1182,10 @@ _gp_param_def_destroy (GPParamDef *param_def)
     case GP_PARAM_DEF_TYPE_ID:
       break;
 
+    case GP_PARAM_DEF_TYPE_ID_ARRAY:
+      g_free (param_def->meta.m_id_array.type_name);
+      break;
+
     case GP_PARAM_DEF_TYPE_PARAM_DEF:
       g_free (param_def->meta.m_param_def.type_name);
       break;
@@ -1411,6 +1422,13 @@ _gp_param_def_write (GIOChannel *channel,
         return FALSE;
       break;
 
+    case GP_PARAM_DEF_TYPE_ID_ARRAY:
+      if (! _gimp_wire_write_string (channel,
+                                     &param_def->meta.m_id_array.type_name, 1,
+                                     user_data))
+        return FALSE;
+      break;
+
     case GP_PARAM_DEF_TYPE_PARAM_DEF:
       if (! _gimp_wire_write_string (channel,
                                      &param_def->meta.m_param_def.type_name, 1,
@@ -1704,6 +1722,31 @@ _gp_params_read (GIOChannel  *channel,
             }
           break;
 
+        case GP_PARAM_TYPE_ID_ARRAY:
+          if (! _gimp_wire_read_string (channel,
+                                        &(*params)[i].data.d_id_array.type_name, 1,
+                                        user_data))
+            goto cleanup;
+
+          if (! _gimp_wire_read_int32 (channel,
+                                       &(*params)[i].data.d_id_array.size, 1,
+                                       user_data))
+            goto cleanup;
+
+          (*params)[i].data.d_id_array.data = g_new0 (gint32,
+                                                      (*params)[i].data.d_id_array.size);
+
+          if (! _gimp_wire_read_int32 (channel,
+                                       (guint32 *) (*params)[i].data.d_id_array.data,
+                                       (*params)[i].data.d_id_array.size,
+                                       user_data))
+            {
+              g_free ((*params)[i].data.d_id_array.data);
+              (*params)[i].data.d_id_array.data = NULL;
+              goto cleanup;
+            }
+          break;
+
         case GP_PARAM_TYPE_PARASITE:
           if (! _gimp_wire_read_string (channel,
                                         &(*params)[i].data.d_parasite.name, 1,
@@ -1833,6 +1876,20 @@ _gp_params_write (GIOChannel *channel,
             return;
           break;
 
+        case GP_PARAM_TYPE_ID_ARRAY:
+          if (! _gimp_wire_write_string (channel,
+                                         &params[i].data.d_id_array.type_name, 1,
+                                         user_data) ||
+              ! _gimp_wire_write_int32 (channel,
+                                        (const guint32 *) &params[i].data.d_id_array.size, 1,
+                                        user_data) ||
+              ! _gimp_wire_write_int32 (channel,
+                                        (const guint32 *) params[i].data.d_id_array.data,
+                                        params[i].data.d_id_array.size,
+                                        user_data))
+            return;
+          break;
+
         case GP_PARAM_TYPE_PARASITE:
           {
             GimpParasite *p = &params[i].data.d_parasite;
@@ -1909,6 +1966,11 @@ _gp_params_destroy (GPParam *params,
             }
           break;
 
+        case GP_PARAM_TYPE_ID_ARRAY:
+          g_free (params[i].data.d_id_array.type_name);
+          g_free (params[i].data.d_id_array.data);
+          break;
+
         case GP_PARAM_TYPE_PARASITE:
           if (params[i].data.d_parasite.name)
             g_free (params[i].data.d_parasite.name);
diff --git a/libgimpbase/gimpprotocol.h b/libgimpbase/gimpprotocol.h
index 35a45da96e..81405097ef 100644
--- a/libgimpbase/gimpprotocol.h
+++ b/libgimpbase/gimpprotocol.h
@@ -57,6 +57,7 @@ typedef enum
   GP_PARAM_DEF_TYPE_STRING,
   GP_PARAM_DEF_TYPE_COLOR,
   GP_PARAM_DEF_TYPE_ID,
+  GP_PARAM_DEF_TYPE_ID_ARRAY,
   GP_PARAM_DEF_TYPE_PARAM_DEF
 } GPParamDefType;
 
@@ -69,6 +70,7 @@ typedef enum
   GP_PARAM_TYPE_PARASITE,
   GP_PARAM_TYPE_ARRAY,
   GP_PARAM_TYPE_STRING_ARRAY,
+  GP_PARAM_TYPE_ID_ARRAY,
   GP_PARAM_TYPE_PARAM_DEF
 } GPParamType;
 
@@ -86,10 +88,12 @@ typedef struct _GPParamDefFloat    GPParamDefFloat;
 typedef struct _GPParamDefString   GPParamDefString;
 typedef struct _GPParamDefColor    GPParamDefColor;
 typedef struct _GPParamDefID       GPParamDefID;
+typedef struct _GPParamDefIDArray  GPParamDefIDArray;
 typedef struct _GPParamDefParamDef GPParamDefParamDef;
 typedef struct _GPParam            GPParam;
 typedef struct _GPParamArray       GPParamArray;
 typedef struct _GPParamStringArray GPParamStringArray;
+typedef struct _GPParamIDArray     GPParamIDArray;
 typedef struct _GPProcRun          GPProcRun;
 typedef struct _GPProcReturn       GPProcReturn;
 typedef struct _GPProcInstall      GPProcInstall;
@@ -175,7 +179,7 @@ struct _GPParamDefFloat
 
 struct _GPParamDefString
 {
-  gchar  *default_val;
+  gchar *default_val;
 };
 
 struct _GPParamDefColor
@@ -189,6 +193,11 @@ struct _GPParamDefID
   gint32 none_ok;
 };
 
+struct _GPParamDefIDArray
+{
+  gchar *type_name;
+};
+
 struct _GPParamDefParamDef
 {
   gchar *type_name;
@@ -213,6 +222,7 @@ struct _GPParamDef
     GPParamDefString   m_string;
     GPParamDefColor    m_color;
     GPParamDefID       m_id;
+    GPParamDefIDArray  m_id_array;
     GPParamDefParamDef m_param_def;
   } meta;
 };
@@ -229,6 +239,13 @@ struct _GPParamStringArray
   gchar   **data;
 };
 
+struct _GPParamIDArray
+{
+  gchar   *type_name;
+  guint32  size;
+  gint32  *data;
+};
+
 struct _GPParam
 {
   GPParamType  param_type;
@@ -243,6 +260,7 @@ struct _GPParam
     GimpParasite        d_parasite;
     GPParamArray        d_array;
     GPParamStringArray  d_string_array;
+    GPParamIDArray      d_id_array;
     GPParamDef          d_param_def;
   } data;
 };


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