From e6fcea6e26a09b61a97ff23e18ab8dfb5671052f Mon Sep 17 00:00:00 2001 From: poire-z Date: Sat, 7 Oct 2017 12:11:00 +0200 Subject: [PATCH] Fix crash with keyboard navigation of onHold buttontables (#3307) * Fix crash with keyboard navigation of onHold buttontables Would crash when encountering a separator or when the number of buttons in a row changes. * Reset previous selected item on new buttontable --- frontend/ui/widget/buttontable.lua | 1 + frontend/ui/widget/focusmanager.lua | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/frontend/ui/widget/buttontable.lua b/frontend/ui/widget/buttontable.lua index c50aac0e2..dff68035c 100644 --- a/frontend/ui/widget/buttontable.lua +++ b/frontend/ui/widget/buttontable.lua @@ -27,6 +27,7 @@ local ButtonTable = FocusManager:new{ } function ButtonTable:init() + self.selected = { x = 1, y = 1 } self.buttons_layout = {} self.container = VerticalGroup:new{ width = self.width } table.insert(self, self.container) diff --git a/frontend/ui/widget/focusmanager.lua b/frontend/ui/widget/focusmanager.lua index 213ea4673..2912b2416 100644 --- a/frontend/ui/widget/focusmanager.lua +++ b/frontend/ui/widget/focusmanager.lua @@ -73,8 +73,15 @@ function FocusManager:onFocusMove(args) end else self.selected.y = self.selected.y + dy + if #self.layout[self.selected.y] == 0 then -- horizontal separator + self.selected.y = self.selected.y + dy -- skip it + end end self.selected.x = self.selected.x + dx + if self.selected.x > #self.layout[self.selected.y] then + -- smaller nb of items on new row than on prev row + self.selected.x = #self.layout[self.selected.y] + end if self.layout[self.selected.y][self.selected.x] ~= current_item or not self.layout[self.selected.y][self.selected.x].is_inactive then