Commit: c79b8490976554d448435ae9b61d0697ad40e79f
Author: Philipp Oeser
Date:   Thu Dec 20 13:00:32 2018 +0100
Branches: master
https://developer.blender.org/rBc79b8490976554d448435ae9b61d0697ad40e79f

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

===================================================================

M       source/blender/editors/include/ED_screen.h
M       source/blender/editors/interface/interface_context_menu.c
M       source/blender/editors/screen/screen_user_menu.c

===================================================================

diff --git a/source/blender/editors/include/ED_screen.h 
b/source/blender/editors/include/ED_screen.h
index ce0c9468d1e..35f5000f4b7 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -310,7 +310,7 @@ bool ED_operator_camera(struct bContext *C);
 
 /* screen_user_menu.c */
 
-struct bUserMenu *ED_screen_user_menu_find(struct bContext *C);
+bUserMenu **ED_screen_user_menus_find(struct bContext *C, uint *r_len);
 struct bUserMenu *ED_screen_user_menu_ensure(struct bContext *C);
 
 
diff --git a/source/blender/editors/interface/interface_context_menu.c 
b/source/blender/editors/interface/interface_context_menu.c
index d9967625199..fc7d3293333 100644
--- a/source/blender/editors/interface/interface_context_menu.c
+++ b/source/blender/editors/interface/interface_context_menu.c
@@ -699,8 +699,13 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut 
*but)
                        "Add to a user defined context menu (stored in the user 
preferences)");
                UI_but_func_set(but2, popup_user_menu_add_or_replace_func, but, 
NULL);
 
-               bUserMenu *um = ED_screen_user_menu_find(C);
-               if (um) {
+               uint um_array_len;
+               bUserMenu **um_array = ED_screen_user_menus_find(C, 
&um_array_len);
+               for (int um_index = 0; um_index < um_array_len; um_index++) {
+                       bUserMenu *um = um_array[um_index];
+                       if (um == NULL) {
+                               continue;
+                       }
                        bUserMenuItem *umi = ui_but_user_menu_find(C, but, um);
                        if (umi != NULL) {
                                but2 = uiDefIconTextBut(
@@ -710,6 +715,8 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut 
*but)
                                UI_but_func_set(but2, 
popup_user_menu_remove_func, um, umi);
                        }
                }
+               MEM_freeN(um_array);
+
                uiItemS(layout);
        }
 
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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to