Edit last commit, redundant 'data' in RNA path

This commit is contained in:
Campbell Barton 2015-05-13 07:36:43 +10:00
parent ee3dde2d49
commit b3334d936f

@ -58,7 +58,6 @@
#include "WM_types.h" #include "WM_types.h"
#include "ED_paint.h" #include "ED_paint.h"
#include "ED_object.h"
/* only for UI_OT_editsource */ /* only for UI_OT_editsource */
#include "ED_screen.h" #include "ED_screen.h"
@ -289,48 +288,45 @@ bool UI_context_copy_to_selected_list(
} }
else if (OB_DATA_SUPPORT_ID(GS(id->name))) { else if (OB_DATA_SUPPORT_ID(GS(id->name))) {
/* check we're using the active object */ /* check we're using the active object */
const short id_code = GS(id->name);
ListBase lb = CTX_data_collection_get(C, "selected_editable_objects");
char *path = RNA_path_from_ID_to_property(ptr, prop);
Object *ob = ED_object_context(C); /* de-duplicate obdata */
if (ob && ob->data == id) { if (!BLI_listbase_is_empty(&lb)) {
const short id_code = GS(id->name); CollectionPointerLink *link, *link_next;
ListBase lb = CTX_data_collection_get(C, "selected_editable_objects");
char *path = RNA_path_from_ID_to_property(ptr, prop);
if (path) { for (link = lb.first; link; link = link->next) {
char *path_tmp; Object *ob = link->ptr.id.data;
path_tmp = path; if (ob->data) {
path = BLI_sprintfN("data%s%s", path[0] == '[' ? "" : ".", path); ID *id_data = ob->data;
MEM_freeN(path_tmp); id_data->flag |= LIB_DOIT;
}
/* de-duplicate obdata */
if (!BLI_listbase_is_empty(&lb)) {
CollectionPointerLink *link, *link_next;
for (link = lb.first; link; link = link->next) {
Object *ob = link->ptr.id.data;
if (ob->data) {
ID *id = ob->data;
id->flag |= LIB_DOIT;
}
}
for (link = lb.first; link; link = link_next) {
Object *ob = link->ptr.id.data;
ID *id = ob->data;
link_next = link->next;
if ((id == NULL) || (id->flag & LIB_DOIT) == 0 || (GS(id->name) != id_code)) {
BLI_remlink(&lb, link);
MEM_freeN(link);
}
id->flag &= ~LIB_DOIT;
} }
} }
*r_lb = lb; for (link = lb.first; link; link = link_next) {
*r_path = path; Object *ob = link->ptr.id.data;
ID *id_data = ob->data;
link_next = link->next;
if ((id_data == NULL) ||
(id_data->flag & LIB_DOIT) == 0 ||
(id_data->lib) ||
(GS(id_data->name) != id_code))
{
BLI_remlink(&lb, link);
MEM_freeN(link);
}
else {
/* avoid prepending 'data' to the path */
RNA_id_pointer_create(id_data, &link->ptr);
}
id_data->flag &= ~LIB_DOIT;
}
} }
*r_lb = lb;
*r_path = path;
} }
else if (GS(id->name) == ID_SCE) { else if (GS(id->name) == ID_SCE) {
/* Sequencer's ID is scene :/ */ /* Sequencer's ID is scene :/ */