Fix outliner and animation editors exiting multi-object edit-mode
When multiple objects were in edit-mode, only the active object would exit edit-mode.
This commit is contained in:
parent
ee5a4f41eb
commit
3a9d43cf31
|
@ -207,6 +207,12 @@ bool ED_object_editmode_exit_ex(struct Main *bmain,
|
|||
int flag);
|
||||
bool ED_object_editmode_exit(struct bContext *C, int flag);
|
||||
|
||||
bool ED_object_editmode_exit_multi_ex(struct Main *bmain,
|
||||
struct Scene *scene,
|
||||
struct ViewLayer *view_layer,
|
||||
int flag);
|
||||
bool ED_object_editmode_exit_multi(struct bContext *C, int flag);
|
||||
|
||||
bool ED_object_editmode_enter_ex(struct Main *bmain,
|
||||
struct Scene *scene,
|
||||
struct Object *ob,
|
||||
|
|
|
@ -683,6 +683,32 @@ bool ED_object_editmode_exit(bContext *C, int flag)
|
|||
return ED_object_editmode_exit_ex(bmain, scene, obedit, flag);
|
||||
}
|
||||
|
||||
bool ED_object_editmode_exit_multi_ex(Main *bmain, Scene *scene, ViewLayer *view_layer, int flag)
|
||||
{
|
||||
Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
|
||||
if (obedit == NULL) {
|
||||
return false;
|
||||
}
|
||||
bool changed = false;
|
||||
const short obedit_type = obedit->type;
|
||||
|
||||
LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
|
||||
Object *ob = base->object;
|
||||
if ((ob->type == obedit_type) && (ob->mode & OB_MODE_EDIT)) {
|
||||
changed |= ED_object_editmode_exit_ex(bmain, scene, base->object, flag);
|
||||
}
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
||||
bool ED_object_editmode_exit_multi(bContext *C, int flag)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
return ED_object_editmode_exit_multi_ex(bmain, scene, view_layer, flag);
|
||||
}
|
||||
|
||||
bool ED_object_editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag)
|
||||
{
|
||||
bool ok = false;
|
||||
|
|
|
@ -152,7 +152,9 @@ void ED_object_base_activate_with_mode_exit_if_needed(bContext *C, Base *base)
|
|||
if (obedit) {
|
||||
Object *ob = base->object;
|
||||
if (((ob->mode & OB_MODE_EDIT) == 0) || (obedit->type != ob->type)) {
|
||||
ED_object_editmode_exit(C, EM_FREEDATA);
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ED_object_editmode_exit_multi_ex(bmain, scene, view_layer, EM_FREEDATA);
|
||||
}
|
||||
}
|
||||
ED_object_base_activate(C, base);
|
||||
|
|
Loading…
Reference in New Issue