Fix bug in infinite list causing items to be removed (#253)

custom
ailurux 2 months ago
parent 90b302a9f4
commit fff980a979
  1. 3
      lua/widgets.lua
  2. 16
      src/tangara/lua/lua_database.cpp

@ -346,8 +346,9 @@ function widgets.InfiniteList(parent, iterator, opts)
if this_item < last_selected then if this_item < last_selected then
-- moving backward -- moving backward
if (first_index > 0 and last_index - this_item > 3) then if (first_index > 0 and last_index - this_item > 3) then
local to_add = bck_iterator:prev(); local to_add = bck_iterator:value();
if to_add then if to_add then
bck_iterator:prev()
remove_last() remove_last()
add_item(to_add, first_index - 1) add_item(to_add, first_index - 1)
refresh_group() refresh_group()

@ -250,6 +250,19 @@ static auto db_iterate(lua_State* state) -> int {
return 1; return 1;
} }
static auto db_iterator_value(lua_State* state) -> int {
database::Iterator* it = db_check_iterator(state, 1);
std::optional<database::Record> res = it->value();
if (res) {
push_lua_record(state, *res);
} else {
lua_pushnil(state);
}
return 1;
}
static auto db_iterator_clone(lua_State* state) -> int { static auto db_iterator_clone(lua_State* state) -> int {
database::Iterator* it = db_check_iterator(state, 1); database::Iterator* it = db_check_iterator(state, 1);
push_iterator(state, *it); push_iterator(state, *it);
@ -265,7 +278,8 @@ static auto db_iterator_gc(lua_State* state) -> int {
static const struct luaL_Reg kDbIteratorFuncs[] = { static const struct luaL_Reg kDbIteratorFuncs[] = {
{"next", db_iterate}, {"prev", db_iterate_prev}, {"next", db_iterate}, {"prev", db_iterate_prev},
{"clone", db_iterator_clone}, {"__call", db_iterate}, {"clone", db_iterator_clone}, {"__call", db_iterate},
{"__gc", db_iterator_gc}, {NULL, NULL}}; {"__gc", db_iterator_gc}, {"value", db_iterator_value},
{NULL, NULL}};
static auto record_text(lua_State* state) -> int { static auto record_text(lua_State* state) -> int {
database::Record* rec = db_check_record(state, 1); database::Record* rec = db_check_record(state, 1);

Loading…
Cancel
Save