diff options
author | James Henstridge <james@daa.com.au> | 2000-11-08 15:37:47 +0000 |
---|---|---|
committer | James Henstridge <jamesh@src.gnome.org> | 2000-11-08 15:37:47 +0000 |
commit | 4b9085e66649cdee646a44fc305e046a1a5622bf (patch) | |
tree | a49792b468dd2acda3213200cf9abe4765914666 | |
parent | d2739267f6146b1850f3ffd542d913edbd28a1b3 (diff) | |
download | pygtk-4b9085e66649cdee646a44fc305e046a1a5622bf.tar.gz |
add a special case for converting GObject -> G_OBJECT.
2000-11-08 James Henstridge <james@daa.com.au>
* codegen/argtypes.py (_conv_special_cases): add a special case
for converting GObject -> G_OBJECT.
* gobjectmodule.c (pygobject_connect*): g_signal_connect_closure
renaming.
* codegen/argtypes.py (arg): add GtkTreeIter support.
* gtk/gtk-types.c, gtk/pygtk.h, gtk/pygtk-private.h: add a
skeleton for the GtkTreeIter wrapper.
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | codegen/argtypes.py | 8 | ||||
-rw-r--r-- | gobject/gobjectmodule.c | 8 | ||||
-rw-r--r-- | gobjectmodule.c | 8 | ||||
-rw-r--r-- | gtk/gtk-types.c | 99 | ||||
-rw-r--r-- | gtk/gtk.defs | 4 | ||||
-rw-r--r-- | gtk/pygtk-private.h | 3 | ||||
-rw-r--r-- | gtk/pygtk.h | 12 |
8 files changed, 138 insertions, 17 deletions
@@ -1,3 +1,16 @@ +2000-11-08 James Henstridge <james@daa.com.au> + + * codegen/argtypes.py (_conv_special_cases): add a special case + for converting GObject -> G_OBJECT. + + * gobjectmodule.c (pygobject_connect*): g_signal_connect_closure + renaming. + + * codegen/argtypes.py (arg): add GtkTreeIter support. + + * gtk/gtk-types.c, gtk/pygtk.h, gtk/pygtk-private.h: add a + skeleton for the GtkTreeIter wrapper. + 2000-11-04 James Henstridge <james@daa.com.au> * TODO: todo file with a few items needed for the gtk 2.0 based diff --git a/codegen/argtypes.py b/codegen/argtypes.py index 02cf7c5a..c8aae799 100644 --- a/codegen/argtypes.py +++ b/codegen/argtypes.py @@ -4,6 +4,7 @@ import string import traceback _conv_special_cases = { + 'GObject': '_G_OBJECT', 'GtkCList': '_GTK_CLIST', 'GtkCTree': '_GTK_CTREE', 'GtkCTreePos': '_GTK_CTREE_POS', @@ -399,8 +400,8 @@ class AtomArg(IntArg): class GErrorArg(ArgType): def write_param(self, ptype, pname, pdflt, pnull, varlist, parselist, extracode, arglist): - arglist.append('NULL') - return '' + arglist.append('NULL') + return '' class ArgMatcher: def __init__(self): @@ -506,6 +507,9 @@ matcher.register_boxed('GdkDevice', 'PyGdkDevice_Type', matcher.register_boxed('GtkTextIter', 'PyGtkTextIter_Type', 'PyGtkTextIter_Get', 'PyGtkTextIter_New') matcher.register('const-GtkTextIter*', matcher.get('GtkTextIter*')) +matcher.register_boxed('GtkTreeIter', 'PyGtkTreeIter_Type', + 'PyGtkTreeIter_Get', 'PyGtkTreeIter_New') +matcher.register('const-GtkTreeIter*', matcher.get('GtkTreeIter*')) matcher.register('GdkAtom', AtomArg()) matcher.register('GError**', GErrorArg()) diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c index 1b2d7e6d..9790a9a5 100644 --- a/gobject/gobjectmodule.c +++ b/gobject/gobjectmodule.c @@ -778,7 +778,7 @@ pygobject_connect(PyGObject *self, PyObject *args) extra_args = PySequence_GetSlice(args, 2, len); if (extra_args == NULL) return NULL; - handlerid = g_signal_connect_closure(self->obj, sigid, 0, + handlerid = g_signal_connect_closure_by_id(self->obj, sigid, 0, pyg_closure_new(callback, extra_args, NULL), FALSE); return PyInt_FromLong(handlerid); } @@ -815,7 +815,7 @@ pygobject_connect_after(PyGObject *self, PyObject *args) extra_args = PySequence_GetSlice(args, 2, len); if (extra_args == NULL) return NULL; - handlerid = g_signal_connect_closure(self->obj, sigid, 0, + handlerid = g_signal_connect_closure_by_id(self->obj, sigid, 0, pyg_closure_new(callback, extra_args, NULL), TRUE); return PyInt_FromLong(handlerid); } @@ -852,7 +852,7 @@ pygobject_connect_object(PyGObject *self, PyObject *args) extra_args = PySequence_GetSlice(args, 3, len); if (extra_args == NULL) return NULL; - handlerid = g_signal_connect_closure(self->obj, sigid, 0, + handlerid = g_signal_connect_closure_by_id(self->obj, sigid, 0, pyg_closure_new(callback, extra_args, object), FALSE); return PyInt_FromLong(handlerid); } @@ -889,7 +889,7 @@ pygobject_connect_object_after(PyGObject *self, PyObject *args) extra_args = PySequence_GetSlice(args, 3, len); if (extra_args == NULL) return NULL; - handlerid = g_signal_connect_closure(self->obj, sigid, 0, + handlerid = g_signal_connect_closure_by_id(self->obj, sigid, 0, pyg_closure_new(callback, extra_args, object), TRUE); return PyInt_FromLong(handlerid); } diff --git a/gobjectmodule.c b/gobjectmodule.c index 1b2d7e6d..9790a9a5 100644 --- a/gobjectmodule.c +++ b/gobjectmodule.c @@ -778,7 +778,7 @@ pygobject_connect(PyGObject *self, PyObject *args) extra_args = PySequence_GetSlice(args, 2, len); if (extra_args == NULL) return NULL; - handlerid = g_signal_connect_closure(self->obj, sigid, 0, + handlerid = g_signal_connect_closure_by_id(self->obj, sigid, 0, pyg_closure_new(callback, extra_args, NULL), FALSE); return PyInt_FromLong(handlerid); } @@ -815,7 +815,7 @@ pygobject_connect_after(PyGObject *self, PyObject *args) extra_args = PySequence_GetSlice(args, 2, len); if (extra_args == NULL) return NULL; - handlerid = g_signal_connect_closure(self->obj, sigid, 0, + handlerid = g_signal_connect_closure_by_id(self->obj, sigid, 0, pyg_closure_new(callback, extra_args, NULL), TRUE); return PyInt_FromLong(handlerid); } @@ -852,7 +852,7 @@ pygobject_connect_object(PyGObject *self, PyObject *args) extra_args = PySequence_GetSlice(args, 3, len); if (extra_args == NULL) return NULL; - handlerid = g_signal_connect_closure(self->obj, sigid, 0, + handlerid = g_signal_connect_closure_by_id(self->obj, sigid, 0, pyg_closure_new(callback, extra_args, object), FALSE); return PyInt_FromLong(handlerid); } @@ -889,7 +889,7 @@ pygobject_connect_object_after(PyGObject *self, PyObject *args) extra_args = PySequence_GetSlice(args, 3, len); if (extra_args == NULL) return NULL; - handlerid = g_signal_connect_closure(self->obj, sigid, 0, + handlerid = g_signal_connect_closure_by_id(self->obj, sigid, 0, pyg_closure_new(callback, extra_args, object), TRUE); return PyInt_FromLong(handlerid); } diff --git a/gtk/gtk-types.c b/gtk/gtk-types.c index 70d8fc20..eba4f534 100644 --- a/gtk/gtk-types.c +++ b/gtk/gtk-types.c @@ -225,6 +225,22 @@ PyGtkTextIter_New(GtkTextIter *iter) return (PyObject *)self; } +PyObject * +PyGtkTreeIter_New(GtkTreeIter *iter) +{ + PyGtkTreeIter_Object *self; + + self = (PyGtkTreeIter_Object *)PyObject_NEW(PyGtkTreeIter_Object, + &PyGtkTreeIter_Type); + if (self == NULL) + return NULL; + if (iter) + self->iter = *iter; + else + memset(&self->iter, 0, sizeof(GtkTreeIter)); + return (PyObject *)self; +} + static void pygtk_accel_group_dealloc(PyGtkAccelGroup_Object *self) { @@ -3393,20 +3409,50 @@ pygtk_text_iter_forward_search(PyGtkTextIter_Object *self, PyObject *args) { gchar *str; gint visible_only, slice; - GtkTextIter match_start, match_end; + PyObject *py_limit = Py_None; + GtkTextIter match_start, match_end, *limit = NULL; - if (!PyArg_ParseTuple(args, "sii:GtkTextIter.forward_search", - &str, &visible_only, &slice)) + if (!PyArg_ParseTuple(args, "sii|O:GtkTextIter.forward_search", + &str, &visible_only, &slice, &py_limit)) return NULL; + if (PyGtkTextIter_Check(py_limit)) + limit = PyGtkTextIter_Get(py_limit); + else if (py_limit != Py_None) { + PyErr_SetString(PyExc_TypeError,"limit must be a GtkTextIter or None"); + return NULL; + } if (gtk_text_iter_forward_search(&self->iter, str, visible_only, slice, - &match_start, &match_end)) + &match_start, &match_end, limit)) return Py_BuildValue("(NN)", PyGtkTextIter_New(&match_start), PyGtkTextIter_New(&match_end)); Py_INCREF(Py_None); return Py_None; } -/* XXXX - gtk_text_iter_backward_search (doesn't seem to be implemented) */ +static PyObject * +pygtk_text_iter_backward_search(PyGtkTextIter_Object *self, PyObject *args) +{ + gchar *str; + gint visible_only, slice; + PyObject *py_limit = Py_None; + GtkTextIter match_start, match_end, *limit = NULL; + + if (!PyArg_ParseTuple(args, "sii|O:GtkTextIter.backward_search", + &str, &visible_only, &slice, &py_limit)) + return NULL; + if (PyGtkTextIter_Check(py_limit)) + limit = PyGtkTextIter_Get(py_limit); + else if (py_limit != Py_None) { + PyErr_SetString(PyExc_TypeError,"limit must be a GtkTextIter or None"); + return NULL; + } + if (gtk_text_iter_backward_search(&self->iter, str, visible_only, slice, + &match_start, &match_end, limit)) + return Py_BuildValue("(NN)", PyGtkTextIter_New(&match_start), + PyGtkTextIter_New(&match_end)); + Py_INCREF(Py_None); + return Py_None; +} static PyMethodDef pygtk_text_iter_methods[] = { { "copy", (PyCFunction)pygtk_text_iter_copy, METH_VARARGS }, @@ -3453,6 +3499,7 @@ static PyMethodDef pygtk_text_iter_methods[] = { { "forward_to_tag_toggle", (PyCFunction)pygtk_text_iter_forward_to_tag_toggle, METH_VARARGS }, { "backward_to_tag_toggle", (PyCFunction)pygtk_text_iter_backward_to_tag_toggle, METH_VARARGS }, { "forward_search", (PyCFunction)pygtk_text_iter_forward_search, METH_VARARGS }, + { "backward_search", (PyCFunction)pygtk_text_iter_backward_search, METH_VARARGS }, { NULL, NULL, 0 } }; @@ -3484,6 +3531,47 @@ PyTypeObject PyGtkTextIter_Type = { NULL }; +static void +pygtk_tree_iter_dealloc(PyGtkTreeIter_Object *self) +{ + PyMem_DEL(self); +} + +static int +pygtk_tree_iter_compare(PyGtkTreeIter_Object *self, PyGtkTreeIter_Object *v) +{ + if (self->iter.tree_node == v->iter.tree_node) return 0; + if (self->iter.tree_node > v->iter.tree_node) return -1; + return 1; +} +static long +pygtk_tree_iter_hash(PyGtkTreeIter_Object *self) +{ + return (long)self->iter.tree_node; +} + +PyTypeObject PyGtkTreeIter_Type = { + PyObject_HEAD_INIT(NULL) + 0, + "GtkTreeIter", + sizeof(PyGtkTreeIter_Object), + 0, + (destructor)pygtk_tree_iter_dealloc, + (printfunc)0, + (getattrfunc)0, + (setattrfunc)0, + (cmpfunc)pygtk_tree_iter_compare, + (reprfunc)0, + 0, + 0, + 0, + (hashfunc)pygtk_tree_iter_hash, + (ternaryfunc)0, + (reprfunc)0, + 0L,0L,0L,0L, + NULL +}; + /* marshalers for the boxed types. Uses uppercase notation so that * the macro below can automatically install them. */ static PyObject * @@ -3621,4 +3709,5 @@ _pygtk_register_boxed_types(PyObject *moddict) register_tp(GtkCTreeNode); register_tp(GdkDevice); register_tp2(GtkTextIter, GTK_TYPE_TEXT_ITER); + register_tp(GtkTreeIter); } diff --git a/gtk/gtk.defs b/gtk/gtk.defs index fdbe6fe2..71741d23 100644 --- a/gtk/gtk.defs +++ b/gtk/gtk.defs @@ -11100,7 +11100,7 @@ (method is_visible (of-object TextMark (Gtk)) - (c-name gtk_text_mark_is_visible) + (c-name gtk_text_mark_get_visible) (return-type gboolean) ) @@ -11149,7 +11149,7 @@ (of-object TextTag (Gtk)) (c-name gtk_text_tag_event) (return-type gint) - (parameter (type-and-name GtkObject* event_object)) + (parameter (type-and-name GObject* event_object)) (parameter (type-and-name GdkEvent* event)) (parameter (type-and-name const-GtkTextIter* iter)) ) diff --git a/gtk/pygtk-private.h b/gtk/pygtk-private.h index 6f4af0e9..1ba327c0 100644 --- a/gtk/pygtk-private.h +++ b/gtk/pygtk-private.h @@ -25,6 +25,7 @@ extern PyTypeObject PyGdkCursor_Type; extern PyTypeObject PyGtkCTreeNode_Type; extern PyTypeObject PyGdkDevice_Type; extern PyTypeObject PyGtkTextIter_Type; +extern PyTypeObject PyGtkTreeIter_Type; /* check the type of a PyObject */ #define PyGtkAccelGroup_Check(v) ((v)->ob_type == &PyGtkAccelGroup_Type) @@ -38,6 +39,7 @@ extern PyTypeObject PyGtkTextIter_Type; #define PyGtkCTreeNode_Check(v) ((v)->ob_type == &PyGtkCTreeNode_Type) #define PyGdkDevice_Check(v) ((v)->ob_type == &PyGdkDevice_Type) #define PyGtkTextIter_Check(v) ((v)->ob_type == &PyGtkTextIter_Type) +#define PyGtkTreeIter_Check(v) ((v)->ob_type == &PyGtkTreeIter_Type) /* constructors for PyObject wrappers ... */ PyObject *PyGtkAccelGroup_New(GtkAccelGroup *obj); @@ -51,6 +53,7 @@ PyObject *PyGdkCursor_New(GdkCursor *cursor); PyObject *PyGtkCTreeNode_New(GtkCTreeNode *node); PyObject *PyGdkDevice_New(GdkDevice *device); PyObject *PyGtkTextIter_New(GtkTextIter *iter); +PyObject *PyGtkTreeIter_New(GtkTreeIter *iter); /* miscelaneous functions */ void pygtk_block_threads(void); diff --git a/gtk/pygtk.h b/gtk/pygtk.h index dc82c5ce..4e93b5cc 100644 --- a/gtk/pygtk.h +++ b/gtk/pygtk.h @@ -62,6 +62,9 @@ struct _PyGtk_FunctionStruct { PyTypeObject *gtkTextIter_type; PyObject *(* gtkTextIter_new)(GtkTextIter *iter); + + PyTypeObject *gtkTreeIter_type; + PyObject *(* gtkTreeIter_new)(GtkTreeIter *iter); }; /* structure definitions for the various object types in PyGTK */ @@ -122,6 +125,11 @@ typedef struct { GtkTextIter iter; } PyGtkTextIter_Object; +typedef struct { + PyObject_HEAD + GtkTreeIter iter; +} PyGtkTreeIter_Object; + /* routines to get the C object value out of the PyObject wrapper */ #define PyGtkAccelGroup_Get(v) (((PyGtkAccelGroup_Object *)(v))->obj) #define PyGdkFont_Get(v) (((PyGdkFont_Object *)(v))->obj) @@ -134,6 +142,7 @@ typedef struct { #define PyGtkCTreeNode_Get(v) (((PyGtkCTreeNode_Object *)(v))->node) #define PyGdkDevice_Get(v) (((PyGdkDevice_Object *)(v))->obj) #define PyGtkTextIter_Get(v) (&((PyGtkTextIter_Object *)(v))->iter) +#define PyGtkTreeIter_Get(v) (&((PyGtkTreeIter_Object *)(v))->iter) /* this section is dependent on whether we are being included from gtkmodule.c * or not. A similar source level interface should be provided in both @@ -160,6 +169,7 @@ struct _PyGtk_FunctionStruct *_PyGtk_API; #define PyGtkCTreeNode_Type *(_PyGtk_API->gtkCTreeNode_type) #define PyGdkDevice_Type *(_PyGtk_API->gdkDevice_type) #define PyGtkTextIter_Type *(_PyGtk_API->gtkTextIter_type) +#define PyGtkTreeIter_Type *(_PyGtk_API->gtkTreeIter_type) /* type checking routines */ #define PyGtkAccelGroup_Check(v) ((v)->ob_type == _PyGtk_API->gtkAccelGroup_type) @@ -173,6 +183,7 @@ struct _PyGtk_FunctionStruct *_PyGtk_API; #define PyGtkCTreeNode_Check(v) ((v)->ob_type == _PyGtk_API->gtkCTreeNode_type) #define PyGdkDevice_Check(v) ((v)->ob_type == _PyGtk_API->gdkDevice_type) #define PyGtkTextIter_Check(v) ((v)->ob_type == _PyGtk_API->gtkTextIter_type) +#define PyGtkTreeIter_Check(v) ((v)->ob_type == _PyGtk_API->gtkTreeIter_type) /* type objects */ #define PyGtkAccelGroup_New (_PyGtk_API->gtkAccelGroup_new) @@ -186,6 +197,7 @@ struct _PyGtk_FunctionStruct *_PyGtk_API; #define PyGtkCTreeNode_New (_PyGtk_API->gtkCTreeNode_new) #define PyGdkDevice_New (_PyGtk_API->gdkDevice_new) #define PyGtkTextIter_New (_PyGtk_API->gtkTextIter_new) +#define PyGtkTreeIter_New (_PyGtk_API->gtkTreeIter_new) /* miscelaneous other functions */ #define pygtk_block_threads (_PyGtk_API->block_threads) |