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:
authorJoshua Leung <aligorith@gmail.com>2015-03-28 13:22:02 +0300
committerJoshua Leung <aligorith@gmail.com>2015-03-28 13:23:23 +0300
commitb7afbaf8ccc315296d2dc824cc8d089108a38558 (patch)
tree4b581fdb34ac7da1c0e7a23ab554facbaefa5379 /source/blender/editors/space_action
parent469ba8a30a8222fdc0adede1e214b17e9fd1fc4f (diff)
Bugfix: Fix for crash when trying to create new action in Shape Key DopeSheet mode
When the active object had no shapekey data, trying to create a new action from the Shape Keys mode of the DopeSheet would crash. The segfault here was a silly regression caused by my earlier Action Stashing work. However, the old (pre-Action Stashing) code here also wasn't that great either. While it didn't crash, it would still silently create a new action, even if that could not get assigned/used anywhere. To prevent both of these problems from happening again, I've added additional null checks, as well as beefing up the poll callback here to forbid keyframing
Diffstat (limited to 'source/blender/editors/space_action')
-rw-r--r--source/blender/editors/space_action/action_edit.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c
index 76c955d8bca..95066b91725 100644
--- a/source/blender/editors/space_action/action_edit.c
+++ b/source/blender/editors/space_action/action_edit.c
@@ -93,11 +93,15 @@ static AnimData *actedit_animdata_from_context(bContext *C)
/* Get AnimData block to use */
if (saction->mode == SACTCONT_ACTION) {
/* Currently, "Action Editor" means object-level only... */
- adt = ob->adt;
+ if (ob) {
+ adt = ob->adt;
+ }
}
else if (saction->mode == SACTCONT_SHAPEKEY) {
Key *key = BKE_key_from_object(ob);
- adt = key->adt;
+ if (key) {
+ adt = key->adt;
+ }
}
return adt;
@@ -180,9 +184,19 @@ static int action_new_poll(bContext *C)
if (!(scene->flag & SCE_NLA_EDIT_ON)) {
if (ED_operator_action_active(C)) {
SpaceAction *saction = (SpaceAction *)CTX_wm_space_data(C);
+ Object *ob = CTX_data_active_object(C);
/* For now, actions are only for the active object, and on object and shapekey levels... */
- return ELEM(saction->mode, SACTCONT_ACTION, SACTCONT_SHAPEKEY);
+ if (saction->mode == SACTCONT_ACTION) {
+ /* XXX: This assumes that actions are assigned to the active object */
+ if (ob)
+ return true;
+ }
+ else if (saction->mode == SACTCONT_SHAPEKEY) {
+ Key *key = BKE_key_from_object(ob);
+ if (key)
+ return true;
+ }
}
else if (ED_operator_nla_active(C)) {
return true;