diff options
author | Julian Eisel <eiseljulian@gmail.com> | 2017-12-01 17:47:24 +0300 |
---|---|---|
committer | Julian Eisel <eiseljulian@gmail.com> | 2017-12-01 18:15:30 +0300 |
commit | e8c15e0ed15f8369d0d0f706b4953fb64e357902 (patch) | |
tree | 0eb072454c535b438caf8eed3033d27b3c17e99b /source/blender/editors/object | |
parent | 983b1a34783e9600731b973ba52ecc8924bff169 (diff) |
Workspaces: Store an active view-layer per scene
Instead of storing a single active view-layer in the workspace, one is
stored for each scene the workspace showed before.
With this, some things become possible:
* Multiple windows in the same workspace but showing different scenes.
* Toggling back and forth scene keeps same active view-layer for each scene.
* Activating workspace which didn't show current scene before, the current view-layer is kept.
A necessary evil for this is that accessing view-layer and object mode
from .py can't be done via workspace directly anymore. It has to be done
through the window, so RNA can use the correct scene.
So instead of `workspace.view_layer`, it's `window.view_layer` now (same
with mode) even though it's still workspace data.
Fixes T53432.
Diffstat (limited to 'source/blender/editors/object')
-rw-r--r-- | source/blender/editors/object/object_edit.c | 8 | ||||
-rw-r--r-- | source/blender/editors/object/object_select.c | 3 |
2 files changed, 4 insertions, 7 deletions
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 804d0ed1f0d..5697c48d381 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -1516,15 +1516,13 @@ bool ED_object_mode_compat_set(bContext *C, Object *ob, int mode, ReportList *re { bool ok; if (!ELEM(ob->mode, mode, OB_MODE_OBJECT)) { - WorkSpace *workspace = CTX_wm_workspace(C); const char *opstring = object_mode_op_string(ob->mode); WM_operator_name_call(C, opstring, WM_OP_EXEC_REGION_WIN, NULL); #ifdef USE_WORKSPACE_MODE - BKE_workspace_object_mode_set(workspace, ob->mode); -#else - UNUSED_VARS(workspace); + BKE_workspace_object_mode_set(CTX_wm_workspace(C), CTX_data_scene(C), ob->mode); #endif + ok = ELEM(ob->mode, mode, OB_MODE_OBJECT); if (!ok) { wmOperatorType *ot = WM_operatortype_find(opstring, false); @@ -1648,7 +1646,7 @@ void ED_object_toggle_modes(bContext *C, int mode) #ifdef USE_WORKSPACE_MODE Object *ob = CTX_data_active_object(C); if (ob) { - BKE_workspace_object_mode_set(workspace, ob->mode); + BKE_workspace_object_mode_set(workspace, CTX_data_scene(C), ob->mode); } #endif } diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index 47e63cb43e5..552380cebdb 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -123,8 +123,7 @@ void ED_object_base_activate(bContext *C, Base *base) if (base) { #ifdef USE_WORKSPACE_MODE - WorkSpace *workspace = CTX_wm_workspace(C); - BKE_workspace_object_mode_set(workspace, base->object->mode); + BKE_workspace_object_mode_set(CTX_wm_workspace(C), CTX_data_scene(C), base->object->mode); #endif WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, view_layer); } |