[pygobject/gsoc2009: 133/160] Fix structures constructor
- From: Simon van der Linden <svdlinden src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [pygobject/gsoc2009: 133/160] Fix structures constructor
- Date: Fri, 14 Aug 2009 21:34:55 +0000 (UTC)
commit 6f23ea0da3bea8079f3b228502bbae7070139b99
Author: Simon van der Linden <svdlinden src gnome org>
Date: Tue Aug 11 23:15:05 2009 +0200
Fix structures constructor
gi/gimodule.c | 2 +-
gi/module.py | 4 +-
gi/pygi-argument.c | 41 +++++--
gi/pygi-argument.h | 3 +-
gi/pygi-info.c | 298 +++++++++++++++++++++++++++++++++-------------------
gi/pygi.h | 8 +-
gi/types.py | 18 +---
gobject/pygboxed.c | 2 +-
8 files changed, 235 insertions(+), 141 deletions(-)
---
diff --git a/gi/gimodule.c b/gi/gimodule.c
index d9a3372..f5e44c3 100644
--- a/gi/gimodule.c
+++ b/gi/gimodule.c
@@ -124,7 +124,7 @@ static PyMethodDef _pygi_functions[] = {
struct PyGI_API PyGI_API = {
pygi_type_find_by_gi_info,
- pygi_boxed_new
+ pygi_boxed_new_from_type
};
PyMODINIT_FUNC
diff --git a/gi/module.py b/gi/module.py
index a06db4e..943d14a 100644
--- a/gi/module.py
+++ b/gi/module.py
@@ -39,7 +39,7 @@ from ._gi import \
StructInfo
from .types import \
GObjectMeta, \
- GBoxedMeta, \
+ StructMeta, \
Function
repository = Repository.get_default()
@@ -107,7 +107,7 @@ class DynamicModule(object):
metaclass = GObjectMeta
elif isinstance(info, StructInfo):
bases = (GBoxed,)
- metaclass = GBoxedMeta
+ metaclass = StructMeta
else:
raise NotImplementedError(info)
diff --git a/gi/pygi-argument.c b/gi/pygi-argument.c
index 8145109..dfd3118 100644
--- a/gi/pygi-argument.c
+++ b/gi/pygi-argument.c
@@ -946,12 +946,16 @@ array_item_error:
break;
}
- if (object == Py_None) {
- arg.v_pointer = NULL;
- break;
+ arg.v_pointer = pyg_boxed_get(object, void);
+
+ if (g_type_is_a(type, G_TYPE_BOXED)) {
+ if (transfer == GI_TRANSFER_EVERYTHING) {
+ arg.v_pointer = g_boxed_copy(type, arg.v_pointer);
+ }
+ } else if (transfer == GI_TRANSFER_EVERYTHING) {
+ PyErr_SetString(PyExc_RuntimeError, "non-boxed types ownership cannot be transferred");
}
- arg.v_pointer = pyg_boxed_get(object, void);
break;
}
case GI_INFO_TYPE_OBJECT:
@@ -1167,7 +1171,8 @@ hash_table_release:
PyObject *
_pygi_argument_to_object (GArgument *arg,
- GITypeInfo *type_info)
+ GITypeInfo *type_info,
+ GITransfer transfer)
{
GITypeTag type_tag;
PyObject *object;
@@ -1280,6 +1285,7 @@ _pygi_argument_to_object (GArgument *arg,
{
GArray *array;
GITypeInfo *item_type_info;
+ GITransfer item_transfer;
gsize i;
array = arg->v_pointer;
@@ -1292,12 +1298,14 @@ _pygi_argument_to_object (GArgument *arg,
item_type_info = g_type_info_get_param_type(type_info, 0);
g_assert(item_type_info != NULL);
+ item_transfer = transfer == GI_TRANSFER_CONTAINER ? GI_TRANSFER_NOTHING : transfer;
+
for(i = 0; i < array->len; i++) {
GArgument item;
PyObject *py_item;
item = _g_array_index(array, GArgument, i);
- py_item = _pygi_argument_to_object(&item, item_type_info);
+ py_item = _pygi_argument_to_object(&item, item_type_info, item_transfer);
if (py_item == NULL) {
Py_CLEAR(object);
_PyGI_ERROR_PREFIX("Item %zu: ", i);
@@ -1327,7 +1335,7 @@ _pygi_argument_to_object (GArgument *arg,
case GI_INFO_TYPE_STRUCT:
{
GType type;
- PyObject *py_type = NULL;
+ PyObject *py_type;
/* Handle special cases first. */
type = g_registered_type_info_get_g_type((GIRegisteredTypeInfo *)info);
@@ -1335,6 +1343,11 @@ _pygi_argument_to_object (GArgument *arg,
object = pyg_value_as_pyobject(arg->v_pointer, FALSE);
g_value_unset(arg->v_pointer);
break;
+ } else if (!g_type_is_a(type, G_TYPE_BOXED)) {
+ if (transfer == GI_TRANSFER_EVERYTHING) {
+ PyErr_SetString(PyExc_RuntimeError, "non-boxed types ownership cannot be transferred");
+ break;
+ }
}
py_type = pygi_type_find_by_gi_info(info);
@@ -1342,7 +1355,7 @@ _pygi_argument_to_object (GArgument *arg,
break;
}
- object = pygi_boxed_new((PyTypeObject *)py_type, arg->v_pointer, TRUE /* FIXME */);
+ object = pygi_boxed_new_from_type((PyTypeObject *)py_type, arg->v_pointer, transfer == GI_TRANSFER_EVERYTHING);
Py_DECREF(py_type);
@@ -1379,6 +1392,7 @@ _pygi_argument_to_object (GArgument *arg,
GSList *list;
gsize length;
GITypeInfo *item_type_info;
+ GITransfer item_transfer;
gsize i;
list = arg->v_pointer;
@@ -1392,13 +1406,15 @@ _pygi_argument_to_object (GArgument *arg,
item_type_info = g_type_info_get_param_type(type_info, 0);
g_assert(item_type_info != NULL);
+ item_transfer = transfer == GI_TRANSFER_CONTAINER ? GI_TRANSFER_NOTHING : transfer;
+
for (i = 0; list != NULL; list = g_slist_next(list), i++) {
GArgument item;
PyObject *py_item;
item.v_pointer = list->data;
- py_item = _pygi_argument_to_object(&item, item_type_info);
+ py_item = _pygi_argument_to_object(&item, item_type_info, item_transfer);
if (py_item == NULL) {
Py_CLEAR(object);
_PyGI_ERROR_PREFIX("Item %zu: ", i);
@@ -1415,6 +1431,7 @@ _pygi_argument_to_object (GArgument *arg,
{
GITypeInfo *key_type_info;
GITypeInfo *value_type_info;
+ GITransfer item_transfer;
GHashTableIter hash_table_iter;
GArgument key;
GArgument value;
@@ -1430,18 +1447,20 @@ _pygi_argument_to_object (GArgument *arg,
value_type_info = g_type_info_get_param_type(type_info, 1);
g_assert(value_type_info != NULL);
+ item_transfer = transfer == GI_TRANSFER_CONTAINER ? GI_TRANSFER_NOTHING : transfer;
+
g_hash_table_iter_init(&hash_table_iter, (GHashTable *)arg->v_pointer);
while (g_hash_table_iter_next(&hash_table_iter, &key.v_pointer, &value.v_pointer)) {
PyObject *py_key;
PyObject *py_value;
int retval;
- py_key = _pygi_argument_to_object(&key, key_type_info);
+ py_key = _pygi_argument_to_object(&key, key_type_info, item_transfer);
if (py_key == NULL) {
break;
}
- py_value = _pygi_argument_to_object(&value, value_type_info);
+ py_value = _pygi_argument_to_object(&value, value_type_info, item_transfer);
if (py_value == NULL) {
Py_DECREF(py_key);
break;
diff --git a/gi/pygi-argument.h b/gi/pygi-argument.h
index c5abda5..59458fc 100644
--- a/gi/pygi-argument.h
+++ b/gi/pygi-argument.h
@@ -49,7 +49,8 @@ GArgument _pygi_argument_from_object (PyObject *object,
GITransfer transfer);
PyObject* _pygi_argument_to_object (GArgument *arg,
- GITypeInfo *type_info);
+ GITypeInfo *type_info,
+ GITransfer transfer);
void _pygi_argument_release (GArgument *arg,
diff --git a/gi/pygi-info.c b/gi/pygi-info.c
index 24f705d..965d490 100644
--- a/gi/pygi-info.c
+++ b/gi/pygi-info.c
@@ -777,12 +777,67 @@ _wrap_g_function_info_invoke (PyGIBaseInfo *self,
/* Convert the return value. */
if (is_constructor) {
- PyTypeObject *type;
+ PyTypeObject *py_type;
+ GIBaseInfo *info;
+ GIInfoType info_type;
+ GITransfer transfer;
g_assert(n_py_args > 0);
- type = (PyTypeObject *)PyTuple_GET_ITEM(py_args, 0);
+ py_type = (PyTypeObject *)PyTuple_GET_ITEM(py_args, 0);
+
+ info = g_type_info_get_interface(return_type_info);
+ g_assert(info != NULL);
+
+ info_type = g_base_info_get_type(info);
+
+ g_base_info_unref(info);
+
+ transfer = g_callable_info_get_caller_owns((GICallableInfo *)self->info);
+
+ switch (info_type) {
+ case GI_INFO_TYPE_UNION:
+ PyErr_SetString(PyExc_NotImplementedError, "creating unions is not supported yet");
+ /* TODO */
+ goto return_;
+ case GI_INFO_TYPE_STRUCT:
+ {
+ GType type;
+
+ type = g_registered_type_info_get_g_type((GIRegisteredTypeInfo *)info);
+
+ if (transfer == GI_TRANSFER_EVERYTHING && !g_type_is_a(type, G_TYPE_BOXED)) {
+ gboolean is_simple;
- return_value = pygobject_new_from_type(type, return_arg.v_pointer, TRUE);
+ is_simple = _pygi_g_struct_info_is_simple((GIStructInfo *)info);
+
+ if (is_simple) {
+ PyErr_Format(PyExc_TypeError,
+ "cannot create '%s' instances; non-boxed simple structures do not accept specific constructors",
+ py_type->tp_name);
+ /* TODO */
+ goto return_;
+ }
+ }
+ return_value = pygi_boxed_new_from_type(py_type, return_arg.v_pointer, transfer == GI_TRANSFER_EVERYTHING);
+ break;
+ }
+ case GI_INFO_TYPE_OBJECT:
+ return_value = pygobject_new_from_type(py_type, return_arg.v_pointer, TRUE);
+ break;
+ case GI_INFO_TYPE_INTERFACE:
+ /* Isn't instantiable. */
+ default:
+ /* Other types don't have methods. */
+ g_assert_not_reached();
+ }
+
+ _pygi_argument_release(&return_arg, return_type_info, transfer,
+ GI_DIRECTION_OUT);
+
+ if (return_value == NULL) {
+ /* TODO */
+ goto return_;
+ }
} else {
GITransfer transfer;
@@ -798,17 +853,14 @@ _wrap_g_function_info_invoke (PyGIBaseInfo *self,
return_arg.v_pointer = array;
}
- return_value = _pygi_argument_to_object(&return_arg, return_type_info);
+ transfer = g_callable_info_get_caller_owns((GICallableInfo *)self->info);
+
+ return_value = _pygi_argument_to_object(&return_arg, return_type_info, transfer);
if (return_value == NULL) {
/* TODO */
goto return_;
}
- transfer = g_callable_info_get_caller_owns((GICallableInfo *)self->info);
-
- _pygi_argument_release(&return_arg, return_type_info, transfer,
- GI_DIRECTION_OUT);
-
if (return_type_tag == GI_TYPE_TAG_ARRAY
&& transfer == GI_TRANSFER_NOTHING) {
/* We created a #GArray, so free it. */
@@ -882,7 +934,7 @@ _wrap_g_function_info_invoke (PyGIBaseInfo *self,
/* Convert the argument. */
PyObject *obj;
- obj = _pygi_argument_to_object(args[i], arg_type_infos[i]);
+ obj = _pygi_argument_to_object(args[i], arg_type_infos[i], transfer);
if (obj == NULL) {
/* TODO */
goto return_;
@@ -1371,182 +1423,210 @@ static PyObject *
_wrap_g_field_info_get_value (PyGIBaseInfo *self,
PyObject *args)
{
- PyObject *retval;
+ PyObject *instance;
GIBaseInfo *container_info;
GIInfoType container_info_type;
+ gpointer pointer;
GITypeInfo *field_type_info;
GArgument value;
- PyObject *object;
- gpointer buffer;
+ PyObject *py_value = NULL;
- retval = NULL;
-
- if (!PyArg_ParseTuple(args, "O:FieldInfo.get_value", &object)) {
+ if (!PyArg_ParseTuple(args, "O:FieldInfo.get_value", &instance)) {
return NULL;
}
container_info = g_base_info_get_container(self->info);
- container_info_type = g_base_info_get_type(container_info);
+ g_assert(container_info != NULL);
- field_type_info = g_field_info_get_type((GIFieldInfo *)self->info);
+ /* Check the instance. */
+ if (!_pygi_g_registered_type_info_check_object((GIRegisteredTypeInfo *)container_info, TRUE, instance)) {
+ _PyGI_ERROR_PREFIX("argument 1: ");
+ return NULL;
+ }
- if (container_info_type == GI_INFO_TYPE_STRUCT
- || container_info_type == GI_INFO_TYPE_BOXED) {
- buffer = pyg_boxed_get(object, void);
- if (buffer == NULL) {
- goto return_;
- }
- } else {
- buffer = pygobject_get(object);
+ /* Get the pointer to the container. */
+ container_info_type = g_base_info_get_type(container_info);
+ switch (container_info_type) {
+ case GI_INFO_TYPE_UNION:
+ PyErr_SetString(PyExc_NotImplementedError, "getting a field from an union is not supported yet");
+ return NULL;
+ case GI_INFO_TYPE_STRUCT:
+ pointer = pyg_boxed_get(instance, void);
+ break;
+ case GI_INFO_TYPE_OBJECT:
+ pointer = pygobject_get(instance);
+ break;
+ default:
+ /* Other types don't have fields. */
+ g_assert_not_reached();
}
+ /* Get the field's value. */
+ field_type_info = g_field_info_get_type((GIFieldInfo *)self->info);
+
/* A few types are not handled by g_field_info_get_field, so do it here. */
if (!g_type_info_is_pointer(field_type_info)
&& g_type_info_get_tag(field_type_info) == GI_TYPE_TAG_INTERFACE) {
GIBaseInfo *info;
+ GIInfoType info_type;
if (!(g_field_info_get_flags((GIFieldInfo *)self->info) & GI_FIELD_IS_READABLE)) {
- PyErr_SetString(PyExc_RuntimeError, "Field is not readable");
- goto return_;
+ PyErr_SetString(PyExc_RuntimeError, "field is not readable");
+ goto out;
}
- info = g_type_info_get_interface (field_type_info);
- switch(g_base_info_get_type(info))
- {
+ info = g_type_info_get_interface(field_type_info);
+
+ info_type = g_base_info_get_type(info);
+
+ g_base_info_unref(info);
+
+ switch(info_type) {
+ case GI_INFO_TYPE_UNION:
+ PyErr_SetString(PyExc_NotImplementedError, "getting an union is not supported yet");
+ goto out;
case GI_INFO_TYPE_STRUCT:
{
gsize offset;
- gsize size;
offset = g_field_info_get_offset((GIFieldInfo *)self->info);
- size = g_struct_info_get_size((GIStructInfo *)info);
- g_assert(size > 0);
- value.v_pointer = g_try_malloc(size);
- if (value.v_pointer == NULL) {
- PyErr_SetString(PyExc_MemoryError, "Failed to allocate memory");
- break;
- }
- g_memmove(value.v_pointer, buffer + offset, size);
+ value.v_pointer = pointer + offset;
- g_base_info_unref(info);
- goto g_argument_to_py_object;
+ goto argument_to_object;
}
- case GI_INFO_TYPE_UNION:
- case GI_INFO_TYPE_BOXED:
- /* TODO */
- g_assert_not_reached();
- break;
default:
/* Fallback. */
break;
}
-
- g_base_info_unref(info);
-
- if (PyErr_Occurred()) {
- goto return_;
- }
}
- if (!g_field_info_get_field((GIFieldInfo *)self->info, buffer, &value)) {
- PyErr_SetString(PyExc_RuntimeError, "Failed to get value for field");
- goto return_;
+ if (!g_field_info_get_field((GIFieldInfo *)self->info, pointer, &value)) {
+ PyErr_SetString(PyExc_RuntimeError, "unable to get the value");
+ goto out;
}
-g_argument_to_py_object:
- retval = _pygi_argument_to_object(&value, field_type_info);
+argument_to_object:
+ py_value = _pygi_argument_to_object(&value, field_type_info, GI_TRANSFER_NOTHING);
-return_:
+out:
g_base_info_unref((GIBaseInfo *)field_type_info);
- Py_XINCREF(retval);
- return retval;
+ return py_value;
}
static PyObject *
_wrap_g_field_info_set_value (PyGIBaseInfo *self,
PyObject *args)
{
- PyObject *object;
+ PyObject *instance;
PyObject *py_value;
- GArgument value;
- gpointer buffer;
GIBaseInfo *container_info;
GIInfoType container_info_type;
+ gpointer pointer;
GITypeInfo *field_type_info;
- PyObject *retval;
- gint check_retval;
-
- retval = NULL;
+ GArgument value;
+ PyObject *retval = NULL;
- if (!PyArg_ParseTuple(args, "OO:FieldInfo.set_value", &object, &py_value)) {
+ if (!PyArg_ParseTuple(args, "OO:FieldInfo.set_value", &instance, &py_value)) {
return NULL;
}
container_info = g_base_info_get_container(self->info);
- container_info_type = g_base_info_get_type(container_info);
+ g_assert(container_info != NULL);
- field_type_info = g_field_info_get_type((GIFieldInfo *)self->info);
+ /* Check the instance. */
+ if (!_pygi_g_registered_type_info_check_object((GIRegisteredTypeInfo *)container_info, TRUE, instance)) {
+ _PyGI_ERROR_PREFIX("argument 1: ");
+ return NULL;
+ }
- if (container_info_type == GI_INFO_TYPE_STRUCT
- || container_info_type == GI_INFO_TYPE_BOXED) {
- buffer = pyg_boxed_get(object, void);
- if (buffer == NULL) {
- goto return_;
- }
- } else {
- buffer = pygobject_get(object);
+ /* Get the pointer to the container. */
+ container_info_type = g_base_info_get_type(container_info);
+ switch (container_info_type) {
+ case GI_INFO_TYPE_UNION:
+ PyErr_SetString(PyExc_NotImplementedError, "setting a field in an union is not supported yet");
+ return NULL;
+ case GI_INFO_TYPE_STRUCT:
+ pointer = pyg_boxed_get(instance, void);
+ break;
+ case GI_INFO_TYPE_OBJECT:
+ pointer = pygobject_get(instance);
+ break;
+ default:
+ /* Other types don't have fields. */
+ g_assert_not_reached();
}
+ field_type_info = g_field_info_get_type((GIFieldInfo *)self->info);
+
/* Check the value. */
- check_retval = _pygi_g_type_info_check_object(field_type_info, TRUE, py_value);
+ {
+ gboolean retval;
- if (check_retval < 0) {
- goto return_;
- }
+ retval = _pygi_g_type_info_check_object(field_type_info, TRUE, py_value);
+ if (retval < 0) {
+ goto out;
+ }
- if (!check_retval) {
- _PyGI_ERROR_PREFIX("%s.set_value() argument 1: ",
- g_base_info_get_namespace(self->info));
- goto return_;
+ if (!retval) {
+ _PyGI_ERROR_PREFIX("argument 2: ");
+ goto out;
+ }
}
- value = _pygi_argument_from_object(py_value, field_type_info, GI_TRANSFER_NOTHING);
-
+ /* Set the field's value. */
/* A few types are not handled by g_field_info_set_field, so do it here. */
if (!g_type_info_is_pointer(field_type_info)
&& g_type_info_get_tag(field_type_info) == GI_TYPE_TAG_INTERFACE) {
GIBaseInfo *info;
+ GIInfoType info_type;
if (!(g_field_info_get_flags((GIFieldInfo *)self->info) & GI_FIELD_IS_WRITABLE)) {
- PyErr_SetString(PyExc_RuntimeError, "Field is not writable");
- goto return_;
+ PyErr_SetString(PyExc_RuntimeError, "field is not writable");
+ goto out;
}
info = g_type_info_get_interface(field_type_info);
- switch (g_base_info_get_type(info))
- {
+
+ info_type = g_base_info_get_type(info);
+
+ switch (info_type) {
+ case GI_INFO_TYPE_UNION:
+ PyErr_SetString(PyExc_NotImplementedError, "setting an union is not supported yet");
+ goto out;
case GI_INFO_TYPE_STRUCT:
{
+ gboolean is_simple;
gsize offset;
- gsize size;
+ gssize size;
+
+ is_simple = _pygi_g_struct_info_is_simple((GIStructInfo *)info);
+
+ if (!is_simple) {
+ PyErr_SetString(PyExc_TypeError,
+ "cannot set a structure which has no well-defined ownership transfer rules");
+ g_base_info_unref(info);
+ goto out;
+ }
+
+ value = _pygi_argument_from_object(py_value, field_type_info, GI_TRANSFER_NOTHING);
+ if (PyErr_Occurred()) {
+ g_base_info_unref(info);
+ goto out;
+ }
offset = g_field_info_get_offset((GIFieldInfo *)self->info);
size = g_struct_info_get_size((GIStructInfo *)info);
g_assert(size > 0);
- g_memmove(buffer + offset, value.v_pointer, size);
+ g_memmove(pointer + offset, value.v_pointer, size);
- retval = Py_None;
g_base_info_unref(info);
- goto return_;
+
+ retval = Py_None;
+ goto out;
}
- case GI_INFO_TYPE_UNION:
- case GI_INFO_TYPE_BOXED:
- /* TODO */
- g_assert_not_reached();
- break;
default:
/* Fallback. */
break;
@@ -1555,14 +1635,20 @@ _wrap_g_field_info_set_value (PyGIBaseInfo *self,
g_base_info_unref(info);
}
- if (!g_field_info_set_field((GIFieldInfo *)self->info, buffer, &value)) {
- PyErr_SetString(PyExc_RuntimeError, "Failed to set value for field");
- goto return_;
+ value = _pygi_argument_from_object(py_value, field_type_info, GI_TRANSFER_EVERYTHING);
+ if (PyErr_Occurred()) {
+ goto out;
+ }
+
+ if (!g_field_info_set_field((GIFieldInfo *)self->info, pointer, &value)) {
+ _pygi_argument_release(&value, field_type_info, GI_TRANSFER_NOTHING, GI_DIRECTION_IN);
+ PyErr_SetString(PyExc_RuntimeError, "unable to set value for field");
+ goto out;
}
retval = Py_None;
-return_:
+out:
g_base_info_unref((GIBaseInfo *)field_type_info);
Py_XINCREF(retval);
diff --git a/gi/pygi.h b/gi/pygi.h
index 0187ebc..7681fc5 100644
--- a/gi/pygi.h
+++ b/gi/pygi.h
@@ -47,9 +47,9 @@ struct PyGI_API {
PyObject* (*type_find_by_gi_info) (GIBaseInfo *info);
/* Boxed */
- PyObject* (*boxed_new) (PyTypeObject *type,
- gpointer pointer,
- gboolean own_pointer);
+ PyObject* (*boxed_new_from_type) (PyTypeObject *type,
+ gpointer pointer,
+ gboolean own_pointer);
};
@@ -61,7 +61,7 @@ static struct PyGI_API *PyGI_API = NULL;
#define pygi_type_find_by_gi_info (PyGI_API->type_find_by_gi_info)
/* Boxed */
-#define pygi_boxed_new (PyGI_API->boxed_new)
+#define pygi_boxed_new_from_type (PyGI_API->boxed_new_from_type)
static int
diff --git a/gi/types.py b/gi/types.py
index 7dfda04..2076e2e 100644
--- a/gi/types.py
+++ b/gi/types.py
@@ -42,18 +42,6 @@ def Function(info):
return function
-class Field(object):
-
- def __init__(self, info):
- self.info = info
-
- def __get__(self, instance, owner):
- return self.info.get_value(instance)
-
- def __set__(self, instance, value):
- return self.info.set_value(instance, value)
-
-
class MetaClassHelper(object):
def _setup_methods(cls):
@@ -94,7 +82,7 @@ class MetaClassHelper(object):
def _setup_fields(cls):
for field_info in cls.__info__.get_fields():
name = field_info.get_name().replace('-', '_')
- setattr(cls, name, Field(field_info))
+ setattr(cls, name, property(field_info.get_value, field_info.set_value))
class GObjectMeta(gobject.GObjectMeta, MetaClassHelper):
@@ -115,10 +103,10 @@ class GObjectMeta(gobject.GObjectMeta, MetaClassHelper):
cls._setup_fields()
-class GBoxedMeta(type, MetaClassHelper):
+class StructMeta(type, MetaClassHelper):
def __init__(cls, name, bases, dict_):
- super(GBoxedMeta, cls).__init__(name, bases, dict_)
+ super(StructMeta, cls).__init__(name, bases, dict_)
# Avoid touching anything else than the base class.
if cls.__name__ != cls.__info__.get_name():
diff --git a/gobject/pygboxed.c b/gobject/pygboxed.c
index 2b8e6de..c3dc744 100644
--- a/gobject/pygboxed.c
+++ b/gobject/pygboxed.c
@@ -205,7 +205,7 @@ pyg_boxed_new_ (PyTypeObject *type,
return NULL;
}
- return pygi_boxed_new(type, NULL, TRUE);
+ return pygi_boxed_new_from_type(type, NULL, TRUE);
}
#endif /* HAVE_PYGI_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]