mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-21 03:40:57 +00:00
Make onChange callbacks more predictable
This commit is contained in:
parent
a90853f765
commit
bf53fa26cd
@ -135,18 +135,18 @@ int Site_set_onChange(lua_State* L)
|
||||
auto site = get_obj<Site>(L, 1);
|
||||
auto obs = ScriptSiteObserver::instance();
|
||||
|
||||
if (lua_isnil(L, 2) && obs->callbackRef()) {
|
||||
luaL_unref(L, LUA_REGISTRYINDEX, obs->callbackRef());
|
||||
obs->setCallbackRef(0);
|
||||
App::instance()->context()->remove_observer(obs);
|
||||
}
|
||||
else if (lua_isfunction(L, 2)) {
|
||||
if (lua_isfunction(L, 2)) {
|
||||
int onchangeRef = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||
if (!obs->callbackRef()) {
|
||||
App::instance()->context()->add_observer(obs);
|
||||
}
|
||||
obs->setCallbackRef(onchangeRef);
|
||||
}
|
||||
else if (obs->callbackRef()) {
|
||||
luaL_unref(L, LUA_REGISTRYINDEX, obs->callbackRef());
|
||||
obs->setCallbackRef(0);
|
||||
App::instance()->context()->remove_observer(obs);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -176,11 +176,6 @@ int Sprite_gc(lua_State* L)
|
||||
{
|
||||
auto sprite = get_docobj<Sprite>(L, 1);
|
||||
auto doc = static_cast<Doc*>(sprite->document());
|
||||
|
||||
if (ScriptDocObserver* obs = script_observers[sprite->id()]) {
|
||||
doc->undoHistory()->remove_observer(obs);
|
||||
script_observers.erase(sprite->id());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -659,13 +654,7 @@ int Sprite_set_onChange(lua_State* L)
|
||||
auto doc = static_cast<Doc*>(sprite->document());
|
||||
ScriptDocObserver* obs = script_observers[sprite->id()];
|
||||
|
||||
if (lua_isnil(L, 2) && obs) {
|
||||
doc->undoHistory()->remove_observer(obs);
|
||||
script_observers.erase(sprite->id());
|
||||
luaL_unref(L, LUA_REGISTRYINDEX, obs->callbackRef());
|
||||
delete obs;
|
||||
}
|
||||
else if (lua_isfunction(L, 2)) {
|
||||
if (lua_isfunction(L, 2)) {
|
||||
int callbackRef = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||
if (obs) {
|
||||
obs->setCallbackRef(callbackRef);
|
||||
@ -676,6 +665,13 @@ int Sprite_set_onChange(lua_State* L)
|
||||
script_observers[sprite->id()] = obs;
|
||||
}
|
||||
}
|
||||
else if (obs) {
|
||||
doc->undoHistory()->remove_observer(obs);
|
||||
script_observers.erase(sprite->id());
|
||||
luaL_unref(L, LUA_REGISTRYINDEX, obs->callbackRef());
|
||||
delete obs;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user