[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45775] trunk/blender/source/blender/ editors/interface/interface_ops.c: Fix #30998: copy to selected in properties editor not working for bones.
Brecht Van Lommel
brechtvanlommel at pandora.be
Thu Apr 19 12:49:46 CEST 2012
Revision: 45775
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45775
Author: blendix
Date: 2012-04-19 10:49:45 +0000 (Thu, 19 Apr 2012)
Log Message:
-----------
Fix #30998: copy to selected in properties editor not working for bones.
Modified Paths:
--------------
trunk/blender/source/blender/editors/interface/interface_ops.c
Modified: trunk/blender/source/blender/editors/interface/interface_ops.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_ops.c 2012-04-19 09:38:07 UTC (rev 45774)
+++ trunk/blender/source/blender/editors/interface/interface_ops.c 2012-04-19 10:49:45 UTC (rev 45775)
@@ -346,8 +346,10 @@
/* Copy To Selected Operator ------------------------ */
-static int copy_to_selected_list(bContext *C, PointerRNA *ptr, ListBase *lb)
+static int copy_to_selected_list(bContext *C, PointerRNA *ptr, ListBase *lb, int *use_path)
{
+ *use_path = 0;
+
if (RNA_struct_is_a(ptr->type, &RNA_EditBone))
*lb = CTX_data_collection_get(C, "selected_editable_bones");
else if (RNA_struct_is_a(ptr->type, &RNA_PoseBone))
@@ -357,8 +359,10 @@
else {
ID *id = ptr->id.data;
- if(id && GS(id->name) == ID_OB)
+ if (id && GS(id->name) == ID_OB) {
*lb = CTX_data_collection_get(C, "selected_editable_objects");
+ *use_path = 1;
+ }
else
return 0;
}
@@ -375,26 +379,39 @@
uiContextActiveProperty(C, &ptr, &prop, &index);
if (ptr.data && prop) {
- char *path = RNA_path_from_ID_to_property(&ptr, prop);
+ char *path = NULL;
+ int use_path;
CollectionPointerLink *link;
ListBase lb;
- if (path && copy_to_selected_list(C, &ptr, &lb)) {
+ if (!copy_to_selected_list(C, &ptr, &lb, &use_path))
+ return success;
+
+ if (!use_path || (path = RNA_path_from_ID_to_property(&ptr, prop))) {
for (link = lb.first; link; link = link->next) {
if (link->ptr.data != ptr.data) {
- RNA_id_pointer_create(link->ptr.id.data, &idptr);
+ if (use_path) {
+ lprop = NULL;
+ RNA_id_pointer_create(link->ptr.id.data, &idptr);
+ RNA_path_resolve(&idptr, path, &lptr, &lprop);
+ }
+ else {
+ lptr = link->ptr;
+ lprop = prop;
+ }
- if (RNA_path_resolve(&idptr, path, &lptr, &lprop) && lprop == prop) {
+ if (lprop == prop) {
if (RNA_property_editable(&lptr, prop))
success = 1;
}
}
}
- BLI_freelistN(&lb);
+ if (path)
+ MEM_freeN(path);
}
- MEM_freeN(path);
+ BLI_freelistN(&lb);
}
return success;
@@ -412,16 +429,29 @@
/* if there is a valid property that is editable... */
if (ptr.data && prop) {
- char *path = RNA_path_from_ID_to_property(&ptr, prop);
+ char *path = NULL;
+ int use_path;
CollectionPointerLink *link;
ListBase lb;
- if (path && copy_to_selected_list(C, &ptr, &lb)) {
+ if (!copy_to_selected_list(C, &ptr, &lb, &use_path))
+ return success;
+
+ if (!use_path || (path = RNA_path_from_ID_to_property(&ptr, prop))) {
for (link = lb.first; link; link = link->next) {
if (link->ptr.data != ptr.data) {
- RNA_id_pointer_create(link->ptr.id.data, &idptr);
- if (RNA_path_resolve(&idptr, path, &lptr, &lprop) && lprop == prop) {
- if(RNA_property_editable(&lptr, lprop)) {
+ if (use_path) {
+ lprop = NULL;
+ RNA_id_pointer_create(link->ptr.id.data, &idptr);
+ RNA_path_resolve(&idptr, path, &lptr, &lprop);
+ }
+ else {
+ lptr = link->ptr;
+ lprop = prop;
+ }
+
+ if (lprop == prop) {
+ if (RNA_property_editable(&lptr, lprop)) {
if (RNA_property_copy(&lptr, &ptr, prop, (all) ? -1 : index)) {
RNA_property_update(C, &lptr, prop);
success = 1;
@@ -431,10 +461,11 @@
}
}
- BLI_freelistN(&lb);
+ if (path)
+ MEM_freeN(path);
}
- MEM_freeN(path);
+ BLI_freelistN(&lb);
}
return (success) ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
More information about the Bf-blender-cvs
mailing list