summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gi/types.py5
-rw-r--r--tests/test_gi.py19
2 files changed, 22 insertions, 2 deletions
diff --git a/gi/types.py b/gi/types.py
index e32bb72..87dbe16 100644
--- a/gi/types.py
+++ b/gi/types.py
@@ -116,7 +116,7 @@ class GObjectMeta(gobject.GObjectMeta, MetaClassHelper):
super(GObjectMeta, cls).__init__(name, bases, dict_)
# Avoid touching anything else than the base class.
- if cls.__name__ != cls.__info__.get_name():
+ if cls.__info__.get_g_type().pytype is not None:
return;
cls._setup_methods()
@@ -157,7 +157,8 @@ class StructMeta(type, MetaClassHelper):
super(StructMeta, cls).__init__(name, bases, dict_)
# Avoid touching anything else than the base class.
- if cls.__name__ != cls.__info__.get_name():
+ g_type = cls.__info__.get_g_type()
+ if g_type != gobject.TYPE_INVALID and g_type.pytype is not None:
return;
cls._setup_fields()
diff --git a/tests/test_gi.py b/tests/test_gi.py
index e8654b6..2d9c002 100644
--- a/tests/test_gi.py
+++ b/tests/test_gi.py
@@ -1422,6 +1422,25 @@ class TestGObject(unittest.TestCase):
# self.assertEquals(object_.__grefcount__, 1)
+class TestPythonGObject(unittest.TestCase):
+
+ class Object(TestGI.Object):
+ __gtype_name__ = "Object"
+
+ def method(self):
+ # Don't call super, which asserts that self.int == 42.
+ pass
+
+ def test_object(self):
+ self.assertTrue(issubclass(self.Object, TestGI.Object))
+
+ object_ = self.Object(int = 42)
+ self.assertTrue(isinstance(object_, self.Object))
+
+ def test_object_method(self):
+ self.Object(int = 0).method()
+
+
class TestMultiOutputArgs(unittest.TestCase):
def test_int_out_out(self):