Merge branch 'master' into blender2.8
[blender.git] / source / blender / editors / armature / armature_relations.c
index 95c8b1d..5d6c383 100644 (file)
 #include "BKE_animsys.h"
 #include "BKE_constraint.h"
 #include "BKE_context.h"
-#include "BKE_depsgraph.h"
 #include "BKE_fcurve.h"
 #include "BKE_global.h"
+#include "BKE_layer.h"
 #include "BKE_main.h"
 #include "BKE_report.h"
 
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
 #include "RNA_access.h"
 #include "RNA_define.h"
 
@@ -370,7 +373,7 @@ int join_armature_exec(bContext *C, wmOperator *op)
                        if (base->object->adt) {
                                if (ob->adt == NULL) {
                                        /* no animdata, so just use a copy of the whole thing */
-                                       ob->adt = BKE_animdata_copy(bmain, base->object->adt, false);
+                                       ob->adt = BKE_animdata_copy(bmain, base->object->adt, false, true);
                                }
                                else {
                                        /* merge in data - we'll fix the drivers manually */
@@ -381,7 +384,7 @@ int join_armature_exec(bContext *C, wmOperator *op)
                        if (curarm->adt) {
                                if (arm->adt == NULL) {
                                        /* no animdata, so just use a copy of the whole thing */
-                                       arm->adt = BKE_animdata_copy(bmain, curarm->adt, false);
+                                       arm->adt = BKE_animdata_copy(bmain, curarm->adt, false, true);
                                }
                                else {
                                        /* merge in data - we'll fix the drivers manually */
@@ -390,12 +393,12 @@ int join_armature_exec(bContext *C, wmOperator *op)
                        }
 
                        /* Free the old object data */
-                       ED_base_object_free_and_unlink(bmain, scene, base);
+                       ED_object_base_free_and_unlink(bmain, scene, base->object);
                }
        }
        CTX_DATA_END;
 
-       DAG_relations_tag_update(bmain);  /* because we removed object(s) */
+       DEG_relations_tag_update(bmain);  /* because we removed object(s) */
 
        ED_armature_from_edit(arm);
        ED_armature_edit_free(arm);
@@ -569,6 +572,7 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
 {
        Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
+       ViewLayer *view_layer = CTX_data_view_layer(C);
        Object *obedit = CTX_data_edit_object(C);
        Object *oldob, *newob;
        Base *oldbase, *newbase;
@@ -592,14 +596,18 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
        /* TODO: use context iterators for this? */
        CTX_DATA_BEGIN(C, Base *, base, visible_bases)
        {
-               if (base->object == obedit) base->flag |= SELECT;
-               else base->flag &= ~SELECT;
+               if (base->object == obedit) {
+                       ED_object_base_select(base, BA_SELECT);
+               }
+               else {
+                       ED_object_base_select(base, BA_DESELECT);
+               }
        }
        CTX_DATA_END;
 
        /* 1) store starting settings and exit editmode */
        oldob = obedit;
-       oldbase = BASACT;
+       oldbase = view_layer->basact;
        oldob->mode &= ~OB_MODE_POSE;
        //oldbase->flag &= ~OB_POSEMODE;
 
@@ -607,11 +615,11 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
        ED_armature_edit_free(obedit->data);
 
        /* 2) duplicate base */
-       newbase = ED_object_add_duplicate(bmain, scene, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
-       DAG_relations_tag_update(bmain);
+       newbase = ED_object_add_duplicate(bmain, scene, view_layer, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
+       DEG_relations_tag_update(bmain);
 
        newob = newbase->object;
-       newbase->flag &= ~SELECT;
+       newbase->flag &= ~BASE_SELECTED;
 
 
        /* 3) remove bones that shouldn't still be around on both armatures */
@@ -622,8 +630,8 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
        /* 4) fix links before depsgraph flushes */ // err... or after?
        separated_armature_fix_links(oldob, newob);
 
-       DAG_id_tag_update(&oldob->id, OB_RECALC_DATA);  /* this is the original one */
-       DAG_id_tag_update(&newob->id, OB_RECALC_DATA);  /* this is the separated one */
+       DEG_id_tag_update(&oldob->id, OB_RECALC_DATA);  /* this is the original one */
+       DEG_id_tag_update(&newob->id, OB_RECALC_DATA);  /* this is the separated one */
 
 
        /* 5) restore original conditions */