From e0bfebb0b59fa3e16d5102a1ce199c1cde12d016 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Mon, 31 Oct 2022 23:39:11 +0100 Subject: [PATCH] FileManager: Refresh key_events handlers on keyboard hotplug --- frontend/apps/filemanager/filemanager.lua | 16 ++++++++++++++++ frontend/apps/filemanager/filemanagermenu.lua | 16 +++++++++++++--- frontend/ui/widget/menu.lua | 1 - 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index 4d6e863a5..7b6dcc07b 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -65,6 +65,13 @@ function FileManager:onSetRotationMode(rotation) return true end +function FileManager:onPhysicalKeyboardConnected() + -- So that the key navigation shortcuts apply right away. + -- This will also naturally call registerKeyEvents + self:reinit(self.path, self.focused_file) +end +FileManager.onPhysicalKeyboardDisconnected = FileManager.onPhysicalKeyboardConnected + function FileManager:setRotationMode() local locked = G_reader_settings:isTrue("lock_rotation") if not locked then @@ -462,6 +469,11 @@ function FileManager:setupLayout() ui = self } + self:registerKeyEvents() +end + +function FileManager:registerKeyEvents() + -- NOTE: There's no init vs. runtime distinction here, because we go through reinit at runtime. if Device:hasKeys() then self.key_events.Home = { { "Home" } } -- Override the menu.lua way of handling the back key @@ -470,6 +482,10 @@ function FileManager:setupLayout() -- Also remove the handler assigned to the "Back" key by menu.lua self.file_chooser.key_events.Close = nil end + else + self.key_events.Home = nil + self.file_chooser.key_events.Back = nil + self.file_chooser.key_events.Close = nil end end diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index efb2d1c19..933b241d5 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -48,15 +48,25 @@ function FileManagerMenu:init() self.registered_widgets = {} - if Device:hasKeys() then - self.key_events.ShowMenu = { { "Menu" } } - end + self:registerKeyEvents(true) + self.activation_menu = G_reader_settings:readSetting("activate_menu") if self.activation_menu == nil then self.activation_menu = "swipe_tap" end end +function FileManagerMenu:registerKeyEvents(init) + if Device:hasKeys() then + self.key_events.ShowMenu = { { "Menu" } } + elseif not init then + self.key_events.ShowMenu = nil + end +end + +FileManagerMenu.onPhysicalKeyboardConnected = FileManagerMenu.registerKeyEvents +FileManagerMenu.onPhysicalKeyboardDisconnected = FileManagerMenu.registerKeyEvents + function FileManagerMenu:initGesListener() if not Device:isTouchDevice() then return end diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index c6120c48e..017f1e685 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -1168,7 +1168,6 @@ function Menu:switchItemTable(new_title, new_item_table, itemnumber, itemmatch) end function Menu:onScreenResize(dimen) - --- @todo Investigate: could this cause minor memory leaks? self:init() return false end