diff options
author | Julian Eisel <julian@blender.org> | 2021-10-08 20:56:24 +0300 |
---|---|---|
committer | Julian Eisel <julian@blender.org> | 2021-10-08 21:08:22 +0300 |
commit | 17c928e9752372b698a1ed27e243181873aa411e (patch) | |
tree | 7a1b088c4c83af65a603b79433b003f3cf344300 /source/blender/editors/interface/interface_context_menu.c | |
parent | 7bd0de924080571f4c8308dc651b83539d6d22b8 (diff) |
UI: Add context menu support for tree-view items
Tree-view items can now easily define their own context menu. This works
by overriding the `ui::AbstractTreeViewItem::build_context_menu()`
function. See the documentation:
https://wiki.blender.org/wiki/Source/Interface/Views#Context_Menus
Consistently with the Outliner and File Browser, the right-clicked item
also gets activated. This makes sure the correct context is set for the
operators and makes it clear to the user which item is operated on.
An operator to rename the active item is also added, which is something
you'd typically want to put in the context menu as well.
Diffstat (limited to 'source/blender/editors/interface/interface_context_menu.c')
-rw-r--r-- | source/blender/editors/interface/interface_context_menu.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/source/blender/editors/interface/interface_context_menu.c b/source/blender/editors/interface/interface_context_menu.c index bb9e813ea50..d327124484b 100644 --- a/source/blender/editors/interface/interface_context_menu.c +++ b/source/blender/editors/interface/interface_context_menu.c @@ -925,6 +925,18 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but, const wmEvent *ev } } + { + const ARegion *region = CTX_wm_region(C); + uiButTreeRow *treerow_but = (uiButTreeRow *)ui_tree_row_find_mouse_over( + region, event->x, event->y); + if (treerow_but) { + BLI_assert(treerow_but->but.type == UI_BTYPE_TREEROW); + UI_tree_view_item_context_menu_build( + C, treerow_but->tree_item, uiLayoutColumn(layout, false)); + uiItemS(layout); + } + } + /* If the button represents an id, it can set the "id" context pointer. */ if (U.experimental.use_extended_asset_browser && ED_asset_can_mark_single_from_context(C)) { ID *id = CTX_data_pointer_get_type(C, "id", &RNA_ID).data; |