From c79b8490976554d448435ae9b61d0697ad40e79f Mon Sep 17 00:00:00 2001 From: Philipp Oeser Date: Thu, 20 Dec 2018 13:00:32 +0100 Subject: Fix T58327: Quick Favorites "Remove from Favorites" missing for added Modifiers Since user menu entries from SPACE_BUTS/SPACE_TOPBAR are also shown in other Editors (SPACE_VIEW3D), also allow these entries to be removed from Quick Favorites from these Editors. Match and deduplicate logic from screen_user_menu_draw() and ui_popup_context_menu_for_button(). Reviewers: campbellbarton, brecht Maniphest Tasks: T58327 Differential Revision: https://developer.blender.org/D4112 --- source/blender/editors/screen/screen_user_menu.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'source/blender/editors/screen/screen_user_menu.c') diff --git a/source/blender/editors/screen/screen_user_menu.c b/source/blender/editors/screen/screen_user_menu.c index 45f82618d2e..fe2b144611e 100644 --- a/source/blender/editors/screen/screen_user_menu.c +++ b/source/blender/editors/screen/screen_user_menu.c @@ -62,11 +62,19 @@ /** \name Menu Type * \{ */ -bUserMenu *ED_screen_user_menu_find(bContext *C) +bUserMenu **ED_screen_user_menus_find(bContext *C, uint *r_len) { SpaceLink *sl = CTX_wm_space_data(C); const char *context = CTX_data_mode_string(C); - return BKE_blender_user_menu_find(&U.user_menus, sl->spacetype, context); + + uint array_len = 3; + bUserMenu **um_array = MEM_calloc_arrayN(array_len, sizeof(*um_array), __func__); + um_array[0] = BKE_blender_user_menu_find(&U.user_menus, sl->spacetype, context); + um_array[1] = (sl->spacetype != SPACE_TOPBAR) ? BKE_blender_user_menu_find(&U.user_menus, SPACE_TOPBAR, context) : NULL; + um_array[2] = (sl->spacetype == SPACE_VIEW3D) ? BKE_blender_user_menu_find(&U.user_menus, SPACE_BUTS, context) : NULL; + + *r_len = array_len; + return um_array; } bUserMenu *ED_screen_user_menu_ensure(bContext *C) @@ -182,15 +190,10 @@ void ED_screen_user_menu_item_remove(ListBase *lb, bUserMenuItem *umi) static void screen_user_menu_draw(const bContext *C, Menu *menu) { - SpaceLink *sl = CTX_wm_space_data(C); - const char *context = CTX_data_mode_string(C); - bUserMenu *um_array[] = { - BKE_blender_user_menu_find(&U.user_menus, sl->spacetype, context), - (sl->spacetype != SPACE_TOPBAR) ? BKE_blender_user_menu_find(&U.user_menus, SPACE_TOPBAR, context) : NULL, - (sl->spacetype == SPACE_VIEW3D) ? BKE_blender_user_menu_find(&U.user_menus, SPACE_BUTS, context) : NULL, - }; + uint um_array_len; + bUserMenu **um_array = ED_screen_user_menus_find(C, &um_array_len); bool is_empty = true; - for (int um_index = 0; um_index < ARRAY_SIZE(um_array); um_index++) { + for (int um_index = 0; um_index < um_array_len; um_index++) { bUserMenu *um = um_array[um_index]; if (um == NULL) { continue; @@ -258,6 +261,7 @@ static void screen_user_menu_draw(const bContext *C, Menu *menu) } } } + MEM_freeN(um_array); if (is_empty) { uiItemL(menu->layout, IFACE_("No menu items found."), ICON_NONE); -- cgit v1.2.3