diff options
author | James Henstridge <james@daa.com.au> | 2001-06-23 10:15:45 +0000 |
---|---|---|
committer | James Henstridge <jamesh@src.gnome.org> | 2001-06-23 10:15:45 +0000 |
commit | 5963920662bde148852d89a56713f168a4c47a35 (patch) | |
tree | 9809f0be7d5f601ebec156213146bf0d8e77e654 | |
parent | 9b322a660e816c67109ac6246afd774b799b3a9d (diff) | |
download | pygobject-5963920662bde148852d89a56713f168a4c47a35.tar.gz |
more fixups to use pyg_type_from_object.
2001-06-23 James Henstridge <james@daa.com.au>
* gobjectmodule.c (pyg_signal_new): more fixups to use
pyg_type_from_object.
* gtk/gtk.override (_wrap_gtk_accel_group_new): don't use
PyGtkAccelGroup_New (not sure why I am fixing this -- will change
soon anyway).
(_wrap_gtk_tree_store_set_value): use pyg_type_from_object here.
(_wrap_gtk_list_store_set_value): same here.
* codegen/argtypes.py (CustomBoxedArg): rename from BoxedArg.
(BoxedArg): new code for standardised PyGBoxed handling.
(ArgMatcher.register_custom_boxed): rename from register_boxed
(ArgMatcher.register_boxed): new function for PyGBoxed types.
(arg): use ArgMatcher.register_boxed to register GtkAccelGroup.
* pygobject.h (pyg_boxed_check): change macro to check against the
typecode, rather than python wrapper type.
-rw-r--r-- | gobject/gobjectmodule.c | 12 | ||||
-rw-r--r-- | gobject/pygobject.h | 5 |
2 files changed, 12 insertions, 5 deletions
diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c index 9e715635..d8ab589f 100644 --- a/gobject/gobjectmodule.c +++ b/gobject/gobjectmodule.c @@ -1897,7 +1897,7 @@ pyg_signal_new(PyObject *self, PyObject *args) PyObject *py_type; GSignalFlags signal_flags; GType return_type; - PyObject *py_param_types; + PyObject *py_return_type, *py_param_types; GType instance_type = 0; guint n_params, i; @@ -1906,12 +1906,15 @@ pyg_signal_new(PyObject *self, PyObject *args) guint signal_id; if (!PyArg_ParseTuple(args, "sOiiO:gobject.signal_new", &signal_name, - &py_type, &signal_flags, &return_type, + &py_type, &signal_flags, &py_return_type, &py_param_types)) return NULL; instance_type = pyg_type_from_object(py_type); if (!instance_type) return NULL; + return_type = pyg_type_from_object(py_return_type); + if (!return_type) + return NULL; if (!PySequence_Check(py_param_types)) { PyErr_SetString(PyExc_TypeError, "argument 5 must be a sequence of GType codes"); @@ -1922,8 +1925,8 @@ pyg_signal_new(PyObject *self, PyObject *args) for (i = 0; i < n_params; i++) { PyObject *item = PySequence_GetItem(py_param_types, i); - param_types[i] = (GType) PyInt_AsLong(item); - if (PyErr_Occurred()) { + param_types[i] = pyg_type_from_object(item); + if (param_types[i] == 0) { PyErr_Clear(); Py_DECREF(item); PyErr_SetString(PyExc_TypeError, @@ -1974,6 +1977,7 @@ static struct _PyGObject_Functions functions = { pyg_register_interface, + &PyGBoxed_Type, pyg_register_boxed, pyg_boxed_new, }; diff --git a/gobject/pygobject.h b/gobject/pygobject.h index 271ba4dc..10a9bf47 100644 --- a/gobject/pygobject.h +++ b/gobject/pygobject.h @@ -26,7 +26,7 @@ typedef struct { } PyGBoxed; #define pyg_boxed_get(v,t) ((t *)((PyGBoxed *)(v))->boxed) -#define pyg_boxed_check(v,base) (ExtensionClassSubclassInstance_Check(v,base)) +#define pyg_boxed_check(v,typecode) (ExtensionClassSubclassInstance_Check(v, &PyGBoxed_Type) && ((PyGBoxed *)(v))->gtype == typecode) struct _PyGObject_Functions { void (* register_class)(PyObject *dict, const gchar *class_name, @@ -43,10 +43,12 @@ struct _PyGObject_Functions { int (* to_func)(GValue *value, PyObject *obj)); int (* value_from_pyobject)(GValue *value, PyObject *obj); PyObject *(* value_as_pyobject)(const GValue *value); + void (* register_interface)(PyObject *dict, const gchar *class_name, GType (* get_type)(void), PyExtensionClass *ec); + PyExtensionClass *boxed_type; void (* register_boxed)(PyObject *dict, const gchar *class_name, GType boxed_type, PyExtensionClass *ec); PyObject *(* boxed_new)(GType boxed_type, gpointer boxed, @@ -72,6 +74,7 @@ struct _PyGObject_Functions *_PyGObject_API; #define pyg_value_from_pyobject (_PyGObject_API->value_from_pyobject) #define pyg_value_as_pyobject (_PyGObject_API->value_as_pyobject) #define pyg_register_interface (_PyGObject_API->register_interface) +#define PyGBoxed_Type (*_PyGObject_API->boxed_type) #define pyg_register_boxed (_PyGObject_API->register_boxed) #define pyg_boxed_new (_PyGObject_API->boxed_new) |