diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-10-29 09:32:15 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-10-29 09:36:39 +0300 |
commit | 0e268fb68b612e44a74a74631df206c8aaded97b (patch) | |
tree | 6ff83fb862fda50b7659ead6ec88ff9fa002114a /source/blender/editors | |
parent | cf1cf105a0d10fb4b99d9ff01fc75520dacaacfd (diff) |
Fix topbar tool UI being lost on undo
Using operators to the object mode was resetting the tool.
See: T56865
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/include/ED_object.h | 5 | ||||
-rw-r--r-- | source/blender/editors/object/object_modes.c | 16 | ||||
-rw-r--r-- | source/blender/editors/undo/memfile_undo.c | 2 |
3 files changed, 18 insertions, 5 deletions
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 1f58a6508b2..b71e7133c58 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -217,6 +217,7 @@ bool ED_object_mode_compat_test(const struct Object *ob, eObjectMode mode); bool ED_object_mode_compat_set(struct bContext *C, struct Object *ob, eObjectMode mode, struct ReportList *reports); void ED_object_mode_toggle(struct bContext *C, eObjectMode mode); void ED_object_mode_set(struct bContext *C, eObjectMode mode); +void ED_object_mode_exit(struct bContext *C); bool ED_object_mode_generic_enter( struct bContext *C, @@ -229,10 +230,6 @@ bool ED_object_mode_generic_has_data( struct Depsgraph *depsgraph, struct Object *ob); -bool ED_object_mode_generic_exists( - struct wmWindowManager *wm, struct Object *ob, - eObjectMode object_mode); - /* object_modifier.c */ enum { MODIFIER_APPLY_DATA = 1, diff --git a/source/blender/editors/object/object_modes.c b/source/blender/editors/object/object_modes.c index b9bfb44f680..ee075a94d29 100644 --- a/source/blender/editors/object/object_modes.c +++ b/source/blender/editors/object/object_modes.c @@ -38,6 +38,7 @@ #include "BKE_object.h" #include "BKE_paint.h" #include "BKE_report.h" +#include "BKE_layer.h" #include "WM_api.h" #include "WM_types.h" @@ -176,6 +177,21 @@ void ED_object_mode_set(bContext *C, eObjectMode mode) wm->op_undo_depth--; } +void ED_object_mode_exit(bContext *C) +{ + Depsgraph *depsgraph = CTX_data_depsgraph(C); + struct Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + ViewLayer *view_layer = CTX_data_view_layer(C); + FOREACH_OBJECT_BEGIN(view_layer, ob) + { + if (ob->mode & OB_MODE_ALL_MODE_DATA) { + ED_object_mode_generic_exit(bmain, depsgraph, scene, ob); + } + } + FOREACH_OBJECT_END; +} + /** \} */ /* -------------------------------------------------------------------- */ diff --git a/source/blender/editors/undo/memfile_undo.c b/source/blender/editors/undo/memfile_undo.c index d45470ab0a1..4b38ab282a0 100644 --- a/source/blender/editors/undo/memfile_undo.c +++ b/source/blender/editors/undo/memfile_undo.c @@ -83,7 +83,7 @@ static bool memfile_undosys_step_encode(struct bContext *C, UndoStep *us_p) static void memfile_undosys_step_decode(struct bContext *C, UndoStep *us_p, int UNUSED(dir)) { /* Loading the content will correctly switch into compatible non-object modes. */ - ED_object_mode_set(C, OB_MODE_OBJECT); + ED_object_mode_exit(C); MemFileUndoStep *us = (MemFileUndoStep *)us_p; BKE_memfile_undo_decode(us->data, C); |