diff --git a/src/bonsai/bonsai/tool/blender.py b/src/bonsai/bonsai/tool/blender.py index cc6b7f5354..ac7ebf1302 100644 --- a/src/bonsai/bonsai/tool/blender.py +++ b/src/bonsai/bonsai/tool/blender.py @@ -285,9 +285,19 @@ class Blender(bonsai.core.tool.Blender): when in real life you can have a couple of those but should work for the most cases. """ area = cls.get_view3d_area() + assert area region = next(region for region in area.regions if region.type == "WINDOW") space = next(space for space in area.spaces if space.type == "VIEW_3D") context_override = {"area": area, "region": region, "space_data": space} + + # Need to override screen and window if area is from a different window. + screen: bpy.types.Scene = area.id_data + context = bpy.context + assert context + if context.screen != screen: + context_override["screen"] = screen + window = next(window for window in context.window_manager.windows if window.screen == screen) + context_override["window"] = window return context_override @classmethod diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 213d885572..e2708c8617 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -1889,7 +1889,7 @@ class Drawing(bonsai.core.tool.Drawing): subcontexts.append(context_filter) # Hide everything first, then selectively show. This is significantly faster. - with bpy.context.temp_override(area=next(a for a in bpy.context.screen.areas if a.type == "VIEW_3D")): + with bpy.context.temp_override(**tool.Blender.get_viewport_context()): bpy.ops.object.hide_view_set(unselected=False) bpy.ops.object.hide_view_set(unselected=True)