trigger EVT_PROPS_CHANGED when props removed

This commit is contained in:
lixianjing 2025-04-25 17:25:05 +08:00
parent da82e22d62
commit 293492c1b4
5 changed files with 24 additions and 2 deletions

View File

@ -1,5 +1,8 @@
# 最新动态
2025/04/25
* object有属性删除时发送EVT_PROPS_CHANGED事件(感谢兆坤提供补丁)。
2025/04/23
* fscript 支持 %开头的变量名。

View File

@ -344,6 +344,10 @@ ret_t tk_object_remove_prop(tk_object_t* obj, const char* name) {
ret = obj->vt->remove_prop(obj, name);
}
if (RET_OK == ret) {
tk_object_notify_changed(obj);
}
return ret;
}
@ -861,6 +865,10 @@ ret_t tk_object_clear_props(tk_object_t* obj) {
ret = obj->vt->clear_props(obj);
}
if (RET_OK == ret) {
tk_object_notify_changed(obj);
}
return ret;
}

View File

@ -51,6 +51,7 @@ static ret_t object_array_clean_invalid_props(tk_object_t* obj) {
if (changed) {
emitter_dispatch_simple_event(EMITTER(o), EVT_ITEMS_CHANGED);
object_notify_changed(obj);
}
}

View File

@ -268,6 +268,7 @@ static ret_t object_default_foreach_prop(tk_object_t* obj, tk_visit_t on_prop, v
object_default_t* o = OBJECT_DEFAULT(obj);
return_value_if_fail(o != NULL && on_prop != NULL, RET_BAD_PARAMS);
if (o->props.size > 0) {
bool_t has_removed = FALSE;
uint32_t i = 0;
for (i = 0; i < o->props.size; i++) {
named_value_t* iter = (named_value_t*)(o->props.elms[i]);
@ -275,11 +276,15 @@ static ret_t object_default_foreach_prop(tk_object_t* obj, tk_visit_t on_prop, v
if (ret == RET_REMOVE) {
named_value_destroy(iter);
o->props.elms[i] = NULL;
has_removed = TRUE;
} else if (ret != RET_OK) {
break;
}
}
darray_remove_all(&(o->props), pointer_compare, NULL);
if (has_removed) {
darray_remove_all(&(o->props), pointer_compare, NULL);
tk_object_notify_changed(obj);
}
}
return ret;

View File

@ -315,6 +315,7 @@ static ret_t object_hash_foreach_prop(tk_object_t* obj, tk_visit_t on_prop, void
object_hash_t* o = OBJECT_HASH(obj);
return_value_if_fail(o != NULL && on_prop != NULL, RET_BAD_PARAMS);
if (o->props.size > 0) {
bool_t has_removed = FALSE;
uint32_t i = 0;
for (i = 0; i < o->props.size; i++) {
named_value_hash_t* iter = (named_value_hash_t*)(o->props.elms[i]);
@ -322,11 +323,15 @@ static ret_t object_hash_foreach_prop(tk_object_t* obj, tk_visit_t on_prop, void
if (ret == RET_REMOVE) {
named_value_hash_destroy(iter);
o->props.elms[i] = NULL;
has_removed = TRUE;
} else if (ret != RET_OK) {
break;
}
}
darray_remove_all(&(o->props), pointer_compare, NULL);
if (has_removed) {
darray_remove_all(&(o->props), pointer_compare, NULL);
tk_object_notify_changed(obj);
}
}
return ret;