diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-04-21 03:34:26 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-04-21 03:35:50 +0300 |
commit | 1de3c81d268ba67128b2dd67335523a94320b0d2 (patch) | |
tree | 37ddb5144609188913218aab6281f3238a291979 /source/blender/editors/animation/drivers.c | |
parent | 543614a17d235ad6bf09a4cc82969bf92f16e1de (diff) |
Fix T63431: crash adding driver to a keyframed property with Ctrl+D
Diffstat (limited to 'source/blender/editors/animation/drivers.c')
-rw-r--r-- | source/blender/editors/animation/drivers.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c index d6564be9574..92c292f67e8 100644 --- a/source/blender/editors/animation/drivers.c +++ b/source/blender/editors/animation/drivers.c @@ -899,10 +899,21 @@ static bool add_driver_button_poll(bContext *C) PointerRNA ptr = {{NULL}}; PropertyRNA *prop = NULL; int index; + bool driven, special; /* this operator can only run if there's a property button active, and it can be animated */ UI_context_active_but_prop_get(C, &ptr, &prop, &index); - return (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)); + + if (!(ptr.id.data && ptr.data && prop)) { + return false; + } + if (!RNA_property_animateable(&ptr, prop)) { + return false; + } + + /* Don't do anything if there is an fcurve for animation without a driver. */ + FCurve *fcu = rna_get_fcurve_context_ui(C, &ptr, prop, index, NULL, NULL, &driven, &special); + return (fcu == NULL || fcu->driver); } /* Wrapper for creating a driver without knowing what the targets will be yet (i.e. "manual/add later") */ |