fix: get undo handlers back to fix undo crashes

related to #32
This commit is contained in:
Swann
2020-05-28 12:59:05 +02:00
parent 8027e541c3
commit 258f27d96e

View File

@ -47,6 +47,7 @@ stop_modal_executor = False
modal_executor_queue = None modal_executor_queue = None
server_process = None server_process = None
def unregister_delayables(): def unregister_delayables():
global delayables, stop_modal_executor global delayables, stop_modal_executor
@ -200,6 +201,7 @@ class SessionStopOperator(bpy.types.Operator):
return {"FINISHED"} return {"FINISHED"}
class SessionKickOperator(bpy.types.Operator): class SessionKickOperator(bpy.types.Operator):
bl_idname = "session.kick" bl_idname = "session.kick"
bl_label = "Kick" bl_label = "Kick"
@ -226,11 +228,11 @@ class SessionKickOperator(bpy.types.Operator):
def invoke(self, context, event): def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self) return context.window_manager.invoke_props_dialog(self)
def draw(self, context): def draw(self, context):
row = self.layout row = self.layout
row.label(text=f" Do you really want to kick {self.user} ? ") row.label(text=f" Do you really want to kick {self.user} ? ")
class SessionPropertyRemoveOperator(bpy.types.Operator): class SessionPropertyRemoveOperator(bpy.types.Operator):
bl_idname = "session.remove_prop" bl_idname = "session.remove_prop"
bl_label = "remove" bl_label = "remove"
@ -498,6 +500,20 @@ classes = (
) )
@persistent
def sanitize_deps_graph(dummy):
"""sanitize deps graph
Temporary solution to resolve each node pointers after a Undo.
A future solution should be to avoid storing dataclock reference...
"""
global client
if client and client.state['STATE'] == STATE_ACTIVE:
for node_key in client.list():
client.get(node_key).resolve()
@persistent @persistent
def load_pre_handler(dummy): def load_pre_handler(dummy):
@ -507,9 +523,6 @@ def load_pre_handler(dummy):
bpy.ops.session.stop() bpy.ops.session.stop()
@persistent @persistent
def update_client_frame(scene): def update_client_frame(scene):
if client and client.state['STATE'] == STATE_ACTIVE: if client and client.state['STATE'] == STATE_ACTIVE:
@ -523,12 +536,15 @@ def register():
for cls in classes: for cls in classes:
register_class(cls) register_class(cls)
bpy.app.handlers.undo_post.append(sanitize_deps_graph)
bpy.app.handlers.redo_post.append(sanitize_deps_graph)
bpy.app.handlers.load_pre.append(load_pre_handler) bpy.app.handlers.load_pre.append(load_pre_handler)
bpy.app.handlers.frame_change_pre.append(update_client_frame) bpy.app.handlers.frame_change_pre.append(update_client_frame)
def unregister(): def unregister():
global client global client
@ -540,9 +556,11 @@ def unregister():
for cls in reversed(classes): for cls in reversed(classes):
unregister_class(cls) unregister_class(cls)
bpy.app.handlers.undo_post.remove(sanitize_deps_graph)
bpy.app.handlers.redo_post.remove(sanitize_deps_graph)
bpy.app.handlers.load_pre.remove(load_pre_handler) bpy.app.handlers.load_pre.remove(load_pre_handler)
bpy.app.handlers.frame_change_pre.remove(update_client_frame) bpy.app.handlers.frame_change_pre.remove(update_client_frame)