Bad user counting went on, ID users could be set zero whilst
having Fake user set. Also ensured the code using the BKE
calls for increment/decrement.
This commit is contained in:
2010-12-17 14:20:20 +00:00
parent 12a93c5b0f
commit e5e039d626
3 changed files with 13 additions and 7 deletions

View File

@@ -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)

View File

@@ -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;

View File

@@ -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;
}