Index: tests/test_interface.py
===================================================================
--- tests/test_interface.py	(révision 677)
+++ tests/test_interface.py	(copie de travail)
@@ -2,7 +2,7 @@
 
 import testmodule
 from common import gobject, testhelper
-from gobject import GObject, GInterface
+from gobject import GObject, GInterface, GError
 import gobject
 
 GUnknown = gobject.type_from_name("TestUnknown")
@@ -31,6 +31,12 @@
     def do_iface_method(self):
         self.called = True
 
+	err = gobject.GError
+	err.message = "Test conversion between exception and GError"
+	err.code = 1
+	err.domain = ""
+	raise err
+
 gobject.type_register(MyObject)
 
 
@@ -43,6 +49,6 @@
 
     def testImplementInterface(self):
         m = MyObject()
-        m.iface_method()
+        self.assertRaises(gobject.GError, m.iface_method)
         self.assertEqual(m.called, True)
 
Index: tests/test-unknown.c
===================================================================
--- tests/test-unknown.c	(révision 677)
+++ tests/test-unknown.c	(copie de travail)
@@ -53,7 +53,7 @@
   return gtype;
 }
 
-void test_unknown_iface_method (TestInterface *iface)
+void test_unknown_iface_method (TestInterface *iface, GError **err)
 {
 }
 
@@ -105,9 +105,9 @@
                                                         G_PARAM_READWRITE));
 }
 
-void test_interface_iface_method (TestInterface *instance)
+void test_interface_iface_method (TestInterface *instance, GError **err)
 {
   TestInterfaceIface *iface = TEST_INTERFACE_GET_IFACE (instance);
 
-  (* iface->iface_method) (instance);
+  (* iface->iface_method) (instance, err);
 }
Index: tests/test-unknown.h
===================================================================
--- tests/test-unknown.h	(révision 677)
+++ tests/test-unknown.h	(copie de travail)
@@ -27,7 +27,7 @@
 {
   GTypeInterface g_iface;
   /* VTable */
-  void (* iface_method) (TestInterface *iface);
+  void (* iface_method) (TestInterface *iface, GError **err);
 };
 
 #define TEST_TYPE_INTERFACE            (test_interface_get_type ())
@@ -37,4 +37,4 @@
 
 GType test_interface_get_type (void);
 
-void test_interface_iface_method (TestInterface *iface);
+void test_interface_iface_method (TestInterface *iface, GError **err);
Index: tests/testhelpermodule.c
===================================================================
--- tests/testhelpermodule.c	(révision 677)
+++ tests/testhelpermodule.c	(copie de travail)
@@ -92,12 +92,15 @@
 _wrap_test_interface_iface_method(PyGObject *self, PyObject *args, PyObject *kwargs)
 {
     static char *kwlist[] = { NULL };
+    GError *err = NULL;
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs,":", kwlist))
         return NULL;
     
-    test_interface_iface_method(TEST_INTERFACE(self->obj));
-    
+    test_interface_iface_method(TEST_INTERFACE(self->obj), &err);
+    if (pyg_error_check(&err))
+        return NULL;	    
+
     Py_INCREF(Py_None);
     return Py_None;
 }
@@ -165,6 +168,7 @@
   TestInterfaceIface *iface;
   static char *kwlist[] = { "self", NULL };
   PyGObject *self;
+  GError *err = NULL;
 
   if (!PyArg_ParseTupleAndKeywords(args, kwargs,"O!:TestInterface.iface_method", kwlist, &PyTestInterface_Type, &self))
     return NULL;
@@ -172,12 +176,14 @@
   iface = g_type_interface_peek(g_type_class_peek(pyg_type_from_object(cls)),
 				TEST_TYPE_INTERFACE);
   if (iface->iface_method)
-    iface->iface_method(TEST_INTERFACE(self->obj));
+    iface->iface_method(TEST_INTERFACE(self->obj), &err);
   else {
     PyErr_SetString(PyExc_NotImplementedError,
 		    "interface method TestInterface.iface_method not implemented");
     return NULL;
   }
+  if (pyg_error_check(&err))
+    return NULL;	    
   Py_INCREF(Py_None);
   return Py_None;
 }
@@ -229,7 +235,7 @@
 
 
 static void
-_wrap_TestInterface__proxy_do_iface_method(TestInterface *self)
+_wrap_TestInterface__proxy_do_iface_method(TestInterface *self, GError **err)
 {
     PyGILState_STATE __py_state;
     PyObject *py_self;
@@ -256,6 +262,13 @@
         return;
     }
     py_retval = PyObject_CallObject(py_method, py_args);
+    if (pyg_gerror_exception_check(err)) {
+        if (PyErr_Occurred())
+            PyErr_Print();
+        Py_DECREF(py_self);
+	pyg_gil_state_release(__py_state);
+	return;
+    }
     if (!py_retval) {
         if (PyErr_Occurred())
             PyErr_Print();
