diff options
author | James Henstridge <james@daa.com.au> | 2002-05-14 15:39:07 +0000 |
---|---|---|
committer | James Henstridge <jamesh@src.gnome.org> | 2002-05-14 15:39:07 +0000 |
commit | 91e98c231a72293d9dbe3c8bf2f1f2dc7b45481a (patch) | |
tree | 2b5cde94f0f934a4782abefa7c3760e2548d649e | |
parent | 81b3be1e2d0dacef68025a683ef71180ba930407 (diff) | |
download | pygobject-91e98c231a72293d9dbe3c8bf2f1f2dc7b45481a.tar.gz pygobject-91e98c231a72293d9dbe3c8bf2f1f2dc7b45481a.tar.xz pygobject-91e98c231a72293d9dbe3c8bf2f1f2dc7b45481a.zip |
add handler for G_TYPE_PARAM (fix bug #81695). (pyg_value_as_pyobject):
2002-05-14 James Henstridge <james@daa.com.au>
* pygtype.c (pyg_value_from_pyobject): add handler for
G_TYPE_PARAM (fix bug #81695).
(pyg_value_as_pyobject): same in this function.
-rw-r--r-- | gobject/gobjectmodule.c | 7 | ||||
-rw-r--r-- | gobject/pygobject-private.h | 10 | ||||
-rw-r--r-- | gobject/pygtype.c | 78 |
3 files changed, 54 insertions, 41 deletions
diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c index 1dc0e08..ce3059e 100644 --- a/gobject/gobjectmodule.c +++ b/gobject/gobjectmodule.c @@ -38,11 +38,6 @@ pyg_destroy_notify(gpointer user_data) /* -------------- GParamSpec objects ---------------------------- */ -typedef struct { - PyObject_HEAD - GParamSpec *pspec; -} PyGParamSpec; - static int pyg_param_spec_compare(PyGParamSpec *self, PyGParamSpec *v) { @@ -138,7 +133,7 @@ PyTypeObject PyGParamSpec_Type = { NULL }; -static PyObject * +PyObject * pyg_param_spec_new(GParamSpec *pspec) { PyGParamSpec *self; diff --git a/gobject/pygobject-private.h b/gobject/pygobject-private.h index b6d9135..acf13b0 100644 --- a/gobject/pygobject-private.h +++ b/gobject/pygobject-private.h @@ -24,6 +24,16 @@ GType PY_TYPE_OBJECT; void pyg_destroy_notify (gpointer user_data); +typedef struct { + PyObject_HEAD + GParamSpec *pspec; +} PyGParamSpec; +extern PyTypeObject PyGParamSpec_Type; +PyObject *pyg_param_spec_new(GParamSpec *pspec); + +#define PyGParamSpec_Check(v) (PyObject_TypeCheck(v, &PyGParamSpec_Type)) +#define PyGParamSpec_Get(v) (((PyGParamSpec *)v)->pspec) + /* from pygtype.h */ extern PyTypeObject PyGTypeWrapper_Type; diff --git a/gobject/pygtype.c b/gobject/pygtype.c index 84a0781..2075624 100644 --- a/gobject/pygtype.c +++ b/gobject/pygtype.c @@ -375,6 +375,22 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) return -1; } break; + case G_TYPE_ENUM: + { + gint val = 0; + if (pyg_enum_get_value(G_VALUE_TYPE(value), obj, &val) < 0) + return -1; + g_value_set_enum(value, val); + } + break; + case G_TYPE_FLAGS: + { + guint val = 0; + if (pyg_flags_get_value(G_VALUE_TYPE(value), obj, &val) < 0) + return -1; + g_value_set_flags(value, val); + } + break; case G_TYPE_FLOAT: g_value_set_float(value, PyFloat_AsDouble(obj)); if (PyErr_Occurred()) { @@ -400,30 +416,11 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) } Py_DECREF(tmp); break; - case G_TYPE_OBJECT: - { - PyTypeObject *type = pygobject_lookup_class(G_VALUE_TYPE(value)); - if (!PyObject_TypeCheck(obj, type)) { - return -1; - } - g_value_set_object(value, pygobject_get(obj)); - } - break; - case G_TYPE_ENUM: - { - gint val = 0; - if (pyg_enum_get_value(G_VALUE_TYPE(value), obj, &val) < 0) - return -1; - g_value_set_enum(value, val); - } - break; - case G_TYPE_FLAGS: - { - guint val = 0; - if (pyg_flags_get_value(G_VALUE_TYPE(value), obj, &val) < 0) - return -1; - g_value_set_flags(value, val); - } + case G_TYPE_POINTER: + if (PyCObject_Check(obj)) + g_value_set_pointer(value, PyCObject_AsVoidPtr(obj)); + else + return -1; break; case G_TYPE_BOXED: { @@ -442,12 +439,21 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) return -1; } break; - case G_TYPE_POINTER: - if (PyCObject_Check(obj)) - g_value_set_pointer(value, PyCObject_AsVoidPtr(obj)); + case G_TYPE_PARAM: + if (PyGParamSpec_Check(obj)) + g_value_set_param(value, PyCObject_AsVoidPtr(obj)); else return -1; break; + case G_TYPE_OBJECT: + { + PyTypeObject *type = pygobject_lookup_class(G_VALUE_TYPE(value)); + if (!PyObject_TypeCheck(obj, type)) { + return -1; + } + g_value_set_object(value, pygobject_get(obj)); + } + break; default: break; } @@ -512,6 +518,10 @@ pyg_value_as_pyobject(const GValue *value) else return PyLong_FromUnsignedLongLong(val); } + case G_TYPE_ENUM: + return PyInt_FromLong(g_value_get_enum(value)); + case G_TYPE_FLAGS: + return PyInt_FromLong(g_value_get_flags(value)); case G_TYPE_FLOAT: return PyFloat_FromDouble(g_value_get_float(value)); case G_TYPE_DOUBLE: @@ -525,12 +535,8 @@ pyg_value_as_pyobject(const GValue *value) Py_INCREF(Py_None); return Py_None; } - case G_TYPE_OBJECT: - return pygobject_new(g_value_get_object(value)); - case G_TYPE_ENUM: - return PyInt_FromLong(g_value_get_enum(value)); - case G_TYPE_FLAGS: - return PyInt_FromLong(g_value_get_flags(value)); + case G_TYPE_POINTER: + return PyCObject_FromVoidPtr(g_value_get_pointer(value), NULL); case G_TYPE_BOXED: { PyGBoxedMarshal *bm; @@ -545,8 +551,10 @@ pyg_value_as_pyobject(const GValue *value) return pyg_boxed_new(G_VALUE_TYPE(value), g_value_get_boxed(value), TRUE, TRUE); } - case G_TYPE_POINTER: - return PyCObject_FromVoidPtr(g_value_get_pointer(value), NULL); + case G_TYPE_PARAM: + return pyg_param_spec_new(g_value_get_param(value)); + case G_TYPE_OBJECT: + return pygobject_new(g_value_get_object(value)); default: break; } |