Commit: 08f7b20ebb5ab2746144663876d19086f7518939
Author: Joshua Leung
Date:   Sat Mar 28 23:22:02 2015 +1300
Branches: blender-v2.74-release
https://developer.blender.org/rB08f7b20ebb5ab2746144663876d19086f7518939

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

===================================================================

M       source/blender/editors/space_action/action_edit.c

===================================================================

diff --git a/source/blender/editors/space_action/action_edit.c 
b/source/blender/editors/space_action/action_edit.c
index 76c955d..95066b9 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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to