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:
authorCampbell Barton <ideasman42@gmail.com>2018-04-11 10:02:32 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-04-11 10:02:32 +0300
commitdebe3011f62e5935dc54d7033052d7d4e24ad449 (patch)
tree4858e23ac7e2a49441e76e4ce6eddc2f74e766b7 /source/blender/editors
parent1b78f05b1ca466695b39d4fd60570790c1ab9e13 (diff)
parent32339a56f11ac1392c4b8d8651ff452a2a5511cc (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/armature/pose_edit.c38
-rw-r--r--source/blender/editors/include/ED_armature.h5
-rw-r--r--source/blender/editors/object/object_edit.c14
-rw-r--r--source/blender/editors/space_outliner/outliner_select.c4
4 files changed, 36 insertions, 25 deletions
diff --git a/source/blender/editors/armature/pose_edit.c b/source/blender/editors/armature/pose_edit.c
index 15ffd09ebd4..5b1975a92a0 100644
--- a/source/blender/editors/armature/pose_edit.c
+++ b/source/blender/editors/armature/pose_edit.c
@@ -82,34 +82,42 @@ Object *ED_pose_object_from_context(bContext *C)
}
/* This function is used to process the necessary updates for */
-void ED_armature_enter_posemode(bContext *C, Base *base)
+bool ED_object_posemode_enter_ex(struct Main *bmain, Base *base)
{
- ReportList *reports = CTX_wm_reports(C);
Object *ob = base->object;
-
- if (ID_IS_LINKED(ob)) {
- BKE_report(reports, RPT_WARNING, "Cannot pose libdata");
- return;
- }
+ BLI_assert(!ID_IS_LINKED(ob));
+ bool ok = false;
switch (ob->type) {
case OB_ARMATURE:
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);
- WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_POSE, NULL);
-
+ DEG_id_tag_update_ex(bmain, &ob->id, DEG_TAG_COPY_ON_WRITE);
+ ok = true;
break;
default:
- return;
+ break;
}
-
- /* XXX: disabled as this would otherwise cause a nasty loop... */
- //ED_object_mode_toggle(C, ob->mode);
+
+ return ok;
+}
+bool ED_object_posemode_enter(bContext *C, Base *base)
+{
+ ReportList *reports = CTX_wm_reports(C);
+ if (ID_IS_LINKED(base->object)) {
+ 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);
+ if (ok) {
+ WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_POSE, NULL);
+ }
+ return ok;
}
-void ED_armature_exit_posemode(bContext *C, Base *base)
+void ED_object_posemode_exit(bContext *C, Base *base)
{
if (base) {
Object *ob = base->object;
diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h
index 0181cc20cdc..25e792535e0 100644
--- a/source/blender/editors/include/ED_armature.h
+++ b/source/blender/editors/include/ED_armature.h
@@ -205,8 +205,9 @@ 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_armature_exit_posemode(struct bContext *C, struct Base *base);
-void ED_armature_enter_posemode(struct bContext *C, struct Base *base);
+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);
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 bfe0194fe42..85f8869a73d 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -512,7 +512,7 @@ static int posemode_exec(bContext *C, wmOperator *op)
Base *base = CTX_data_active_base(C);
Object *ob = base->object;
const int mode_flag = OB_MODE_POSE;
- const bool is_mode_set = (ob->mode & mode_flag) != 0;
+ bool is_mode_set = (ob->mode & mode_flag) != 0;
if (!is_mode_set) {
if (!ED_object_mode_compat_set(C, ob, mode_flag, op->reports)) {
@@ -523,13 +523,15 @@ static int posemode_exec(bContext *C, wmOperator *op)
if (ob->type == OB_ARMATURE) {
if (ob == CTX_data_edit_object(C)) {
ED_object_editmode_exit(C, EM_FREEDATA | EM_DO_UNDO);
- ED_armature_enter_posemode(C, base);
+ is_mode_set = false;
}
- else if (is_mode_set)
- ED_armature_exit_posemode(C, base);
- else
- ED_armature_enter_posemode(C, base);
+ if (is_mode_set) {
+ ED_object_posemode_exit(C, base);
+ }
+ else {
+ ED_object_posemode_enter(C, base);
+ }
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c
index 6626eeb19f4..5019e3b1696 100644
--- a/source/blender/editors/space_outliner/outliner_select.c
+++ b/source/blender/editors/space_outliner/outliner_select.c
@@ -671,9 +671,9 @@ static eOLDrawState tree_element_active_pose(
ED_object_editmode_exit(C, EM_FREEDATA | EM_WAITCURSOR | EM_DO_UNDO);
if (ob->mode & OB_MODE_POSE)
- ED_armature_exit_posemode(C, base);
+ ED_object_posemode_exit(C, base);
else
- ED_armature_enter_posemode(C, base);
+ ED_object_posemode_enter(C, base);
}
else {
if (ob->mode & OB_MODE_POSE) {