diff options
Diffstat (limited to 'source/blender/blenkernel/intern/action.c')
-rw-r--r-- | source/blender/blenkernel/intern/action.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index c91fae2adbc..4991f1ce225 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -714,10 +714,12 @@ void BKE_pose_channels_hash_free(bPose *pose) * Deallocates a pose channel. * Does not free the pose channel itself. */ -void BKE_pose_channel_free(bPoseChannel *pchan) +void BKE_pose_channel_free_ex(bPoseChannel *pchan, bool do_id_user) { if (pchan->custom) { - id_us_min(&pchan->custom->id); + if (do_id_user) { + id_us_min(&pchan->custom->id); + } pchan->custom = NULL; } @@ -734,17 +736,22 @@ void BKE_pose_channel_free(bPoseChannel *pchan) } } +void BKE_pose_channel_free(bPoseChannel *pchan) +{ + BKE_pose_channel_free_ex(pchan, true); +} + /** * Removes and deallocates all channels from a pose. * Does not free the pose itself. */ -void BKE_pose_channels_free(bPose *pose) +void BKE_pose_channels_free_ex(bPose *pose, bool do_id_user) { bPoseChannel *pchan; if (pose->chanbase.first) { for (pchan = pose->chanbase.first; pchan; pchan = pchan->next) - BKE_pose_channel_free(pchan); + BKE_pose_channel_free_ex(pchan, do_id_user); BLI_freelistN(&pose->chanbase); } @@ -752,14 +759,19 @@ void BKE_pose_channels_free(bPose *pose) BKE_pose_channels_hash_free(pose); } +void BKE_pose_channels_free(bPose *pose) +{ + BKE_pose_channels_free_ex(pose, true); +} + /** * Removes and deallocates all data from a pose, and also frees the pose. */ -void BKE_pose_free(bPose *pose) +void BKE_pose_free_ex(bPose *pose, bool do_id_user) { if (pose) { /* free pose-channels */ - BKE_pose_channels_free(pose); + BKE_pose_channels_free_ex(pose, do_id_user); /* free pose-groups */ if (pose->agroups.first) @@ -777,6 +789,11 @@ void BKE_pose_free(bPose *pose) } } +void BKE_pose_free(bPose *pose) +{ + BKE_pose_free_ex(pose, true); +} + static void copy_pose_channel_data(bPoseChannel *pchan, const bPoseChannel *chan) { bConstraint *pcon, *con; |