forked from bartvdbraak/blender
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
This commit is contained in:
parent
469ba8a30a
commit
b7afbaf8cc
@ -93,12 +93,16 @@ 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... */
|
||||
if (ob) {
|
||||
adt = ob->adt;
|
||||
}
|
||||
}
|
||||
else if (saction->mode == SACTCONT_SHAPEKEY) {
|
||||
Key *key = BKE_key_from_object(ob);
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user