Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/editors/include/ED_object.h1
-rw-r--r--source/blender/editors/object/object_select.c15
-rw-r--r--source/blender/editors/space_outliner/outliner_select.c6
3 files changed, 17 insertions, 5 deletions
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index 1fbc1339aa5..7ba2992b8fe 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -173,6 +173,7 @@ void ED_object_parent_clear(struct Object *ob, const int type);
void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode);
void ED_object_base_activate(struct bContext *C, struct Base *base);
+void ED_object_base_activate_with_mode_exit_if_needed(struct bContext *C, struct Base *base);
void ED_object_base_active_refresh(struct Main *bmain,
struct Scene *scene,
struct ViewLayer *view_layer);
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index ab404f0a72d..ede0a92cede 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -143,6 +143,21 @@ void ED_object_base_activate(bContext *C, Base *base)
ED_object_base_active_refresh(CTX_data_main(C), scene, view_layer);
}
+void ED_object_base_activate_with_mode_exit_if_needed(bContext *C, Base *base)
+{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+
+ /* Currently we only need to be concerned with edit-mode. */
+ Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
+ if (obedit) {
+ Object *ob = base->object;
+ if (((ob->mode & OB_MODE_EDIT) == 0) || (obedit->type != ob->type)) {
+ ED_object_editmode_exit(C, EM_FREEDATA);
+ }
+ }
+ ED_object_base_activate(C, base);
+}
+
bool ED_object_base_deselect_all_ex(ViewLayer *view_layer,
View3D *v3d,
int action,
diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c
index f8812ff5970..600047c4b11 100644
--- a/source/blender/editors/space_outliner/outliner_select.c
+++ b/source/blender/editors/space_outliner/outliner_select.c
@@ -398,14 +398,10 @@ static eOLDrawState tree_element_set_active_object(bContext *C,
}
if (set != OL_SETSEL_NONE) {
- ED_object_base_activate(C, base); /* adds notifier */
+ ED_object_base_activate_with_mode_exit_if_needed(C, base); /* adds notifier */
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
}
-
- if (ob != OBEDIT_FROM_VIEW_LAYER(view_layer)) {
- ED_object_editmode_exit(C, EM_FREEDATA);
- }
}
return OL_DRAWSEL_NORMAL;
}