diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-04-11 10:41:49 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-04-11 10:41:49 +0300 |
commit | ce3adc090d6cb380e345b0112079b01a61aa3544 (patch) | |
tree | 807962bc12d15111c976a655de9c2b64aec0c7b3 /source/blender | |
parent | a3a76bc0fed3efa9d30ac5d0647a5449b7dcc38a (diff) | |
parent | c963488b5e25b906ff72cbaabdcc76cbfbc77172 (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/armature/pose_edit.c | 30 | ||||
-rw-r--r-- | source/blender/editors/include/ED_armature.h | 7 | ||||
-rw-r--r-- | source/blender/editors/object/object_edit.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_outliner/outliner_select.c | 13 |
4 files changed, 33 insertions, 21 deletions
diff --git a/source/blender/editors/armature/pose_edit.c b/source/blender/editors/armature/pose_edit.c index 5b1975a92a0..520ecc797aa 100644 --- a/source/blender/editors/armature/pose_edit.c +++ b/source/blender/editors/armature/pose_edit.c @@ -82,9 +82,8 @@ Object *ED_pose_object_from_context(bContext *C) } /* This function is used to process the necessary updates for */ -bool ED_object_posemode_enter_ex(struct Main *bmain, Base *base) +bool ED_object_posemode_enter_ex(struct Main *bmain, Object *ob) { - Object *ob = base->object; BLI_assert(!ID_IS_LINKED(ob)); bool ok = false; @@ -95,6 +94,7 @@ bool ED_object_posemode_enter_ex(struct Main *bmain, Base *base) /* Inform all CoW versions that we changed the mode. */ DEG_id_tag_update_ex(bmain, &ob->id, DEG_TAG_COPY_ON_WRITE); ok = true; + break; default: break; @@ -102,34 +102,42 @@ bool ED_object_posemode_enter_ex(struct Main *bmain, Base *base) return ok; } -bool ED_object_posemode_enter(bContext *C, Base *base) +bool ED_object_posemode_enter(bContext *C, Object *ob) { ReportList *reports = CTX_wm_reports(C); - if (ID_IS_LINKED(base->object)) { + if (ID_IS_LINKED(ob)) { BKE_report(reports, RPT_WARNING, "Cannot pose libdata"); return false; } struct Main *bmain = CTX_data_main(C); - bool ok = ED_object_posemode_enter_ex(bmain, base); + bool ok = ED_object_posemode_enter_ex(bmain, ob); if (ok) { WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_POSE, NULL); } return ok; } -void ED_object_posemode_exit(bContext *C, Base *base) +bool ED_object_posemode_exit_ex(struct Main *bmain, Object *ob) { - if (base) { - Object *ob = base->object; - + bool ok = false; + if (ob) { ob->restore_mode = ob->mode; ob->mode &= ~OB_MODE_POSE; /* Inform all CoW versions that we changed the mode. */ - DEG_id_tag_update_ex(CTX_data_main(C), &ob->id, DEG_TAG_COPY_ON_WRITE); - + DEG_id_tag_update_ex(bmain, &ob->id, DEG_TAG_COPY_ON_WRITE); + ok = true; + } + return ok; +} +bool ED_object_posemode_exit(bContext *C, Object *ob) +{ + struct Main *bmain = CTX_data_main(C); + bool ok = ED_object_posemode_exit_ex(bmain, ob); + if (ok) { WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, NULL); } + return ok; } /* if a selected or active bone is protected, throw error (oonly if warn == 1) and return 1 */ diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 25e792535e0..0dcc4f32e43 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -205,9 +205,10 @@ void ED_armature_ebone_listbase_free(struct ListBase *lb); void ED_armature_ebone_listbase_copy(struct ListBase *lb_dst, struct ListBase *lb_src); /* poseobject.c */ -void ED_object_posemode_exit(struct bContext *C, struct Base *base); -bool ED_object_posemode_enter_ex(struct Main *bmain, struct Base *base); -bool ED_object_posemode_enter(struct bContext *C, struct Base *base); +bool ED_object_posemode_exit_ex(struct Main *bmain, struct Object *ob); +bool ED_object_posemode_exit(struct bContext *C, struct Object *ob); +bool ED_object_posemode_enter_ex(struct Main *bmain, struct Object *ob); +bool ED_object_posemode_enter(struct bContext *C, struct Object *ob); void ED_pose_de_selectall(struct Object *ob, int select_mode, const bool ignore_visibility); void ED_pose_bone_select(struct Object *ob, struct bPoseChannel *pchan, bool select); void ED_pose_recalculate_paths(struct bContext *C, struct Scene *scene, struct Object *ob); diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 85f8869a73d..f4066360805 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -527,10 +527,10 @@ static int posemode_exec(bContext *C, wmOperator *op) } if (is_mode_set) { - ED_object_posemode_exit(C, base); + ED_object_posemode_exit(C, ob); } else { - ED_object_posemode_enter(C, base); + ED_object_posemode_enter(C, ob); } return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c index 5019e3b1696..2f44420f3b7 100644 --- a/source/blender/editors/space_outliner/outliner_select.c +++ b/source/blender/editors/space_outliner/outliner_select.c @@ -667,13 +667,16 @@ static eOLDrawState tree_element_active_pose( } if (set != OL_SETSEL_NONE) { - if (OBEDIT_FROM_VIEW_LAYER(view_layer)) + if (OBEDIT_FROM_VIEW_LAYER(view_layer)) { ED_object_editmode_exit(C, EM_FREEDATA | EM_WAITCURSOR | EM_DO_UNDO); + } - if (ob->mode & OB_MODE_POSE) - ED_object_posemode_exit(C, base); - else - ED_object_posemode_enter(C, base); + if (ob->mode & OB_MODE_POSE) { + ED_object_posemode_exit(C, ob); + } + else { + ED_object_posemode_enter(C, ob); + } } else { if (ob->mode & OB_MODE_POSE) { |