diff --git a/registry.py b/registry.py index 70734cc..b0db828 100644 --- a/registry.py +++ b/registry.py @@ -7,7 +7,8 @@ _timer_registry: list[Callable[..., int | None]] = [] # BPY CLASSES def register_class(cls: type) -> type: - _bpy_class_registry.append(cls) + if cls not in _bpy_class_registry: + _bpy_class_registry.append(cls) return cls def get() -> list[type]: @@ -26,12 +27,22 @@ def get_class_by_name(name: str) -> type | None: return None def blender_register_classes(): - for module in get(): - bpy.utils.register_class(module) + for cls in _bpy_class_registry: + try: + bpy.utils.register_class(cls) + except Exception as e: + print(f"Nodeslicer: Failed to register {cls}: {e}") def blender_unregister_classes(): - for module in get(): - bpy.utils.unregister_class(module) + for cls in reversed(_bpy_class_registry): + try: + if hasattr(cls, "is_registered") and cls.is_registered: # type: ignore + bpy.utils.unregister_class(cls) + elif hasattr(cls, "bl_rna"): + # Fallback for classes that don't have is_registered (older Blender or certain types) + bpy.utils.unregister_class(cls) + except Exception as e: + print(f"Nodeslicer: Failed to unregister {cls}: {e}") # TIMERS def register_timer(clb: Callable[..., Any]):