summaryrefslogtreecommitdiff
path: root/plugins/pychrysalide/helpers.h
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/pychrysalide/helpers.h')
-rw-r--r--plugins/pychrysalide/helpers.h23
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 *, ...);