summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Henstridge <james@daa.com.au>2001-06-23 10:15:45 +0000
committerJames Henstridge <jamesh@src.gnome.org>2001-06-23 10:15:45 +0000
commit5963920662bde148852d89a56713f168a4c47a35 (patch)
tree9809f0be7d5f601ebec156213146bf0d8e77e654
parent9b322a660e816c67109ac6246afd774b799b3a9d (diff)
downloadpygobject-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.c12
-rw-r--r--gobject/pygobject.h5
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)