diff --git a/frontend/dispatcher.lua b/frontend/dispatcher.lua index 54bf48e20..2f62da10d 100644 --- a/frontend/dispatcher.lua +++ b/frontend/dispatcher.lua @@ -542,6 +542,7 @@ function Dispatcher:addItem(caller, menu, location, settings, section) end end, separator = settingsList[k].separator, + menu_item_id = k, }) end end diff --git a/frontend/ui/widget/touchmenu.lua b/frontend/ui/widget/touchmenu.lua index 60a7caa5a..0592fffd3 100644 --- a/frontend/ui/widget/touchmenu.lua +++ b/frontend/ui/widget/touchmenu.lua @@ -420,6 +420,7 @@ local TouchMenu = FocusManager:new{ tab_item_table = nil, -- mandatory -- for returning in multi-level menus item_table_stack = nil, + parent_id = nil, item_table = nil, item_height = Size.item.height_large, bordersize = Size.border.window, @@ -757,6 +758,7 @@ function TouchMenu:switchMenuTab(tab_num) self.page = 1 -- clear item table stack self.item_table_stack = {} + self.parent_id = nil self.cur_tab = tab_num self.item_table = self.tab_item_table[tab_num] self:updateItems() @@ -766,6 +768,16 @@ function TouchMenu:backToUpperMenu() if #self.item_table_stack ~= 0 then self.item_table = table.remove(self.item_table_stack) self.page = 1 + if self.parent_id then + self:_recalculatePageLayout() -- we need an accurate self.perpage + for i = 1, #self.item_table do + if self.item_table[i].menu_item_id == self.parent_id then + self.page = math.floor( (i - 1) / self.perpage ) + 1 + break + end + end + self.parent_id = nil + end self:updateItems() else self:closeMenu() @@ -857,6 +869,7 @@ function TouchMenu:onMenuSelect(item) end else table.insert(self.item_table_stack, self.item_table) + self.parent_id = item.menu_item_id self.item_table = sub_item_table self.page = 1 if self.item_table.open_on_menu_item_id_func then