From 965620802f464d083a89426d1e0dca692423e212 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sat, 21 Dec 2024 12:50:36 +0100
Subject: Rely on GObject introspection for creating new GTypes.

---
 plugins/pychrysalide/helpers.c | 85 +-----------------------------------------
 plugins/pychrysalide/helpers.h | 12 ++----
 2 files changed, 5 insertions(+), 92 deletions(-)

diff --git a/plugins/pychrysalide/helpers.c b/plugins/pychrysalide/helpers.c
index d361c3e..d7af92c 100644
--- a/plugins/pychrysalide/helpers.c
+++ b/plugins/pychrysalide/helpers.c
@@ -39,7 +39,6 @@
 
 #include <i18n.h>
 #include <common/extstr.h>
-#include <plugins/dt.h>
 
 
 #include "access.h"
@@ -506,67 +505,6 @@ bool register_python_module_object(PyObject *module, PyTypeObject *type)
 *                                                                             *
 *  Paramètres  : type  = type du nouvel objet à mettre en place.              *
 *                gbase = type de base natif.                                  *
-*                args  = éventuelle liste d'arguments.                        *
-*                kwds  = éventuel dictionnaire de valeurs mises à disposition.*
-*                                                                             *
-*  Description : Accompagne la création d'une instance dérivée en Python.     *
-*                                                                             *
-*  Retour      : Nouvel objet Python mis en place ou NULL en cas d'échec.     *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-PyObject *python_constructor_with_dynamic_gtype(PyTypeObject *type, GType gbase, PyObject *args, PyObject *kwds)
-{
-    PyObject *result;                       /* Objet à retourner           */
-    PyTypeObject *base;                     /* Type parent version Python  */
-    bool first_time;                        /* Evite les multiples passages*/
-    GType gtype;                            /* Nouveau type de processeur  */
-    bool status;                            /* Bilan d'un enregistrement   */
-
-    /* Validations diverses */
-
-    base = pygobject_lookup_class(gbase);
-
-    if (type == base)
-        goto simple_way;
-
-    /* Mise en place d'un type dédié */
-
-    first_time = (g_type_from_name(type->tp_name) == 0);
-
-    gtype = build_dynamic_type(gbase, type->tp_name, NULL, NULL, NULL);
-
-    if (first_time)
-    {
-        status = register_class_for_dynamic_pygobject(gtype, type);
-
-        if (!status)
-        {
-            result = NULL;
-            goto exit;
-        }
-
-    }
-
-    /* On crée, et on laisse ensuite la main à PyGObject_Type.tp_init() */
-
- simple_way:
-
-    result = PyType_GenericNew(type, args, kwds);
-
- exit:
-
-    return result;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : type  = type du nouvel objet à mettre en place.              *
-*                gbase = type de base natif.                                  *
 *                cinit = procédure d'initialisation de la classe associée.    *
 *                args  = éventuelle liste d'arguments.                        *
 *                kwds  = éventuel dictionnaire de valeurs mises à disposition.*
@@ -579,13 +517,10 @@ PyObject *python_constructor_with_dynamic_gtype(PyTypeObject *type, GType gbase,
 *                                                                             *
 ******************************************************************************/
 
-PyObject *python_abstract_constructor_with_dynamic_gtype(PyTypeObject *type, GType gbase, GClassInitFunc cinit, PyObject *args, PyObject *kwds)
+PyObject *python_abstract_constructor(PyTypeObject *type, GType gbase, GClassInitFunc cinit, PyObject *args, PyObject *kwds)
 {
     PyObject *result;                       /* Objet à retourner           */
     PyTypeObject *base;                     /* Type parent version Python  */
-    bool first_time;                        /* Evite les multiples passages*/
-    GType gtype;                            /* Nouveau type de processeur  */
-    bool status;                            /* Bilan d'un enregistrement   */
 
     /* Validations diverses */
 
@@ -598,24 +533,6 @@ PyObject *python_abstract_constructor_with_dynamic_gtype(PyTypeObject *type, GTy
         goto exit;
     }
 
-    /* Mise en place d'un type dédié */
-
-    first_time = (g_type_from_name(type->tp_name) == 0);
-
-    gtype = build_dynamic_type(gbase, type->tp_name, cinit, NULL, NULL);
-
-    if (first_time)
-    {
-        status = register_class_for_dynamic_pygobject(gtype, type);
-
-        if (!status)
-        {
-            result = NULL;
-            goto exit;
-        }
-
-    }
-
     /* On crée, et on laisse ensuite la main à PyGObject_Type.tp_init() */
 
     result = PyType_GenericNew(type, args, kwds);
diff --git a/plugins/pychrysalide/helpers.h b/plugins/pychrysalide/helpers.h
index cc82bba..f2dcdfc 100644
--- a/plugins/pychrysalide/helpers.h
+++ b/plugins/pychrysalide/helpers.h
@@ -152,14 +152,11 @@ bool register_python_module_object(PyObject *, PyTypeObject *);
  *
  * Cf. http://stackoverflow.com/questions/20432335/can-python-abstract-base-classes-inherit-from-c-extensions
  */
-#define APPLY_ABSTRACT_FLAG(tp) tp->tp_new = PyBaseObject_Type.tp_new
+#define APPLY_ABSTRACT_FLAG(tp) tp->tp_new = PyBaseObject_Type.tp_new // REMME
 
 
 /* Accompagne la création d'une instance dérivée en Python. */
-PyObject *python_constructor_with_dynamic_gtype(PyTypeObject *, GType, PyObject *, PyObject *);
-
-/* Accompagne la création d'une instance dérivée en Python. */
-PyObject *python_abstract_constructor_with_dynamic_gtype(PyTypeObject *, GType, GClassInitFunc, PyObject *, PyObject *);
+PyObject *python_abstract_constructor(PyTypeObject *, GType, GClassInitFunc, PyObject *, PyObject *);
 
 
 #define CREATE_DYN_CONSTRUCTOR(pyname, gbase)                                                       \
@@ -167,7 +164,7 @@ static PyObject *py_ ## pyname ## _new(PyTypeObject *, PyObject *, PyObject *);
 static PyObject *py_ ## pyname ## _new(PyTypeObject *type, PyObject *args, PyObject *kwds)          \
 {                                                                                                   \
     PyObject *result;                       /* Objet à retourner           */                       \
-    result = python_constructor_with_dynamic_gtype(type, gbase, args, kwds);                        \
+    result = PyType_GenericNew(type, args, kwds);                                                   \
     return result;                                                                                  \
 }
 
@@ -177,8 +174,7 @@ static PyObject *py_ ## pyname ## _new(PyTypeObject *, PyObject *, PyObject *);
 static PyObject *py_ ## pyname ## _new(PyTypeObject *type, PyObject *args, PyObject *kwds)          \
 {                                                                                                   \
     PyObject *result;                       /* Objet à retourner           */                       \
-    result = python_abstract_constructor_with_dynamic_gtype(type, gbase, (GClassInitFunc)cinit,     \
-                                                            args, kwds);                            \
+    result = python_abstract_constructor(type, gbase, (GClassInitFunc)cinit, args, kwds);           \
     return result;                                                                                  \
 }
 
-- 
cgit v0.11.2-87-g4458