Skip to content

Commit

Permalink
Merge pull request #185 from Exairnous/improve-loop-animation-msgbus-…
Browse files Browse the repository at this point in the history
…handling

Improve/fix the loop animation message bus handling and handler registration.
  • Loading branch information
keianhzo authored Dec 23, 2022
2 parents dc0dfb4 + 0647d56 commit e08372a
Showing 1 changed file with 20 additions and 34 deletions.
54 changes: 20 additions & 34 deletions addons/io_hubs_addon/components/definitions/loop_animation.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from ..types import Category, PanelType, NodeType
from ..utils import redraw_component_ui

msgbus_owner = None
msgbus_owners = []


class TrackPropertyType(PropertyGroup):
Expand Down Expand Up @@ -81,42 +81,28 @@ def display_error(cls, layout, error):


def register_msgbus():
global msgbus_owner
global msgbus_owners

if msgbus_owner:
if msgbus_owners:
return

msgbus_owner = object()

bpy.msgbus.subscribe_rna(
key=(bpy.types.NlaTrack, "name"),
owner=msgbus_owner,
args=(bpy.context,),
notify=redraw_component_ui,
)

bpy.msgbus.subscribe_rna(
key=(bpy.types.NlaStrip, "name"),
owner=msgbus_owner,
args=(bpy.context,),
notify=redraw_component_ui,
)

bpy.msgbus.subscribe_rna(
key=(bpy.types.Action, "name"),
owner=msgbus_owner,
args=(bpy.context,),
notify=redraw_component_ui,
)
for animtype in [bpy.types.NlaTrack, bpy.types.NlaStrip, bpy.types.Action]:
owner = object()
msgbus_owners.append(owner)
bpy.msgbus.subscribe_rna(
key=(animtype, "name"),
owner=owner,
args=(bpy.context,),
notify=redraw_component_ui,
)


def unregister_msgbus():
global msgbus_owner
if not msgbus_owner:
return
global msgbus_owners

bpy.msgbus.clear_by_owner(msgbus_owner)
msgbus_owner = None
for owner in msgbus_owners:
bpy.msgbus.clear_by_owner(owner)
msgbus_owners.clear()


@persistent
Expand Down Expand Up @@ -673,9 +659,9 @@ def register():
if load_post not in bpy.app.handlers.load_post:
bpy.app.handlers.load_post.append(load_post)
if undo_redo_post not in bpy.app.handlers.undo_post:
bpy.app.handlers.load_post.append(undo_redo_post)
bpy.app.handlers.undo_post.append(undo_redo_post)
if undo_redo_post not in bpy.app.handlers.redo_post:
bpy.app.handlers.load_post.append(undo_redo_post)
bpy.app.handlers.redo_post.append(undo_redo_post)

register_msgbus()

Expand All @@ -691,9 +677,9 @@ def unregister():
if load_post in bpy.app.handlers.load_post:
bpy.app.handlers.load_post.remove(load_post)
if undo_redo_post in bpy.app.handlers.undo_post:
bpy.app.handlers.load_post.remove(undo_redo_post)
bpy.app.handlers.undo_post.remove(undo_redo_post)
if undo_redo_post in bpy.app.handlers.redo_post:
bpy.app.handlers.load_post.remove(undo_redo_post)
bpy.app.handlers.redo_post.remove(undo_redo_post)

unregister_msgbus()

Expand Down

0 comments on commit e08372a

Please sign in to comment.