diff --git a/frontend/dispatcher.lua b/frontend/dispatcher.lua index 8de583e07..05fa1656e 100644 --- a/frontend/dispatcher.lua +++ b/frontend/dispatcher.lua @@ -38,6 +38,7 @@ local UIManager = require("ui/uimanager") local util = require("util") local _ = require("gettext") local C_ = _.pgettext +local N_ = _.ngettext local T = require("ffi/util").template local Dispatcher = { @@ -488,6 +489,17 @@ local function iter_func(settings) end end +-- Returns the number of items present in the settings table +function Dispatcher:_itemsCount(settings) + if settings then + local count = util.tableSize(settings) + if count > 0 and settings.settings ~= nil then + count = count - 1 + end + return count + end +end + -- Returns a display name for the item. function Dispatcher:getNameFromItem(item, settings) if settingsList[item] == nil then @@ -551,17 +563,14 @@ end function Dispatcher:menuTextFunc(settings) local action_name = _("Pass through") if settings then - local count = util.tableSize(settings) + local count = Dispatcher:_itemsCount(settings) if count == 0 then return _("Nothing") end - if count > 1 and settings.settings ~= nil then - count = count - 1 - end if count == 1 then local item = next(settings) if item == "settings" then item = next(settings, item) end action_name = Dispatcher:getNameFromItem(item, settings) else - action_name = _("Many") + action_name = T(N_("", "%1 actions", count), count) end end return action_name @@ -798,10 +807,14 @@ function Dispatcher:addSubMenu(caller, menu, location, settings) text = _("Nothing"), separator = true, checked_func = function() - return location[settings] ~= nil and next(location[settings]) == nil + return location[settings] ~= nil and Dispatcher:_itemsCount(location[settings]) == 0 end, callback = function(touchmenu_instance) + local name = location[settings] and location[settings].settings and location[settings].settings.name location[settings] = {} + if name then + location[settings].settings = { name = name } + end caller.updated = true if touchmenu_instance then touchmenu_instance:updateItems() end end, @@ -931,7 +944,7 @@ function Dispatcher:execute(settings, gesture) if settings.settings ~= nil and settings.settings.show_as_quickmenu == true then return Dispatcher:_showAsMenu(settings) end - local has_many = util.tableSize(settings) > (settings.settings ~= nil and 2 or 1) + local has_many = Dispatcher:_itemsCount(settings) > 1 if has_many then UIManager:broadcastEvent(Event:new("BatchedUpdate")) end