Fix T48552: Ctrl-D to add drivers shows disabled menu items
authorCampbell Barton <ideasman42@gmail.com>
Tue, 31 May 2016 06:30:44 +0000 (16:30 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 31 May 2016 06:30:44 +0000 (16:30 +1000)
source/blender/editors/animation/drivers.c
source/blender/windowmanager/WM_api.h
source/blender/windowmanager/intern/wm_operators.c

index afc4e5c9e61e6be5ce0e9b9f16e5aad95f335eb4..51f962d4a1ec364c9c07a7c8c91cfb2074f40822 100644 (file)
@@ -866,7 +866,7 @@ static int add_driver_button_exec(bContext *C, wmOperator *op)
 }
 
 /* Show menu or create drivers */
-static int add_driver_button_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+static int add_driver_button_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
 {
        PropertyRNA *prop;
        
@@ -877,7 +877,8 @@ static int add_driver_button_invoke(bContext *C, wmOperator *op, const wmEvent *
        else {
                /* Show menu */
                // TODO: This should get filtered by the enum filter
-               return WM_menu_invoke(C, op, event);
+               /* important to execute in the region we're currently in */
+               return WM_menu_invoke_ex(C, op, WM_OP_INVOKE_DEFAULT);
        }
 }
 
index db2547e4fbe9cea70679d6ef861cd8b56b17edd3..388837af67acbd36f220bf51bb84196108981eca 100644 (file)
@@ -220,6 +220,7 @@ void        WM_event_timer_sleep(struct wmWindowManager *wm, struct wmWindow *wi
                        /* invoke callback, uses enum property named "type" */
 void           WM_operator_view3d_unit_defaults(struct bContext *C, struct wmOperator *op);
 int                    WM_operator_smooth_viewtx_get(const struct wmOperator *op);
+int                    WM_menu_invoke_ex(struct bContext *C, struct wmOperator *op, int opcontext);
 int                    WM_menu_invoke                  (struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
 int                    WM_enum_search_invoke(struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
                        /* invoke callback, confirm menu + exec */
index 6ef8965a408ddf2f040fcb4fdeee7d554542db5c..b4295bb2607c360dc229ebdfe4614cf84453664d 100644 (file)
@@ -1068,7 +1068,7 @@ int WM_operator_smooth_viewtx_get(const wmOperator *op)
 }
 
 /* invoke callback, uses enum property named "type" */
-int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+int WM_menu_invoke_ex(bContext *C, wmOperator *op, int opcontext)
 {
        PropertyRNA *prop = op->type->prop;
        uiPopupMenu *pup;
@@ -1090,8 +1090,8 @@ int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
                pup = UI_popup_menu_begin(C, RNA_struct_ui_name(op->type->srna), ICON_NONE);
                layout = UI_popup_menu_layout(pup);
                /* set this so the default execution context is the same as submenus */
-               uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_REGION_WIN);
-               uiItemsFullEnumO(layout, op->type->idname, RNA_property_identifier(prop), op->ptr->data, WM_OP_EXEC_REGION_WIN, 0);
+               uiLayoutSetOperatorContext(layout, opcontext);
+               uiItemsFullEnumO(layout, op->type->idname, RNA_property_identifier(prop), op->ptr->data, opcontext, 0);
                UI_popup_menu_end(C, pup);
                return OPERATOR_INTERFACE;
        }
@@ -1099,6 +1099,11 @@ int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
        return OPERATOR_CANCELLED;
 }
 
+int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+       return WM_menu_invoke_ex(C, op, WM_OP_INVOKE_REGION_WIN);
+}
+
 
 /* generic enum search invoke popup */
 static uiBlock *wm_enum_search_menu(bContext *C, ARegion *ar, void *arg_op)