diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-02-28 15:09:33 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-02-28 15:09:33 +0300 |
commit | 1aeb9294f4aad7f7cdc6aa1b946d0f92e413710f (patch) | |
tree | 80a76762321862eb871912b5c35ff6fcff9fd769 /source/blender/editors/object | |
parent | 9e9cb9fce9c74d32b4f7fad9fdbcbbc59acc53b9 (diff) |
WorkSpace: use existing objects mode on select
When selecting an object which is already visible in another window
use the mode from that workspace without performing any mode switching.
Diffstat (limited to 'source/blender/editors/object')
-rw-r--r-- | source/blender/editors/object/object_select.c | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index 620ee015724..5eab16cd727 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -126,20 +126,29 @@ void ED_object_base_activate(bContext *C, Base *base) WorkSpace *workspace = CTX_wm_workspace(C); - bool reset = true; - if (base) { - Object *ob_prev = OBACT(view_layer); - Object *ob_curr = base->object; - if (ob_prev != NULL) { - if (ob_prev->type == ob_curr->type) { - reset = false; - } - } - } - eObjectMode object_mode = workspace->object_mode; + eObjectMode object_mode_set = OB_MODE_OBJECT; + if (base && ED_workspace_object_mode_in_other_window( + CTX_wm_manager(C), workspace, base->object, + &object_mode_set)) { + /* Sync existing object mode with workspace. */ + workspace->object_mode = object_mode_set; + } + else { + /* Apply the workspaces more to the object (when possible). */ + bool reset = true; + if (base) { + Object *ob_prev = OBACT(view_layer); + Object *ob_curr = base->object; + if (ob_prev != NULL) { + if (ob_prev->type == ob_curr->type) { + reset = false; + } + } + } + Scene *scene = CTX_data_scene(C); Object *obact = base ? base->object : NULL; /* We don't know the previous active object in update. @@ -156,14 +165,14 @@ void ED_object_base_activate(bContext *C, Base *base) } FOREACH_OBJECT_END; } - } - workspace->object_mode = OB_MODE_OBJECT; + workspace->object_mode = OB_MODE_OBJECT; - view_layer->basact = base; + view_layer->basact = base; - if (reset == false) { - ED_object_mode_generic_enter(C, object_mode); + if (reset == false) { + ED_object_mode_generic_enter(C, object_mode); + } } if (base) { |