Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/editors/include/UI_interface.h1
-rw-r--r--source/blender/editors/interface/interface_layout.c23
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c10
3 files changed, 30 insertions, 4 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 8e44d7f386e..313791e28cb 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -678,6 +678,7 @@ void uiItemEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr,
void uiItemEnumR_string(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, char *value);
void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, char *propname);
void uiItemPointerR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, struct PointerRNA *searchptr, char *searchpropname);
+void uiItemsFullEnumO(uiLayout *layout, char *opname, char *propname, struct IDProperty *properties, int context, int flag);
void uiItemL(uiLayout *layout, char *name, int icon); /* label */
void uiItemM(uiLayout *layout, struct bContext *C, char *name, int icon, char *menuname); /* menu */
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index b0670be63a2..9dd5535ea30 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -695,7 +695,7 @@ void uiItemEnumO(uiLayout *layout, char *name, int icon, char *opname, char *pro
uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext, 0);
}
-void uiItemsEnumO(uiLayout *layout, char *opname, char *propname)
+void uiItemsFullEnumO(uiLayout *layout, char *opname, char *propname, IDProperty *properties, int context, int flag)
{
wmOperatorType *ot= WM_operatortype_find(opname, 0);
PointerRNA ptr;
@@ -721,7 +721,21 @@ void uiItemsEnumO(uiLayout *layout, char *opname, char *propname)
for(i=0; i<totitem; i++) {
if(item[i].identifier[0]) {
- uiItemEnumO(column, (char*)item[i].name, item[i].icon, opname, propname, item[i].value);
+ if(properties) {
+ PointerRNA ptr;
+
+ WM_operator_properties_create(&ptr, opname);
+ if(ptr.data) {
+ IDP_FreeProperty(ptr.data);
+ MEM_freeN(ptr.data);
+ }
+ ptr.data= IDP_CopyProperty(properties);
+ RNA_enum_set(&ptr, propname, item[i].value);
+
+ uiItemFullO(column, (char*)item[i].name, item[i].icon, opname, ptr.data, context, flag);
+ }
+ else
+ uiItemEnumO(column, (char*)item[i].name, item[i].icon, opname, propname, item[i].value);
}
else {
if(item[i].name) {
@@ -745,6 +759,11 @@ void uiItemsEnumO(uiLayout *layout, char *opname, char *propname)
}
}
+void uiItemsEnumO(uiLayout *layout, char *opname, char *propname)
+{
+ uiItemsFullEnumO(layout, opname, propname, NULL, layout->root->opcontext, 0);
+}
+
/* for use in cases where we have */
void uiItemEnumO_string(uiLayout *layout, char *name, int icon, char *opname, char *propname, char *value_str)
{
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index fc5abec1561..d65580681eb 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -621,7 +621,7 @@ int WM_menu_invoke(bContext *C, wmOperator *op, wmEvent *event)
else {
pup= uiPupMenuBegin(C, op->type->name, 0);
layout= uiPupMenuLayout(pup);
- uiItemsEnumO(layout, op->type->idname, (char*)RNA_property_identifier(prop));
+ uiItemsFullEnumO(layout, op->type->idname, (char*)RNA_property_identifier(prop), op->ptr->data, WM_OP_EXEC_REGION_WIN, 0);
uiPupMenuEnd(C, pup);
}
@@ -633,10 +633,16 @@ int WM_operator_confirm_message(bContext *C, wmOperator *op, char *message)
{
uiPopupMenu *pup;
uiLayout *layout;
+ IDProperty *properties= op->ptr->data;
+
+ if(properties && properties->len)
+ properties= IDP_CopyProperty(op->ptr->data);
+ else
+ properties= NULL;
pup= uiPupMenuBegin(C, "OK?", ICON_QUESTION);
layout= uiPupMenuLayout(pup);
- uiItemO(layout, message, 0, op->type->idname);
+ uiItemFullO(layout, message, 0, op->type->idname, properties, WM_OP_EXEC_REGION_WIN, 0);
uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;