summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Henstridge <james@daa.com.au>2000-11-08 15:37:47 +0000
committerJames Henstridge <jamesh@src.gnome.org>2000-11-08 15:37:47 +0000
commit4b9085e66649cdee646a44fc305e046a1a5622bf (patch)
treea49792b468dd2acda3213200cf9abe4765914666
parentd2739267f6146b1850f3ffd542d913edbd28a1b3 (diff)
downloadpygtk-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--ChangeLog13
-rw-r--r--codegen/argtypes.py8
-rw-r--r--gobject/gobjectmodule.c8
-rw-r--r--gobjectmodule.c8
-rw-r--r--gtk/gtk-types.c99
-rw-r--r--gtk/gtk.defs4
-rw-r--r--gtk/pygtk-private.h3
-rw-r--r--gtk/pygtk.h12
8 files changed, 138 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index c59589ff..edb59c1b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)