filemanager: align UI plugin registration with reader

With the addition of the language support module, ReaderDictionary
tries to use modules registered with the UI instance, but the
FileManager doesn't provide key-based registration of its UI modules.

In order to allow the same code to be used by both FileManager and
Reader seamlessly, copy the :registerPlugin() method from Reader and use
it with FileManager. This will ensure any other hidden assumptions about
UI module registration are handled properly.

Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
pull/8379/head
Aleksa Sarai 3 years ago committed by poire-z
parent f301ca59b7
commit cdbedcbcce

@ -490,24 +490,38 @@ function FileManager:setupLayout()
end
end
function FileManager:registerModule(name, ui_module, always_active)
if name then
self[name] = ui_module
ui_module.name = "filemanager" .. name
end
table.insert(self, ui_module)
if always_active then
-- to get events even when hidden
table.insert(self.active_widgets, ui_module)
end
end
-- NOTE: The only thing that will *ever* instantiate a new FileManager object is our very own showFiles below!
function FileManager:init()
self:setupLayout()
local screenshoter = Screenshoter:new{ prefix = 'FileManager' }
table.insert(self, screenshoter) -- for regular events
self.active_widgets = { screenshoter } -- to get events even when hidden
table.insert(self, self.menu)
table.insert(self, FileManagerHistory:new{ ui = self })
table.insert(self, FileManagerCollection:new{ ui = self })
table.insert(self, FileManagerFileSearcher:new{ ui = self })
table.insert(self, FileManagerShortcuts:new{ ui = self })
table.insert(self, LanguageSupport:new{ ui = self })
table.insert(self, ReaderDictionary:new{ ui = self })
table.insert(self, ReaderWikipedia:new{ ui = self })
table.insert(self, ReaderDeviceStatus:new{ ui = self })
table.insert(self, DeviceListener:new{ ui = self })
self.active_widgets = {}
self:registerModule("screenshot", Screenshoter:new{
prefix = 'FileManager',
ui = self,
}, true)
self:registerModule("menu", self.menu)
self:registerModule("history", FileManagerHistory:new{ ui = self })
self:registerModule("collections", FileManagerCollection:new{ ui = self })
self:registerModule("filesearcher", FileManagerFileSearcher:new{ ui = self })
self:registerModule("folder_shortcuts", FileManagerShortcuts:new{ ui = self })
self:registerModule("languagesupport", LanguageSupport:new{ ui = self })
self:registerModule("dictionary", ReaderDictionary:new{ ui = self })
self:registerModule("wikipedia", ReaderWikipedia:new{ ui = self })
self:registerModule("devicestatus", ReaderDeviceStatus:new{ ui = self })
self:registerModule("devicelistener", DeviceListener:new{ ui = self })
-- koreader plugins
for _, plugin_module in ipairs(PluginLoader:loadPlugins()) do
@ -516,10 +530,8 @@ function FileManager:init()
plugin_module, { ui = self, })
-- Keep references to the modules which do not register into menu.
if ok then
local name = plugin_module.name
if name then self[name] = plugin_or_err end
table.insert(self, plugin_or_err)
logger.dbg("FM loaded plugin", name,
self:registerModule(plugin_module.name, plugin_or_err)
logger.dbg("FM loaded plugin", plugin_module.name,
"at", plugin_module.path)
end
end

@ -83,8 +83,10 @@ local ReaderUI = InputContainer:new{
}
function ReaderUI:registerModule(name, ui_module, always_active)
if name then self[name] = ui_module end
ui_module.name = "reader" .. name
if name then
self[name] = ui_module
ui_module.name = "reader" .. name
end
table.insert(self, ui_module)
if always_active then
-- to get events even when hidden

Loading…
Cancel
Save