Imported Upstream version 3.21.0
[platform/upstream/python-gobject.git] / gi / pygobject-private.h
1 #ifndef _PYGOBJECT_PRIVATE_H_
2 #define _PYGOBJECT_PRIVATE_H_
3
4 #ifdef _PYGOBJECT_H_
5 #  error "include pygobject.h or pygobject-private.h, but not both"
6 #endif
7
8 #define _INSIDE_PYGOBJECT_
9 #include "pygobject.h"
10
11 #include "pyglib-python-compat.h"
12
13 #define PYGOBJECT_REGISTER_GTYPE(d, type, name, gtype)      \
14   {                                                         \
15     PyObject *o;                                            \
16     PYGLIB_REGISTER_TYPE(d, type, name);                    \
17     PyDict_SetItemString(type.tp_dict, "__gtype__",         \
18                          o=pyg_type_wrapper_new(gtype));    \
19     Py_DECREF(o);                                           \
20 }
21
22 /* from gobjectmodule.c */
23 extern struct _PyGObject_Functions pygobject_api_functions;
24
25
26 #ifndef Py_CLEAR /* since Python 2.4 */
27 # define Py_CLEAR(op)                           \
28         do {                                    \
29                 if (op) {                       \
30                         PyObject *tmp = (PyObject *)(op);       \
31                         (op) = NULL;            \
32                         Py_DECREF(tmp);         \
33                 }                               \
34         } while (0)
35 #endif
36
37 extern GType PY_TYPE_OBJECT;
38
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;
52
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,
57                                guint        n_parameters,
58                                GParameter  *parameters);
59
60 PyObject *pyg_integer_richcompare(PyObject *v,
61                                   PyObject *w,
62                                   int op);
63
64 void pygobject_ref_float(PyGObject *self);
65 void pygobject_ref_sink(PyGObject *self);
66
67 /* from pygtype.h */
68 extern PyTypeObject PyGTypeWrapper_Type;
69
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);
73
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);
77
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);
83
84 PyObject *pyg_object_descr_doc_get(void);
85 void pygobject_object_register_types(PyObject *d);
86
87 extern PyTypeObject *PyGObject_MetaType;
88
89 /* from pygobject.h */
90 extern PyTypeObject PyGObject_Type;
91 extern PyTypeObject PyGProps_Type;
92 extern PyTypeObject PyGPropsDescr_Type;
93 extern PyTypeObject PyGPropsIter_Type;
94
95   /* Data that belongs to the GObject instance, not the Python wrapper */
96 struct _PyGObjectData {
97     PyTypeObject *type; /* wrapper type for this instance */
98     GSList *closures;
99 };
100
101 void          pygobject_register_class   (PyObject *dict,
102                                           const gchar *type_name,
103                                           GType gtype, PyTypeObject *type,
104                                           PyObject *bases);
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);
113
114 /* from pygboxed.c */
115 extern PyTypeObject PyGBoxed_Type;
116
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);
121
122 extern PyTypeObject PyGPointer_Type;
123
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);
127
128 const gchar * pyg_constant_strip_prefix(const gchar *name, const gchar *strip_prefix);
129
130 /* pygflags */
131 typedef struct {
132     PYGLIB_PyLongObject parent;
133     int zero_pad; /* must always be 0 */
134     GType gtype;
135 } PyGFlags;
136
137 extern PyTypeObject PyGFlags_Type;
138
139 #define PyGFlags_Check(x) (PyObject_IsInstance((PyObject *)x, (PyObject *)&PyGFlags_Type) && g_type_is_a(((PyGFlags*)x)->gtype, G_TYPE_FLAGS))
140
141 extern PyObject * pyg_flags_add        (PyObject *   module,
142                                         const char * type_name,
143                                         const char * strip_prefix,
144                                         GType        gtype);
145 extern PyObject * pyg_flags_from_gtype (GType        gtype,
146                                         guint        value);
147
148 /* pygenum */
149 #define PyGEnum_Check(x) (PyObject_IsInstance((PyObject *)x, (PyObject *)&PyGEnum_Type) && g_type_is_a(((PyGFlags*)x)->gtype, G_TYPE_ENUM))
150
151 typedef struct {
152     PYGLIB_PyLongObject parent;
153     int zero_pad; /* must always be 0 */
154     GType gtype;
155 } PyGEnum;
156
157 extern PyTypeObject PyGEnum_Type;
158
159 extern PyObject * pyg_enum_add        (PyObject *   module,
160                                        const char * type_name,
161                                        const char * strip_prefix,
162                                        GType        gtype);
163 extern PyObject * pyg_enum_from_gtype (GType        gtype,
164                                        int          value);
165
166 /* pygtype.c */
167 extern gboolean pyg_gtype_is_custom (GType gtype);
168
169 /* pygobject.c */
170 extern PyTypeObject PyGObjectWeakRef_Type;
171
172 static inline PyGObjectData *
173 pyg_object_peek_inst_data(GObject *obj)
174 {
175     return ((PyGObjectData *)
176             g_object_get_qdata(obj, pygobject_instance_data_key));
177 }
178
179 gboolean        pygobject_prepare_construct_properties  (GObjectClass *class,
180                                                          PyObject *kwargs,
181                                                          guint *n_params,
182                                                          GParameter **params);
183 /* Defined by PYGLIB_MODULE_START */
184 extern PyObject *pyglib__gobject_module_create (void);
185
186 #endif /*_PYGOBJECT_PRIVATE_H_*/