[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25519] trunk/blender/source/blender: Fix #20433: make single user doesn't work from menu.

Brecht Van Lommel brecht at blender.org
Tue Dec 22 12:59:30 CET 2009


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;





More information about the Bf-blender-cvs mailing list