summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGian Mario Tagliaretti <gianmt@src.gnome.org>2007-07-26 21:25:53 +0000
committerGian Mario Tagliaretti <gianmt@src.gnome.org>2007-07-26 21:25:53 +0000
commitb40aa87208d4899b07e23f327a3786bd8c766124 (patch)
tree91f1f23f5db2a1b7a437e56309daeae205c76543
parentb1603f0a1a56e0af6c923bc4a53d000c0fa69c49 (diff)
downloadpygtk-b40aa87208d4899b07e23f327a3786bd8c766124.tar.gz
wrap GtkContainer do_forall by Paul Pogonyshev
svn path=/trunk/; revision=2862
-rw-r--r--ChangeLog10
-rw-r--r--gtk/gtkcontainer.override57
-rw-r--r--tests/test_container.py26
3 files changed, 93 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 244c183a..ee3ea7a8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2007-07-27 Paul Pogonyshev <pogonyshev@gmx.net>
+
+ reviewed by: Johan, Fix bug #389777
+
+ * tests/test_container.py (MyAlignment): New auxiliary widget class.
+ (ContainerTest.testSuperclassForAll): New test case.
+
+ * gtk/gtkcontainer.override (_wrap_GtkContainer__do_forall_callback)
+ (_wrap_GtkContainer__do_forall): New functions.
+
2007-07-26 Gian Mario Tagliaretti <gianmt@gnome.org>
reviewed by: gjc, Fix bug #460200
diff --git a/gtk/gtkcontainer.override b/gtk/gtkcontainer.override
index 17a2c8a5..7e07f42a 100644
--- a/gtk/gtkcontainer.override
+++ b/gtk/gtkcontainer.override
@@ -1082,3 +1082,60 @@ _wrap_GtkContainer__do_get_child_property(PyObject *cls, PyObject *args, PyObjec
g_value_unset(&value);
return py_value;
}
+
+%%
+override GtkContainer__do_forall kwargs
+
+typedef struct {
+ PyObject *callback;
+ PyObject *callback_data;
+} PyGtkContainerPyCallbackData;
+
+static void
+_wrap_GtkContainer__do_forall_callback(GtkWidget *child, PyGtkContainerPyCallbackData *data)
+{
+ PyObject *pychild = pygobject_new((GObject *) child);
+ PyObject *result;
+
+ result = PyObject_CallFunctionObjArgs(data->callback, pychild, data->callback_data, NULL);
+ /* Just discard it. */
+ Py_DECREF(result);
+}
+
+static PyObject *
+_wrap_GtkContainer__do_forall(PyObject *cls, PyObject *args, PyObject *kwargs)
+{
+ gpointer klass;
+ static char *kwlist[] = { "self", "include_internals", "callback", "callback_data", NULL };
+ PyGObject *self;
+ char include_internals;
+ PyObject *callback;
+ PyObject *callback_data = NULL;
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!bO|O:GtkContainer.forall", kwlist,
+ &PyGtkContainer_Type, &self,
+ &include_internals,
+ &callback, &callback_data))
+ return NULL;
+
+ klass = g_type_class_ref(pyg_type_from_object(cls));
+ if (GTK_CONTAINER_CLASS(klass)->forall) {
+ PyGtkContainerPyCallbackData *data = g_new(PyGtkContainerPyCallbackData, 1);
+ data->callback = callback;
+ data->callback_data = callback_data;
+
+ GTK_CONTAINER_CLASS(klass)->forall(GTK_CONTAINER(self->obj),
+ include_internals,
+ (GtkCallback)_wrap_GtkContainer__do_forall_callback,
+ data);
+ g_free(data);
+ g_type_class_unref(klass);
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+ else {
+ PyErr_SetString(PyExc_NotImplementedError, "virtual method GtkContainer.forall not implemented");
+ g_type_class_unref(klass);
+ return NULL;
+ }
+}
diff --git a/tests/test_container.py b/tests/test_container.py
index a970fa44..fa1f6411 100644
--- a/tests/test_container.py
+++ b/tests/test_container.py
@@ -41,6 +41,23 @@ MyContainer.install_child_property(1,
'Dumb Prop',
'Dumb Property for testing purposes',
'', gobject.PARAM_READWRITE))
+
+class MyAlignment(gtk.Alignment):
+
+ def __init__(self, caption):
+ self.caption = gtk.Label()
+ self.caption.set_markup('<b>%s</b>' % gobject.markup_escape_text(caption))
+
+ gtk.Alignment.__init__(self)
+
+ self.caption.set_parent(self)
+
+ def do_forall(self, include_internals, callback, callback_data):
+ callback(self.caption, callback_data)
+ gtk.Alignment.do_forall(self, include_internals, callback, callback_data)
+
+# FIXME: Why is it needed?
+gobject.type_register(MyAlignment)
class ContainerTest(unittest.TestCase):
@@ -52,5 +69,14 @@ class ContainerTest(unittest.TestCase):
obj.child_set_property(label, 'dumb_prop', v)
self.assertEqual(v, obj.child_get_property(label, 'dumb_prop'))
+ def testSuperclassForAll(self):
+ alignment = MyAlignment('test')
+ label = gtk.Label('foo')
+ alignment.add(label)
+ alignment.show_all()
+
+ self.assert_(label.flags() & gtk.VISIBLE)
+ self.assert_(alignment.caption.flags() & gtk.VISIBLE)
+
if __name__ == '__main__':
unittest.main()