[Bf-blender-cvs] [fe3571b3620] master: UI: avoid double operator type lookup

Campbell Barton noreply at git.blender.org
Tue Oct 31 02:40:13 CET 2017


Commit: fe3571b3620f66d352e7eac74fa0066e50ab7837
Author: Campbell Barton
Date:   Tue Oct 31 12:44:41 2017 +1100
Branches: master
https://developer.blender.org/rBfe3571b3620f66d352e7eac74fa0066e50ab7837

UI: avoid double operator type lookup

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

M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/interface/interface_layout.c
M	source/blender/makesrna/intern/rna_ui_api.c

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

diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 303d689fee7..98e278e5570 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -1006,6 +1006,7 @@ void uiItemV(uiLayout *layout, const char *name, int icon, int argval); /* value
 void uiItemS(uiLayout *layout); /* separator */
 
 void uiItemMenuF(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *arg);
+void uiItemMenuEnumO_ptr(uiLayout *layout, struct bContext *C, struct wmOperatorType *ot, const char *propname, const char *name, int icon);
 void uiItemMenuEnumO(uiLayout *layout, struct bContext *C, const char *opname, const char *propname, const char *name, int icon);
 void uiItemMenuEnumR_prop(uiLayout *layout, struct PointerRNA *ptr, PropertyRNA *prop, const char *name, int icon);
 void uiItemMenuEnumR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, const char *name, int icon);
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 2dc5b91a112..b43892053ce 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -2016,19 +2016,15 @@ static void menu_item_enum_opname_menu(bContext *UNUSED(C), uiLayout *layout, vo
 	UI_block_direction_set(layout->root->block, UI_DIR_DOWN);
 }
 
-void uiItemMenuEnumO(uiLayout *layout, bContext *C, const char *opname, const char *propname, const char *name, int icon)
+void uiItemMenuEnumO_ptr(
+        uiLayout *layout, bContext *C, wmOperatorType *ot, const char *propname,
+        const char *name, int icon)
 {
-	wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
 	MenuItemLevel *lvl;
 	uiBut *but;
 
-	UI_OPERATOR_ERROR_RET(ot, opname, return);
-
-	if (!ot->srna) {
-		ui_item_disabled(layout, opname);
-		RNA_warning("operator missing srna '%s'", opname);
-		return;
-	}
+	/* Caller must check */
+	BLI_assert(ot->srna != NULL);
 
 	if (name == NULL) {
 		name = RNA_struct_ui_name(ot->srna);
@@ -2038,7 +2034,7 @@ void uiItemMenuEnumO(uiLayout *layout, bContext *C, const char *opname, const ch
 		icon = ICON_BLANK1;
 
 	lvl = MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
-	BLI_strncpy(lvl->opname, opname, sizeof(lvl->opname));
+	BLI_strncpy(lvl->opname, ot->idname, sizeof(lvl->opname));
 	BLI_strncpy(lvl->propname, propname, sizeof(lvl->propname));
 	lvl->opcontext = layout->root->opcontext;
 
@@ -2058,6 +2054,23 @@ void uiItemMenuEnumO(uiLayout *layout, bContext *C, const char *opname, const ch
 	}
 }
 
+void uiItemMenuEnumO(
+        uiLayout *layout, bContext *C, const char *opname, const char *propname,
+        const char *name, int icon)
+{
+	wmOperatorType *ot = WM_operatortype_find(opname, 0); /* print error next */
+
+	UI_OPERATOR_ERROR_RET(ot, opname, return);
+
+	if (!ot->srna) {
+		ui_item_disabled(layout, opname);
+		RNA_warning("operator missing srna '%s'", opname);
+		return;
+	}
+
+	uiItemMenuEnumO_ptr(layout, C, ot, propname, name, icon);
+}
+
 static void menu_item_enum_rna_menu(bContext *UNUSED(C), uiLayout *layout, void *arg)
 {
 	MenuItemLevel *lvl = (MenuItemLevel *)(((uiBut *)arg)->func_argN);
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index 88897c859e2..be5a823034e 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -213,8 +213,7 @@ static void rna_uiItemMenuEnumO(uiLayout *layout, bContext *C, const char *opnam
 	/* Get translated name (label). */
 	name = rna_translate_ui_text(name, text_ctxt, ot->srna, NULL, translate);
 
-	/* XXX This will search operator again :( */
-	uiItemMenuEnumO(layout, C, opname, propname, name, icon);
+	uiItemMenuEnumO_ptr(layout, C, ot, propname, name, icon);
 }
 
 static void rna_uiItemL(uiLayout *layout, const char *name, const char *text_ctxt, int translate,



More information about the Bf-blender-cvs mailing list