diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-04-01 12:03:25 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-04-01 12:03:25 +0300 |
commit | b65ea517eb932bde950bde51979c6a3fd258efa8 (patch) | |
tree | 8f3a291a7e1778bb3af45cdb1d98a621efbd1a7d /source/blender/editors/object/object_modes.c | |
parent | 916c91bd08933d596eaca3e369467daf7964612e (diff) | |
parent | 473f17b3d557adbb06b89e0a186be48a0129086d (diff) |
Merge branch 'master' into blender2.8
- Undo that changes modes currently asserts,
since undo is now screen data.
Most likely we will change how object mode and workspaces work
since it's not practical/maintainable at the moment.
- Removed view_layer from particle settings
(wasn't needed and complicated undo).
Diffstat (limited to 'source/blender/editors/object/object_modes.c')
-rw-r--r-- | source/blender/editors/object/object_modes.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/source/blender/editors/object/object_modes.c b/source/blender/editors/object/object_modes.c index 33b9ea49ec0..25795e75fef 100644 --- a/source/blender/editors/object/object_modes.c +++ b/source/blender/editors/object/object_modes.c @@ -152,6 +152,48 @@ void ED_object_mode_toggle(bContext *C, eObjectMode mode) } } + +/* Wrapper for operator */ +void ED_object_mode_set(bContext *C, eObjectMode mode) +{ +#if 0 + wmOperatorType *ot = WM_operatortype_find("OBJECT_OT_mode_set", false); + PointerRNA ptr; + + WM_operator_properties_create_ptr(&ptr, ot); + RNA_enum_set(&ptr, "mode", mode); + RNA_boolean_set(&ptr, "toggle", false); + WM_operator_name_call_ptr(C, ot, WM_OP_EXEC_DEFAULT, &ptr); + WM_operator_properties_free(&ptr); +#else + const WorkSpace *workspace = CTX_wm_workspace(C); + Object *ob = CTX_data_active_object(C); + if (ob == NULL) { + return; + } + if (workspace->object_mode == mode) { + /* pass */ + } + else if (workspace->object_mode != OB_MODE_OBJECT) { + if (ob && (workspace->object_mode & mode) == 0) { + /* needed so we don't do undo pushes. */ + wmWindowManager *wm = CTX_wm_manager(C); + wm->op_undo_depth++; + ED_object_mode_toggle(C, mode); + wm->op_undo_depth--; + } + } + else { + /* needed so we don't do undo pushes. */ + wmWindowManager *wm = CTX_wm_manager(C); + wm->op_undo_depth++; + ED_object_mode_toggle(C, workspace->object_mode); + wm->op_undo_depth--; + + } +#endif +} + /** \} */ /* -------------------------------------------------------------------- */ |