From 5963920662bde148852d89a56713f168a4c47a35 Mon Sep 17 00:00:00 2001 From: James Henstridge Date: Sat, 23 Jun 2001 10:15:45 +0000 Subject: more fixups to use pyg_type_from_object. 2001-06-23 James Henstridge * 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. --- gobject/gobjectmodule.c | 12 ++++++++---- 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) -- cgit v1.2.1