summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gi/types.py9
-rw-r--r--gobject/__init__.py16
2 files changed, 18 insertions, 7 deletions
diff --git a/gi/types.py b/gi/types.py
index 9b250b16..210fdc1c 100644
--- a/gi/types.py
+++ b/gi/types.py
@@ -232,6 +232,15 @@ class GObjectMeta(gobject.GObjectMeta, MetaClassHelper):
def mro(cls):
return mro(cls)
+ def _must_register_type(cls, namespace):
+ ## don't register the class if already registered
+ if '__gtype__' in namespace:
+ return False
+
+ # Do not register a new GType for the overrides, as this would sort of
+ # defeat the purpose of overrides...
+ return not cls.__module__.startswith('gi.overrides.')
+
def mro(C):
"""Compute the class precedence list (mro) according to C3
diff --git a/gobject/__init__.py b/gobject/__init__.py
index 1858d188..a9522a63 100644
--- a/gobject/__init__.py
+++ b/gobject/__init__.py
@@ -101,17 +101,19 @@ class GObjectMeta(type):
prop.setter(self, value)
cls.do_set_property = obj_set_property
- def _type_register(cls, namespace):
+ def _must_register_type(cls, namespace):
## don't register the class if already registered
if '__gtype__' in namespace:
- return
+ return False
- # Do not register a new GType for the overrides, as this would sort of
- # defeat the purpose of overrides...
- if cls.__module__.startswith('gi.overrides.'):
- return
+ return ('__gproperties__' in namespace or
+ '__gsignals__' in namespace or
+ '__gtype_name__' in namespace)
+
+ def _type_register(cls, namespace):
+ if cls._must_register_type(namespace):
+ type_register(cls, namespace.get('__gtype_name__'))
- type_register(cls, namespace.get('__gtype_name__'))
_gobject._install_metaclass(GObjectMeta)
del _gobject