1 #ifndef _PYGOBJECT_PRIVATE_H_
2 #define _PYGOBJECT_PRIVATE_H_
5 # error "include pygobject.h or pygobject-private.h, but not both"
8 #define _INSIDE_PYGOBJECT_
11 #include "pyglib-python-compat.h"
13 #define PYGOBJECT_REGISTER_GTYPE(d, type, name, gtype) \
16 PYGLIB_REGISTER_TYPE(d, type, name); \
17 PyDict_SetItemString(type.tp_dict, "__gtype__", \
18 o=pyg_type_wrapper_new(gtype)); \
22 /* from gobjectmodule.c */
23 extern struct _PyGObject_Functions pygobject_api_functions;
26 #ifndef Py_CLEAR /* since Python 2.4 */
27 # define Py_CLEAR(op) \
30 PyObject *tmp = (PyObject *)(op); \
37 extern GType PY_TYPE_OBJECT;
39 extern GQuark pygboxed_type_key;
40 extern GQuark pygboxed_marshal_key;
41 extern GQuark pygenum_class_key;
42 extern GQuark pygflags_class_key;
43 extern GQuark pyginterface_type_key;
44 extern GQuark pyginterface_info_key;
45 extern GQuark pygobject_class_init_key;
46 extern GQuark pygobject_class_key;
47 extern GQuark pygobject_wrapper_key;
48 extern GQuark pygpointer_class_key;
49 extern GQuark pygobject_has_updated_constructor_key;
50 extern GQuark pygobject_instance_data_key;
51 extern GQuark pygobject_custom_key;
53 void pygobject_data_free (PyGObjectData *data);
54 void pyg_destroy_notify (gpointer user_data);
55 gboolean pyg_handler_marshal (gpointer user_data);
56 int pygobject_constructv (PyGObject *self,
58 GParameter *parameters);
60 PyObject *pyg_integer_richcompare(PyObject *v,
64 void pygobject_ref_float(PyGObject *self);
65 void pygobject_ref_sink(PyGObject *self);
68 extern PyTypeObject PyGTypeWrapper_Type;
70 PyObject *pyg_type_wrapper_new (GType type);
71 GType pyg_type_from_object_strict (PyObject *obj, gboolean strict);
72 GType pyg_type_from_object (PyObject *obj);
74 gint pyg_enum_get_value (GType enum_type, PyObject *obj, gint *val);
75 gint pyg_flags_get_value (GType flag_type, PyObject *obj, guint *val);
76 int pyg_pyobj_to_unichar_conv (PyObject* py_obj, void* ptr);
78 GClosure *pyg_closure_new(PyObject *callback, PyObject *extra_args, PyObject *swap_data);
79 void pyg_closure_set_exception_handler(GClosure *closure,
80 PyClosureExceptionHandler handler);
81 GClosure *pyg_signal_class_closure_get(void);
82 GClosure *gclosure_from_pyfunc(PyGObject *object, PyObject *func);
84 PyObject *pyg_object_descr_doc_get(void);
85 void pygobject_object_register_types(PyObject *d);
87 extern PyTypeObject *PyGObject_MetaType;
89 /* from pygobject.h */
90 extern PyTypeObject PyGObject_Type;
91 extern PyTypeObject PyGProps_Type;
92 extern PyTypeObject PyGPropsDescr_Type;
93 extern PyTypeObject PyGPropsIter_Type;
95 /* Data that belongs to the GObject instance, not the Python wrapper */
96 struct _PyGObjectData {
97 PyTypeObject *type; /* wrapper type for this instance */
101 void pygobject_register_class (PyObject *dict,
102 const gchar *type_name,
103 GType gtype, PyTypeObject *type,
105 void pygobject_register_wrapper (PyObject *self);
106 PyObject * pygobject_new (GObject *obj);
107 PyObject * pygobject_new_full (GObject *obj, gboolean steal, gpointer g_class);
108 void pygobject_sink (GObject *obj);
109 PyTypeObject *pygobject_lookup_class (GType gtype);
110 void pygobject_watch_closure (PyObject *self, GClosure *closure);
111 int pyg_type_register (PyTypeObject *class,
112 const gchar *type_name);
114 /* from pygboxed.c */
115 extern PyTypeObject PyGBoxed_Type;
117 void pyg_register_boxed (PyObject *dict, const gchar *class_name,
118 GType boxed_type, PyTypeObject *type);
119 PyObject * pyg_boxed_new (GType boxed_type, gpointer boxed,
120 gboolean copy_boxed, gboolean own_ref);
122 extern PyTypeObject PyGPointer_Type;
124 void pyg_register_pointer (PyObject *dict, const gchar *class_name,
125 GType pointer_type, PyTypeObject *type);
126 PyObject * pyg_pointer_new (GType pointer_type, gpointer pointer);
128 const gchar * pyg_constant_strip_prefix(const gchar *name, const gchar *strip_prefix);
132 PYGLIB_PyLongObject parent;
133 int zero_pad; /* must always be 0 */
137 extern PyTypeObject PyGFlags_Type;
139 #define PyGFlags_Check(x) (PyObject_IsInstance((PyObject *)x, (PyObject *)&PyGFlags_Type) && g_type_is_a(((PyGFlags*)x)->gtype, G_TYPE_FLAGS))
141 extern PyObject * pyg_flags_add (PyObject * module,
142 const char * type_name,
143 const char * strip_prefix,
145 extern PyObject * pyg_flags_from_gtype (GType gtype,
149 #define PyGEnum_Check(x) (PyObject_IsInstance((PyObject *)x, (PyObject *)&PyGEnum_Type) && g_type_is_a(((PyGFlags*)x)->gtype, G_TYPE_ENUM))
152 PYGLIB_PyLongObject parent;
153 int zero_pad; /* must always be 0 */
157 extern PyTypeObject PyGEnum_Type;
159 extern PyObject * pyg_enum_add (PyObject * module,
160 const char * type_name,
161 const char * strip_prefix,
163 extern PyObject * pyg_enum_from_gtype (GType gtype,
167 extern gboolean pyg_gtype_is_custom (GType gtype);
170 extern PyTypeObject PyGObjectWeakRef_Type;
172 static inline PyGObjectData *
173 pyg_object_peek_inst_data(GObject *obj)
175 return ((PyGObjectData *)
176 g_object_get_qdata(obj, pygobject_instance_data_key));
179 gboolean pygobject_prepare_construct_properties (GObjectClass *class,
182 GParameter **params);
183 /* Defined by PYGLIB_MODULE_START */
184 extern PyObject *pyglib__gobject_module_create (void);
186 #endif /*_PYGOBJECT_PRIVATE_H_*/