diff options
Diffstat (limited to 'plugins/pychrysalide/helpers.h')
-rw-r--r-- | plugins/pychrysalide/helpers.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/plugins/pychrysalide/helpers.h b/plugins/pychrysalide/helpers.h index edc6686..7bc7577 100644 --- a/plugins/pychrysalide/helpers.h +++ b/plugins/pychrysalide/helpers.h @@ -89,12 +89,35 @@ bool register_python_module_object(PyObject *, PyTypeObject *); #define APPLY_ABSTRACT_FLAG(tp) tp->tp_new = PyBaseObject_Type.tp_new +/* Marque l'interdiction d'une instanciation depuis Python. */ +PyObject *no_python_constructor_allowed(PyTypeObject *, PyObject *, PyObject *); + /* Marque l'absence d'implémentation pour une méthode donnée. */ PyObject *not_yet_implemented_method(PyObject *, PyObject *); /* Définit dans le tas de Python un nouveau type. */ PyTypeObject *define_python_dynamic_type(const PyTypeObject *); + +/** + * pygobject_new() prend en compte les références flottantes au moment de la + * construction d'un objet Python. + * + * Et cela pose problème dans la mesure où on ne veut pas transférer à Python + * la propriété d'un objet, même si celui-ci a une référence flotante. + * + * Dans les faits, c'est toujours uniquement le cas pour les composants graphiques, + * puisque GtkWidget hérite de GInitiallyUnowned, qui force le décompte flottant + * dans g_initially_unowned_init(). + */ +#define new_pygobject_widget(o) \ + ({ \ + if (g_object_is_floating(o)) \ + g_object_ref_sink(o); \ + pygobject_new(G_OBJECT(o)); \ + }) + + /* Enregistre correctement une surcouche de conversion GObject. */ bool _register_class_for_pygobject(PyObject *, GType, PyTypeObject *, PyTypeObject *, ...); |