diff options
Diffstat (limited to 'plugins/pychrysalide/helpers.c')
| -rw-r--r-- | plugins/pychrysalide/helpers.c | 58 | 
1 files changed, 58 insertions, 0 deletions
| diff --git a/plugins/pychrysalide/helpers.c b/plugins/pychrysalide/helpers.c index 320e40a..b04c801 100644 --- a/plugins/pychrysalide/helpers.c +++ b/plugins/pychrysalide/helpers.c @@ -37,6 +37,7 @@  #include <i18n.h>  #include <common/extstr.h> +#include <plugins/dt.h>  #include "access.h" @@ -509,6 +510,63 @@ bool register_python_module_object(PyObject *module, PyTypeObject *type)  *                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, PyObject *args, PyObject *kwds, PyTypeObject *base, GType base_gtype) +{ +    PyObject *result;                       /* Objet à retourner           */ +    bool first_time;                        /* Evite les multiples passages*/ +    GType gtype;                            /* Nouveau type de processeur  */ +    bool status;                            /* Bilan d'un enregistrement   */ + +    /* Validations diverses */ + +    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(base_gtype, type->tp_name, NULL, NULL, NULL); + +    if (first_time) +    { +        status = register_class_for_dynamic_pygobject(gtype, type, base); + +        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.               * +*                args = éventuelle liste d'arguments.                         * +*                kwds = éventuel dictionnaire de valeurs mises à disposition. * +*                                                                             *  *  Description : Marque l'interdiction d'une instanciation depuis Python.     *  *                                                                             *  *  Retour      : NULL pour la levée d'exception.                              * | 
