From e8150173e5f35daeda0e1983beaa29a8ec0dfebf Mon Sep 17 00:00:00 2001 From: James Henstridge Date: Fri, 8 Jun 2001 15:49:13 +0000 Subject: function to register a new boxed type ExtensionClass. (pyg_boxed_new): new 2001-06-08 James Henstridge * gobjectmodule.c (pyg_register_boxed): function to register a new boxed type ExtensionClass. (pyg_boxed_new): new function to create wrapper instances for a particular boxed type (given its typecode). 2001-06-07 James Henstridge * pygobject.h (pyg_boxed_get): add prototypes for a PyGBoxed type that will be used for all boxed types in pygtk (well, I can hope :) * gobjectmodule.c (pyg_register_interface): new function to register interfaces with. Makes sure I don't accidentally give the interface a parent class :). Also adds a __gtype__ class attribute similar to GObject classes. May also make interfaces subclasses of GInterface at some point. --- gobject/pygobject.h | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'gobject/pygobject.h') diff --git a/gobject/pygobject.h b/gobject/pygobject.h index 71b3b33..f2d15fe 100644 --- a/gobject/pygobject.h +++ b/gobject/pygobject.h @@ -15,9 +15,19 @@ typedef struct { PyObject *inst_dict; /* the instance dictionary -- must be last */ } PyGObject; -#define pygobject_get(v) (((PyGObject *)v)->obj) +#define pygobject_get(v) (((PyGObject *)(v))->obj) #define pygobject_check(v,base) (ExtensionClassSubclassInstance_Check(v,base)) +typedef struct { + PyObject_HEAD + gpointer boxed; + GType gtype; + gboolean free_on_dealloc; +} PyGBoxed; + +#define pyg_boxed_get(v,t) ((t *)((PyGBoxed *)(v))->boxed) +#define pyg_boxed_check(v,base) (ExtensionClassSubclassInstance_Check(v,base)) + struct _PyGObject_Functions { void (* register_class)(PyObject *dict, const gchar *class_name, GType (* get_type)(void), @@ -32,6 +42,14 @@ struct _PyGObject_Functions { int (* to_func)(GValue *value, PyObject *obj)); int (* value_from_pyobject)(GValue *value, PyObject *obj); PyObject *(* value_as_pyobject)(const GValue *value); + void (* register_interface)(PyObject *dict, const gchar *class_name, + GType (* get_type)(void), + PyExtensionClass *ec); + + void (* register_boxed)(PyObject *dict, const gchar *class_name, + GType boxed_type, PyExtensionClass *ec); + PyObject *(* boxed_new)(GType boxed_type, gpointer boxed, + gboolean copy_boxed, gboolean own_ref); }; #ifndef _INSIDE_PYGOBJECT_ @@ -51,6 +69,7 @@ struct _PyGObject_Functions *_PyGObject_API; #define pyg_boxed_register (_PyGObject_API->boxed_register) #define pyg_value_from_pyobject (_PyGObject_API->value_from_pyobject) #define pyg_value_as_pyobject (_PyGObject_API->value_as_pyobject) +#define pyg_register_interface (_PyGObject_API->register_interface) #define init_pygobject() { \ PyObject *gobject = PyImport_ImportModule("gobject"); \ -- cgit