diff options
Diffstat (limited to 'source/blender/editors/interface/interface_handlers.c')
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 47 |
1 files changed, 37 insertions, 10 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index a6cdd58c1a6..4ec990bb832 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -3502,6 +3502,8 @@ static void ui_block_open_begin(bContext *C, uiBut *but, uiHandleButtonData *dat data->menu->popup = but->block->handle->popup; } + but->flag |= UI_BUT_MENU_ROOT; + #ifdef USE_ALLSELECT { wmWindow *win = CTX_wm_window(C); @@ -6448,6 +6450,33 @@ void ui_panel_menu(bContext *C, ARegion *ar, Panel *pa) UI_popup_menu_end(C, pup); } +static void ui_menu_scripting(bContext *UNUSED(C), uiLayout *layout, void *arg) +{ + uiBut *but = arg; + + if (!ui_block_is_menu(but->block)) { + uiItemFullO(layout, "UI_OT_editsource", NULL, ICON_NONE, NULL, WM_OP_INVOKE_DEFAULT, 0); + } + + uiItemBooleanO(layout, CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Copy Data Path"), + ICON_NONE, "UI_OT_copy_data_path_button", "full", 0); + uiItemBooleanO(layout, CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Copy Full Data Path"), + ICON_NONE, "UI_OT_copy_data_path_button", "full", 1); + + if (but->rnapoin.data && but->rnaprop) { + PointerRNA ptr_props; + char buf[512]; + + BLI_snprintf(buf, sizeof(buf), "%s.%s", + RNA_struct_identifier(but->rnapoin.type), RNA_property_identifier(but->rnaprop)); + + WM_operator_properties_create(&ptr_props, "WM_OT_doc_view"); + RNA_string_set(&ptr_props, "doc_id", buf); + uiItemFullO(layout, "WM_OT_doc_view", CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Online Python Reference"), + ICON_NONE, ptr_props.data, WM_OP_EXEC_DEFAULT, 0); + } +} + static bool ui_but_menu(bContext *C, uiBut *but) { uiPopupMenu *pup; @@ -6462,7 +6491,9 @@ static bool ui_but_menu(bContext *C, uiBut *but) if (but->type == UI_BTYPE_IMAGE) { return false; } - + + but->flag |= UI_BUT_MENU_ROOT; + UI_but_tooltip_timer_remove(C, but); /* highly unlikely getting the label ever fails */ @@ -6632,15 +6663,16 @@ static bool ui_but_menu(bContext *C, uiBut *but) uiItemO(layout, CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Unset"), ICON_NONE, "UI_OT_unset_property_button"); } - - uiItemO(layout, CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Copy Data Path"), - ICON_NONE, "UI_OT_copy_data_path_button"); uiItemO(layout, CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Copy To Selected"), ICON_NONE, "UI_OT_copy_to_selected_button"); uiItemS(layout); } + /* Scripting submenu */ + uiItemMenuF(layout, IFACE_("Scripting"), ICON_NONE, ui_menu_scripting, but); + uiItemS(layout); + /* Operator buttons */ if (but->optype) { uiBlock *block = uiLayoutGetBlock(layout); @@ -6689,17 +6721,12 @@ static bool ui_but_menu(bContext *C, uiBut *but) { /* Docs */ char buf[512]; - PointerRNA ptr_props; + // PointerRNA ptr_props; if (UI_but_online_manual_id(but, buf, sizeof(buf))) { uiItemO(layout, CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Online Manual"), ICON_NONE, "WM_OT_doc_view_manual_ui_context"); - WM_operator_properties_create(&ptr_props, "WM_OT_doc_view"); - RNA_string_set(&ptr_props, "doc_id", buf); - uiItemFullO(layout, "WM_OT_doc_view", CTX_IFACE_(BLF_I18NCONTEXT_OPERATOR_DEFAULT, "Online Python Reference"), - ICON_NONE, ptr_props.data, WM_OP_EXEC_DEFAULT, 0); - /* XXX inactive option, not for public! */ #if 0 WM_operator_properties_create(&ptr_props, "WM_OT_doc_edit"); |