summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Henstridge <james@daa.com.au>2002-05-14 15:39:07 +0000
committerJames Henstridge <jamesh@src.gnome.org>2002-05-14 15:39:07 +0000
commit91e98c231a72293d9dbe3c8bf2f1f2dc7b45481a (patch)
tree2b5cde94f0f934a4782abefa7c3760e2548d649e
parent81b3be1e2d0dacef68025a683ef71180ba930407 (diff)
downloadpygobject-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.c7
-rw-r--r--gobject/pygobject-private.h10
-rw-r--r--gobject/pygtype.c78
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;
}