Fix T63431: crash adding driver to a keyframed property with Ctrl+D

This commit is contained in:
Brecht Van Lommel
2019-04-21 02:34:26 +02:00
parent 543614a17d
commit 1de3c81d26
2 changed files with 13 additions and 2 deletions

View File

@@ -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") */

View File

@@ -1255,7 +1255,7 @@ static void graph_panel_drivers_popover(const bContext *C, Panel *pa)
uiLayoutSetContextFromBut(layout, but);
/* Populate Panel - With a combination of the contents of the Driven and Driver panels */
if (fcu) {
if (fcu && fcu->driver) {
ID *id = ptr.id.data;
/* Driven Property Settings */