[Bf-blender-cvs] [817319a79ef] blender2.8: UI: add uiItemMenuFN which frees it's argument
Campbell Barton
noreply at git.blender.org
Tue Oct 30 00:59:30 CET 2018
Commit: 817319a79ef36aad920ed1f8bbb7a617dabc697f
Author: Campbell Barton
Date: Tue Oct 30 10:46:29 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB817319a79ef36aad920ed1f8bbb7a617dabc697f
UI: add uiItemMenuFN which frees it's argument
===================================================================
M source/blender/editors/include/UI_interface.h
M source/blender/editors/interface/interface_layout.c
===================================================================
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index cbca7c8c921..0f160d7263b 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -1203,6 +1203,7 @@ void uiItemPopoverPanelFromGroup(
const char *context, const char *category);
void uiItemMenuF(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *arg);
+void uiItemMenuFN(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *argN);
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);
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index e2b1818c958..920d9044f02 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -2224,8 +2224,11 @@ static uiBut *ui_item_menu(
else
but = uiDefMenuBut(block, func, arg, name, 0, 0, w, h, tip);
- if (argN) { /* ugly .. */
- but->poin = (char *)but;
+ if (argN) {
+ /* ugly .. */
+ if (arg != argN) {
+ but->poin = (char *)but;
+ }
but->func_argN = argN;
}
@@ -2451,6 +2454,18 @@ void uiItemMenuF(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc
ui_item_menu(layout, name, icon, func, arg, NULL, "", false);
}
+/**
+ * Version of #uiItemMenuF that free's `argN`.
+ */
+void uiItemMenuFN(uiLayout *layout, const char *name, int icon, uiMenuCreateFunc func, void *argN)
+{
+ if (!func)
+ return;
+
+ /* Second 'argN' only ensures it gets freed. */
+ ui_item_menu(layout, name, icon, func, argN, argN, "", false);
+}
+
typedef struct MenuItemLevel {
int opcontext;
/* don't use pointers to the strings because python can dynamically
More information about the Bf-blender-cvs
mailing list