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

Reply via email to