summaryrefslogtreecommitdiff
path: root/libglademodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'libglademodule.c')
-rw-r--r--libglademodule.c38
1 files changed, 32 insertions, 6 deletions
diff --git a/libglademodule.c b/libglademodule.c
index 00509dd4..f461048c 100644
--- a/libglademodule.c
+++ b/libglademodule.c
@@ -32,9 +32,22 @@ static void connect_one(const gchar *handler_name, GtkObject *obj,
gpointer user_data) {
PyObject *callback = user_data;
- if (connect_object)
- g_warning("connect object not supported -- doing normal connect");
- Py_INCREF(callback);
+ if (connect_object) {
+ PyObject *func, *extra, *other;
+
+ other = PyGtk_New(connect_object);
+ if (PyTuple_Check(callback)) {
+ func = PyTuple_GetItem(callback, 0);
+ extra = PyTuple_GetItem(callback, 1);
+ Py_INCREF(func);
+ Py_INCREF(extra);
+ callback = Py_BuildValue("(OOO)", func, extra, other);
+ } else {
+ Py_INCREF(callback);
+ callback = Py_BuildValue("(O()O)", callback, other);
+ }
+ } else
+ Py_INCREF(callback);
gtk_signal_connect_full(obj, signal_name, NULL,
(GtkCallbackMarshal)PyGtk_CallbackMarshal,
@@ -56,9 +69,22 @@ static void connect_many(const gchar *handler_name, GtkObject *obj,
if (!PyCallable_Check(callback))
return;
- if (connect_object)
- g_warning("connect object not supported -- doing normal connect");
- Py_INCREF(callback);
+ if (connect_object) {
+ PyObject *func, *extra, *other;
+
+ other = PyGtk_New(connect_object);
+ if (PyTuple_Check(callback)) {
+ func = PyTuple_GetItem(callback, 0);
+ extra = PyTuple_GetItem(callback, 1);
+ Py_INCREF(func);
+ Py_INCREF(extra);
+ callback = Py_BuildValue("(OOO)", func, extra, other);
+ } else {
+ Py_INCREF(callback);
+ callback = Py_BuildValue("(O()O)", callback, other);
+ }
+ } else
+ Py_INCREF(callback);
gtk_signal_connect_full(obj, signal_name, NULL,
(GtkCallbackMarshal)PyGtk_CallbackMarshal,