Add luaK_fini
This commit is contained in:
parent
1d073cf0ea
commit
9fb2b2ce43
3 changed files with 26 additions and 0 deletions
|
@ -16,9 +16,11 @@
|
||||||
|
|
||||||
struct kiwmi_lua {
|
struct kiwmi_lua {
|
||||||
lua_State *L;
|
lua_State *L;
|
||||||
|
struct wl_list callbacks; // lua_callback::link
|
||||||
};
|
};
|
||||||
|
|
||||||
bool luaK_init(struct kiwmi_server *server);
|
bool luaK_init(struct kiwmi_server *server);
|
||||||
bool luaK_dofile(struct kiwmi_lua *lua, const char *config_path);
|
bool luaK_dofile(struct kiwmi_lua *lua, const char *config_path);
|
||||||
|
void luaK_fini(struct kiwmi_lua *lua);
|
||||||
|
|
||||||
#endif /* KIWMI_LUAK_H */
|
#endif /* KIWMI_LUAK_H */
|
||||||
|
|
22
kiwmi/luak.c
22
kiwmi/luak.c
|
@ -21,6 +21,7 @@
|
||||||
#include "input/input.h"
|
#include "input/input.h"
|
||||||
|
|
||||||
struct lua_callback {
|
struct lua_callback {
|
||||||
|
struct wl_list link;
|
||||||
struct kiwmi_server *server;
|
struct kiwmi_server *server;
|
||||||
int callback_ref;
|
int callback_ref;
|
||||||
struct wl_listener listener;
|
struct wl_listener listener;
|
||||||
|
@ -34,6 +35,8 @@ l_lua_callback_cancel(lua_State *L)
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
|
|
||||||
wl_list_remove(&lc->listener.link);
|
wl_list_remove(&lc->listener.link);
|
||||||
|
wl_list_remove(&lc->link);
|
||||||
|
|
||||||
free(lc);
|
free(lc);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -170,6 +173,8 @@ on_cursor_button(lua_State *L)
|
||||||
struct kiwmi_server *server = get_server(L);
|
struct kiwmi_server *server = get_server(L);
|
||||||
struct kiwmi_cursor *cursor = server->input.cursor;
|
struct kiwmi_cursor *cursor = server->input.cursor;
|
||||||
|
|
||||||
|
wl_list_insert(&server->lua->callbacks, &lc->link);
|
||||||
|
|
||||||
lc->server = server;
|
lc->server = server;
|
||||||
lc->callback_ref = luaL_ref(L, LUA_REGISTRYINDEX);
|
lc->callback_ref = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||||
|
|
||||||
|
@ -269,6 +274,8 @@ luaK_init(struct kiwmi_server *server)
|
||||||
lua->L = L;
|
lua->L = L;
|
||||||
server->lua = lua;
|
server->lua = lua;
|
||||||
|
|
||||||
|
wl_list_init(&lua->callbacks);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,3 +290,18 @@ luaK_dofile(struct kiwmi_lua *lua, const char *config_path)
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
luaK_fini(struct kiwmi_lua *lua)
|
||||||
|
{
|
||||||
|
struct lua_callback *lc;
|
||||||
|
struct lua_callback *tmp;
|
||||||
|
wl_list_for_each_safe(lc, tmp, &lua->callbacks, link) {
|
||||||
|
wl_list_remove(&lc->listener.link);
|
||||||
|
wl_list_remove(&lc->link);
|
||||||
|
|
||||||
|
free(lc);
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_close(lua->L);
|
||||||
|
}
|
||||||
|
|
|
@ -128,5 +128,7 @@ server_fini(struct kiwmi_server *server)
|
||||||
wl_display_destroy_clients(server->wl_display);
|
wl_display_destroy_clients(server->wl_display);
|
||||||
wl_display_destroy(server->wl_display);
|
wl_display_destroy(server->wl_display);
|
||||||
|
|
||||||
|
luaK_fini(server->lua);
|
||||||
|
|
||||||
free(server->config_path);
|
free(server->config_path);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue