Bugfix #25264
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:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user