diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2015-11-09 21:47:10 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2015-11-09 23:00:53 +0300 |
commit | 865796375bcfa6be4288cca4243dddcb4092f70b (patch) | |
tree | 5264d4b9b0f9d392b6e1b942e0f6fd802de1fff4 /source/blender/editors/object/object_relations.c | |
parent | cf959a879eb5ffbdfa573c5f3a00965e69d7a976 (diff) |
Cleanup: avoid incrementing/decrementing id->us outside of BKE_library.
We have callbacks for that, they also do some checks and help ensure things are done
correctly. Only place where this is assumed not true is blenloader (since here we
may affect refcount of library IDs as well...).
Diffstat (limited to 'source/blender/editors/object/object_relations.c')
-rw-r--r-- | source/blender/editors/object/object_relations.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index 3d030f1a770..a89ef8b7e85 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -1555,7 +1555,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op) switch (type) { case MAKE_LINKS_OBDATA: /* obdata */ - obdata_id->us--; + id_us_min(obdata_id); obdata_id = ob_src->data; id_us_plus(obdata_id); @@ -1624,16 +1624,20 @@ static int make_links_data_exec(bContext *C, wmOperator *op) break; } - if (cu_dst->vfont) cu_dst->vfont->id.us--; + if (cu_dst->vfont) + id_us_min(&cu_dst->vfont->id); cu_dst->vfont = cu_src->vfont; id_us_plus((ID *)cu_dst->vfont); - if (cu_dst->vfontb) cu_dst->vfontb->id.us--; + if (cu_dst->vfontb) + id_us_min(&cu_dst->vfontb->id); cu_dst->vfontb = cu_src->vfontb; id_us_plus((ID *)cu_dst->vfontb); - if (cu_dst->vfonti) cu_dst->vfonti->id.us--; + if (cu_dst->vfonti) + id_us_min(&cu_dst->vfonti->id); cu_dst->vfonti = cu_src->vfonti; id_us_plus((ID *)cu_dst->vfonti); - if (cu_dst->vfontbi) cu_dst->vfontbi->id.us--; + if (cu_dst->vfontbi) + id_us_min(&cu_dst->vfontbi->id); cu_dst->vfontbi = cu_src->vfontbi; id_us_plus((ID *)cu_dst->vfontbi); @@ -1758,7 +1762,7 @@ static void single_object_users(Main *bmain, Scene *scene, View3D *v3d, const in } base->flag = obn->flag; - ob->id.us--; + id_us_min(&ob->id); } } } @@ -1826,11 +1830,11 @@ static void new_id_matar(Material **matar, const int totcol) if (id->newid) { matar[a] = (Material *)id->newid; id_us_plus(id->newid); - id->us--; + id_us_min(id); } else if (id->us > 1) { matar[a] = BKE_material_copy(matar[a]); - id->us--; + id_us_min(id); id->newid = (ID *)matar[a]; } } @@ -1912,7 +1916,7 @@ static void single_obdata_users(Main *bmain, Scene *scene, const int flag) */ BKE_animdata_copy_id_action((ID *)ob->data); - id->us--; + id_us_min(id); id->newid = ob->data; } } @@ -1966,7 +1970,7 @@ static void single_mat_users(Scene *scene, const int flag, const bool do_texture for (b = 0; b < MAX_MTEX; b++) { if (ma->mtex[b] && (tex = ma->mtex[b]->tex)) { if (tex->id.us > 1) { - tex->id.us--; + id_us_min(&tex->id); tex = BKE_texture_copy(tex); BKE_animdata_copy_id_action(&tex->id); man->mtex[b]->tex = tex; @@ -1991,13 +1995,13 @@ static void do_single_tex_user(Tex **from) if (tex->id.newid) { *from = (Tex *)tex->id.newid; id_us_plus(tex->id.newid); - tex->id.us--; + id_us_min(&tex->id); } else if (tex->id.us > 1) { texn = BKE_texture_copy(tex); BKE_animdata_copy_id_action(&texn->id); tex->id.newid = (ID *)texn; - tex->id.us--; + id_us_min(&tex->id); *from = texn; } } |