diff options
-rw-r--r-- | source/blender/blenkernel/intern/library.c | 10 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_templates.c | 4 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_ID.c | 6 |
3 files changed, 13 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index 8e1220dde24..ce9e7ddf0ce 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -138,8 +138,14 @@ void id_us_plus(ID *id) void id_us_min(ID *id) { - if(id) - id->us--; + if(id) { + if(id->us<2 && (id->flag & LIB_FAKEUSER)) + id->us= 1; + else if(id->us<=0) + printf("ID user decrement error: %s \n", id->name); + else + id->us--; + } } int id_make_local(ID *id, int test) diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 7e52ee6c6d0..3b5fa09abfd 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -252,8 +252,8 @@ static void template_id_cb(bContext *C, void *arg_litem, void *arg_event) break; case UI_ID_FAKE_USER: if(id) { - if(id->flag & LIB_FAKEUSER) id->us++; - else id->us--; + if(id->flag & LIB_FAKEUSER) id_us_plus(id); + else id_us_min(id); } else return; break; diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index 91c6fcdf40a..69342068a57 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -190,11 +190,11 @@ void rna_ID_fake_user_set(PointerRNA *ptr, int value) if(value && !(id->flag & LIB_FAKEUSER)) { id->flag |= LIB_FAKEUSER; - id->us++; + id_us_plus(id); } else if(!value && (id->flag & LIB_FAKEUSER)) { id->flag &= ~LIB_FAKEUSER; - id->us--; + id_us_min(id); } } @@ -241,7 +241,7 @@ ID *rna_ID_copy(ID *id) ID *newid; if(id_copy(id, &newid, 0)) { - if(newid) newid->us--; + if(newid) id_us_min(newid); return newid; } |