Delete Invalid Drivers: more lenient poll function
authorSybren A. Stüvel <sybren@stuvel.eu>
Wed, 17 Jan 2018 16:14:31 +0000 (17:14 +0100)
committerSybren A. Stüvel <sybren@stuvel.eu>
Wed, 17 Jan 2018 16:14:39 +0000 (17:14 +0100)
This function is faster and also allows for deletion of invalid drivers in
nested data blocks (for example in shape keys). Thanks @sergey!

source/blender/editors/space_graph/graph_edit.c

index 69feae6ee24686fec44de17a524895cbcd922f89..43a83929eb07909b6c2ff20b37c62da4689a228f 100644 (file)
@@ -2803,6 +2803,20 @@ static int graph_driver_delete_invalid_exec(bContext *C, wmOperator *op)
        return OPERATOR_FINISHED;
 }
 
+static int graph_driver_delete_invalid_poll(bContext *C)
+{
+       bAnimContext ac;
+       ScrArea *sa = CTX_wm_area(C);
+
+       /* firstly, check if in Graph Editor */
+       if ((sa == NULL) || (sa->spacetype != SPACE_IPO))
+               return 0;
+
+       /* try to init Anim-Context stuff ourselves and check */
+       return ANIM_animdata_get_context(C, &ac) != 0;
+}
+
+
 void GRAPH_OT_driver_delete_invalid(wmOperatorType *ot)
 {
        /* identifiers */
@@ -2812,7 +2826,7 @@ void GRAPH_OT_driver_delete_invalid(wmOperatorType *ot)
 
        /* api callbacks */
        ot->exec = graph_driver_delete_invalid_exec;
-       ot->poll = graphop_visible_keyframes_poll;
+       ot->poll = graph_driver_delete_invalid_poll;
 
        /* flags */
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;