Revision: 25519 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25519 Author: blendix Date: 2009-12-22 12:59:30 +0100 (Tue, 22 Dec 2009)
Log Message: ----------- Fix #20433: make single user doesn't work from menu. Popup menus for operators were not passing along properties. Modified Paths: -------------- trunk/blender/source/blender/editors/include/UI_interface.h trunk/blender/source/blender/editors/interface/interface_layout.c trunk/blender/source/blender/windowmanager/intern/wm_operators.c Modified: trunk/blender/source/blender/editors/include/UI_interface.h =================================================================== --- trunk/blender/source/blender/editors/include/UI_interface.h 2009-12-22 11:13:17 UTC (rev 25518) +++ trunk/blender/source/blender/editors/include/UI_interface.h 2009-12-22 11:59:30 UTC (rev 25519) @@ -678,6 +678,7 @@ 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 */ Modified: trunk/blender/source/blender/editors/interface/interface_layout.c =================================================================== --- trunk/blender/source/blender/editors/interface/interface_layout.c 2009-12-22 11:13:17 UTC (rev 25518) +++ trunk/blender/source/blender/editors/interface/interface_layout.c 2009-12-22 11:59:30 UTC (rev 25519) @@ -695,7 +695,7 @@ 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 @@ 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) +{ + 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) { Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c =================================================================== --- trunk/blender/source/blender/windowmanager/intern/wm_operators.c 2009-12-22 11:13:17 UTC (rev 25518) +++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c 2009-12-22 11:59:30 UTC (rev 25519) @@ -621,7 +621,7 @@ 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 @@ { 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; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs