diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index 7b6dcc07b..d977543bd 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -473,7 +473,7 @@ function FileManager:setupLayout() end function FileManager:registerKeyEvents() - -- NOTE: There's no init vs. runtime distinction here, because we go through reinit at runtime. + -- NOTE: We need to be surgical here, because this is called through reinit at runtime. if Device:hasKeys() then self.key_events.Home = { { "Home" } } -- Override the menu.lua way of handling the back key diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index 933b241d5..4e5647c8a 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -48,7 +48,7 @@ function FileManagerMenu:init() self.registered_widgets = {} - self:registerKeyEvents(true) + self:registerKeyEvents() self.activation_menu = G_reader_settings:readSetting("activate_menu") if self.activation_menu == nil then @@ -56,16 +56,13 @@ function FileManagerMenu:init() end end -function FileManagerMenu:registerKeyEvents(init) +function FileManagerMenu:registerKeyEvents() 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/apps/reader/modules/readerback.lua b/frontend/apps/reader/modules/readerback.lua index 2de42d379..00b07fa7b 100644 --- a/frontend/apps/reader/modules/readerback.lua +++ b/frontend/apps/reader/modules/readerback.lua @@ -20,7 +20,7 @@ local ReaderBack = EventListener:extend{ } function ReaderBack:init() - self:registerKeyEvents(true) + self:registerKeyEvents() -- Regular function wrapping our method, to avoid re-creating -- an anonymous function at each page turn self._addPreviousLocationToStackCallback = function() @@ -28,16 +28,13 @@ function ReaderBack:init() end end -function ReaderBack:registerKeyEvents(init) +function ReaderBack:registerKeyEvents() if Device:hasKeys() then self.ui.key_events.Back = { { Device.input.group.Back } } - elseif not init then - self.ui.key_events.Back = nil end end ReaderBack.onPhysicalKeyboardConnected = ReaderBack.registerKeyEvents -ReaderBack.onPhysicalKeyboardDisconnected = ReaderBack.registerKeyEvents function ReaderBack:_getCurrentLocation() if self.ui.document.info.has_pages then diff --git a/frontend/apps/reader/modules/readerbookmark.lua b/frontend/apps/reader/modules/readerbookmark.lua index 53d58908e..2ce85931c 100644 --- a/frontend/apps/reader/modules/readerbookmark.lua +++ b/frontend/apps/reader/modules/readerbookmark.lua @@ -37,7 +37,7 @@ local ReaderBookmark = InputContainer:extend{ } function ReaderBookmark:init() - self:registerKeyEvents(true) + self:registerKeyEvents() if G_reader_settings:hasNot("bookmarks_items_per_page") then -- The Bookmarks items per page and items' font size can now be @@ -60,16 +60,13 @@ end function ReaderBookmark:onGesture() end -function ReaderBookmark:registerKeyEvents(init) +function ReaderBookmark:registerKeyEvents() if Device:hasKeyboard() then self.key_events.ShowBookmark = { { "B" } } - elseif not init then - self.key_events.ShowBookmark = nil end end ReaderBookmark.onPhysicalKeyboardConnected = ReaderBookmark.registerKeyEvents -ReaderBookmark.onPhysicalKeyboardDisconnected = ReaderBookmark.registerKeyEvents function ReaderBookmark:addToMainMenu(menu_items) menu_items.bookmarks = { diff --git a/frontend/apps/reader/modules/readerconfig.lua b/frontend/apps/reader/modules/readerconfig.lua index 20c14790b..a11c64dfd 100644 --- a/frontend/apps/reader/modules/readerconfig.lua +++ b/frontend/apps/reader/modules/readerconfig.lua @@ -19,7 +19,7 @@ function ReaderConfig:init() end self.configurable:loadDefaults(self.options) - self:registerKeyEvents(true) + self:registerKeyEvents() self:initGesListener() if G_reader_settings:has("activate_menu") then self.activation_menu = G_reader_settings:readSetting("activate_menu") @@ -33,16 +33,13 @@ end function ReaderConfig:onGesture() end -function ReaderConfig:registerKeyEvents(init) +function ReaderConfig:registerKeyEvents() if Device:hasKeys() then self.key_events.ShowConfigMenu = { { { "Press", "AA" } } } - elseif not init then - self.key_events.ShowConfigMenu = nil end end ReaderConfig.onPhysicalKeyboardConnected = ReaderConfig.registerKeyEvents -ReaderConfig.onPhysicalKeyboardDisconnected = ReaderConfig.registerKeyEvents function ReaderConfig:initGesListener() if not Device:isTouchDevice() then return end diff --git a/frontend/apps/reader/modules/readerfont.lua b/frontend/apps/reader/modules/readerfont.lua index 8a828e32b..de00fefd5 100644 --- a/frontend/apps/reader/modules/readerfont.lua +++ b/frontend/apps/reader/modules/readerfont.lua @@ -31,7 +31,7 @@ local ReaderFont = InputContainer:extend{ } function ReaderFont:init() - self:registerKeyEvents(true) + self:registerKeyEvents() -- Build face_table for menu self.face_table = {} -- Font settings @@ -118,7 +118,7 @@ end function ReaderFont:onGesture() end -function ReaderFont:registerKeyEvents(init) +function ReaderFont:registerKeyEvents() if Device:hasKeyboard() then -- add shortcut for keyboard self.key_events = { @@ -134,13 +134,10 @@ function ReaderFont:registerKeyEvents(init) args = -0.5 }, } - elseif not init then - self.key_events = {} end end ReaderFont.onPhysicalKeyboardConnected = ReaderFont.registerKeyEvents -ReaderFont.onPhysicalKeyboardDisconnected = ReaderFont.registerKeyEvents function ReaderFont:onSetDimensions(dimen) self.dimen = dimen diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index bcc59357e..f80652e07 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -52,7 +52,7 @@ function ReaderHighlight:init() self._previous_indicator_pos = nil self._last_indicator_move_args = {dx = 0, dy = 0, distance = 0, time = time:now()} - self:registerKeyEvents(true) + self:registerKeyEvents() self._highlight_buttons = { -- highlight and add_note are for the document itself, @@ -220,41 +220,28 @@ end function ReaderHighlight:onGesture() end -function ReaderHighlight:registerKeyEvents(init) - if Device:hasDPad() then +function ReaderHighlight:registerKeyEvents() + if Device:hasKeys() then -- Used for text selection with dpad/keys local QUICK_INDICATOR_MOVE = true - self.key_events.StopHighlightIndicator = { { Device.input.group.Back }, args = true } -- true: clear highlight selection - self.key_events.UpHighlightIndicator = { { "Up" }, event = "MoveHighlightIndicator", args = {0, -1} } - self.key_events.DownHighlightIndicator = { { "Down" }, event = "MoveHighlightIndicator", args = {0, 1} } - -- let FewKeys device can move indicator left - self.key_events.LeftHighlightIndicator = { { "Left" }, event = "MoveHighlightIndicator", args = {-1, 0} } - self.key_events.RightHighlightIndicator = { { "Right" }, event = "MoveHighlightIndicator", args = {1, 0} } - self.key_events.HighlightPress = { { "Press" } } - if Device:hasKeys() then - self.key_events.QuickUpHighlightIndicator = { { "Shift", "Up" }, event = "MoveHighlightIndicator", args = {0, -1, QUICK_INDICATOR_MOVE} } - self.key_events.QuickDownHighlightIndicator = { { "Shift", "Down" }, event = "MoveHighlightIndicator", args = {0, 1, QUICK_INDICATOR_MOVE} } - self.key_events.QuickLeftHighlightIndicator = { { "Shift", "Left" }, event = "MoveHighlightIndicator", args = {-1, 0, QUICK_INDICATOR_MOVE} } - self.key_events.QuickRightHighlightIndicator = { { "Shift", "Right" }, event = "MoveHighlightIndicator", args = {1, 0, QUICK_INDICATOR_MOVE} } - self.key_events.StartHighlightIndicator = { { "H" } } + self.key_events.QuickUpHighlightIndicator = { { "Shift", "Up" }, event = "MoveHighlightIndicator", args = {0, -1, QUICK_INDICATOR_MOVE} } + self.key_events.QuickDownHighlightIndicator = { { "Shift", "Down" }, event = "MoveHighlightIndicator", args = {0, 1, QUICK_INDICATOR_MOVE} } + self.key_events.QuickLeftHighlightIndicator = { { "Shift", "Left" }, event = "MoveHighlightIndicator", args = {-1, 0, QUICK_INDICATOR_MOVE} } + self.key_events.QuickRightHighlightIndicator = { { "Shift", "Right" }, event = "MoveHighlightIndicator", args = {1, 0, QUICK_INDICATOR_MOVE} } + self.key_events.StartHighlightIndicator = { { "H" } } + if Device:hasDPad() then + self.key_events.StopHighlightIndicator = { { Device.input.group.Back }, args = true } -- true: clear highlight selection + self.key_events.UpHighlightIndicator = { { "Up" }, event = "MoveHighlightIndicator", args = {0, -1} } + self.key_events.DownHighlightIndicator = { { "Down" }, event = "MoveHighlightIndicator", args = {0, 1} } + -- let hasFewKeys device move the indicator left + self.key_events.LeftHighlightIndicator = { { "Left" }, event = "MoveHighlightIndicator", args = {-1, 0} } + self.key_events.RightHighlightIndicator = { { "Right" }, event = "MoveHighlightIndicator", args = {1, 0} } + self.key_events.HighlightPress = { { "Press" } } end - elseif not init then - self.key_events.StopHighlightIndicator = nil - self.key_events.UpHighlightIndicator = nil - self.key_events.DownHighlightIndicator = nil - self.key_events.LeftHighlightIndicator = nil - self.key_events.RightHighlightIndicator = nil - self.key_events.HighlightPress = nil - self.key_events.QuickUpHighlightIndicator = nil - self.key_events.QuickDownHighlightIndicator = nil - self.key_events.QuickLeftHighlightIndicator = nil - self.key_events.QuickRightHighlightIndicator = nil - self.key_events.StartHighlightIndicator = nil end end ReaderHighlight.onPhysicalKeyboardConnected = ReaderHighlight.registerKeyEvents -ReaderHighlight.onPhysicalKeyboardDisconnected = ReaderHighlight.registerKeyEvents function ReaderHighlight:setupTouchZones() if not Device:isTouchDevice() then return end diff --git a/frontend/apps/reader/modules/readerlink.lua b/frontend/apps/reader/modules/readerlink.lua index 84231b32a..9d50e56eb 100644 --- a/frontend/apps/reader/modules/readerlink.lua +++ b/frontend/apps/reader/modules/readerlink.lua @@ -26,7 +26,7 @@ local ReaderLink = InputContainer:extend{ } function ReaderLink:init() - self:registerKeyEvents(true) + self:registerKeyEvents() if Device:isTouchDevice() then self.ui:registerTouchZones({ { @@ -95,7 +95,7 @@ end function ReaderLink:onGesture() end -function ReaderLink:registerKeyEvents(init) +function ReaderLink:registerKeyEvents() if Device:hasKeys() then self.key_events = { SelectNextPageLink = { @@ -114,13 +114,10 @@ function ReaderLink:registerKeyEvents(init) -- "Back" is handled by ReaderBack, which will call our onGoBackLink() -- when G_reader_settings:readSetting("back_in_reader") == "previous_location" } - elseif not init then - self.key_events = {} end end ReaderLink.onPhysicalKeyboardConnected = ReaderLink.registerKeyEvents -ReaderLink.onPhysicalKeyboardDisconnected = ReaderLink.registerKeyEvents function ReaderLink:onReadSettings(config) -- called when loading new document diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index 0177ac786..b6d8a28f3 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -56,7 +56,7 @@ function ReaderMenu:init() self.registered_widgets = {} - self:registerKeyEvents(true) + self:registerKeyEvents() if G_reader_settings:has("activate_menu") then self.activation_menu = G_reader_settings:readSetting("activate_menu") @@ -70,7 +70,7 @@ end function ReaderMenu:onGesture() end -function ReaderMenu:registerKeyEvents(init) +function ReaderMenu:registerKeyEvents() if Device:hasKeys() then if Device:isTouchDevice() then self.key_events.TapShowMenu = { { "Menu" } } @@ -85,14 +85,10 @@ function ReaderMenu:registerKeyEvents(init) self.key_events.ShowMenu = { { { "Menu", "Right" } } } end end - elseif not init then - self.key_events.TapShowMenu = nil - self.key_events.ShowMenu = nil end end ReaderMenu.onPhysicalKeyboardConnected = ReaderMenu.registerKeyEvents -ReaderMenu.onPhysicalKeyboardDisconnected = ReaderMenu.registerKeyEvents function ReaderMenu:getPreviousFile() return require("readhistory"):getPreviousFile(self.ui.document.file) diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index 790f22d77..f61318ad7 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -41,7 +41,7 @@ local ReaderPaging = InputContainer:extend{ } function ReaderPaging:init() - self:registerKeyEvents(true) + self:registerKeyEvents() self.pan_interval = time.s(1 / self.pan_rate) self.number_of_pages = self.ui.document.info.number_of_pages @@ -51,7 +51,7 @@ end function ReaderPaging:onGesture() end -function ReaderPaging:registerKeyEvents(init) +function ReaderPaging:registerKeyEvents() if Device:hasKeys() then self.key_events.GotoNextPage = { { { "RPgFwd", "LPgFwd", not Device:hasFewKeys() and "Right" } }, @@ -73,11 +73,6 @@ function ReaderPaging:registerKeyEvents(init) event = "GotoPosRel", args = -1, } - elseif not init then - self.key_events.GotoNextPage = nil - self.key_events.GotoPrevPage = nil - self.key_events.GotoNextPos = nil - self.key_events.GotoPrevPos = nil end if Device:hasKeyboard() then self.key_events.GotoFirst = { @@ -130,22 +125,10 @@ function ReaderPaging:registerKeyEvents(init) event = "GotoPercent", args = 100, } - elseif not init then - self.key_events.GotoFirst = nil - self.key_events.Goto11 = nil - self.key_events.Goto22 = nil - self.key_events.Goto33 = nil - self.key_events.Goto44 = nil - self.key_events.Goto55 = nil - self.key_events.Goto66 = nil - self.key_events.Goto77 = nil - self.key_events.Goto88 = nil - self.key_events.GotoLast = nil end end ReaderPaging.onPhysicalKeyboardConnected = ReaderPaging.registerKeyEvents -ReaderPaging.onPhysicalKeyboardDisconnected = ReaderPaging.registerKeyEvents function ReaderPaging:onReaderReady() self:setupTouchZones() diff --git a/frontend/apps/reader/modules/readerpanning.lua b/frontend/apps/reader/modules/readerpanning.lua index 74ccabcb5..a6f7eba76 100644 --- a/frontend/apps/reader/modules/readerpanning.lua +++ b/frontend/apps/reader/modules/readerpanning.lua @@ -13,14 +13,14 @@ local ReaderPanning = InputContainer:extend{ } function ReaderPanning:init() - self:registerKeyEvents(true) + self:registerKeyEvents() -- NOP our own gesture handling self.ges_events = nil end function ReaderPanning:onGesture() end -function ReaderPanning:registerKeyEvents(init) +function ReaderPanning:registerKeyEvents() if Device:hasKeyboard() then self.key_events = { -- these will all generate the same event, just with different arguments @@ -45,13 +45,10 @@ function ReaderPanning:registerKeyEvents(init) args = {1, 0} }, } - elseif not init then - self.key_events = {} end end ReaderPanning.onPhysicalKeyboardConnected = ReaderPanning.registerKeyEvents -ReaderPanning.onPhysicalKeyboardDisconnected = ReaderPanning.registerKeyEvents function ReaderPanning:onPanning(args, _) local dx, dy = unpack(args) diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index 5e344c435..2f55fe373 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -57,7 +57,7 @@ local ReaderRolling = InputContainer:extend{ } function ReaderRolling:init() - self:registerKeyEvents(true) + self:registerKeyEvents() self.pan_interval = time.s(1 / self.pan_rate) table.insert(self.ui.postInitCallback, function() @@ -79,7 +79,7 @@ end function ReaderRolling:onGesture() end -function ReaderRolling:registerKeyEvents(init) +function ReaderRolling:registerKeyEvents() if Device:hasKeys() then self.key_events.GotoNextView = { { { "RPgFwd", "LPgFwd", "Right" } }, @@ -91,9 +91,6 @@ function ReaderRolling:registerKeyEvents(init) event = "GotoViewRel", args = -1, } - elseif not init then - self.key_events.GotoNextView = nil - self.key_events.GotoPrevView = nil end if Device:hasDPad() then self.key_events.MoveUp = { @@ -106,9 +103,6 @@ function ReaderRolling:registerKeyEvents(init) event = "Panning", args = {0, 1}, } - elseif not init then - self.key_events.MoveUp = nil - self.key_events.MoveDown = nil end if Device:hasKeyboard() then self.key_events.GotoFirst = { @@ -161,22 +155,10 @@ function ReaderRolling:registerKeyEvents(init) event = "GotoPercent", args = 100, } - elseif not init then - self.key_events.GotoFirst = nil - self.key_events.Goto11 = nil - self.key_events.Goto22 = nil - self.key_events.Goto33 = nil - self.key_events.Goto44 = nil - self.key_events.Goto55 = nil - self.key_events.Goto66 = nil - self.key_events.Goto77 = nil - self.key_events.Goto88 = nil - self.key_events.GotoLast = nil end end ReaderRolling.onPhysicalKeyboardConnected = ReaderRolling.registerKeyEvents -ReaderRolling.onPhysicalKeyboardDisconnected = ReaderRolling.registerKeyEvents function ReaderRolling:onReadSettings(config) -- 20180503: some fix in crengine has changed the way the DOM is built diff --git a/frontend/apps/reader/modules/readerrotation.lua b/frontend/apps/reader/modules/readerrotation.lua index 6d5cb02ec..5715d24ea 100644 --- a/frontend/apps/reader/modules/readerrotation.lua +++ b/frontend/apps/reader/modules/readerrotation.lua @@ -8,14 +8,14 @@ local ReaderRotation = InputContainer:extend{ } function ReaderRotation:init() - self:registerKeyEvents(true) + self:registerKeyEvents() -- NOP our own gesture handling self.ges_events = nil end function ReaderRotation:onGesture() end -function ReaderRotation:registerKeyEvents(init) +function ReaderRotation:registerKeyEvents() if Device:hasKeyboard() then self.key_events = { -- these will all generate the same event, just with different arguments @@ -30,13 +30,10 @@ function ReaderRotation:registerKeyEvents(init) args = 90 }, } - elseif not init then - self.key_events = {} end end ReaderRotation.onPhysicalKeyboardConnected = ReaderRotation.registerKeyEvents -ReaderRotation.onPhysicalKeyboardDisconnected = ReaderRotation.registerKeyEvents --- @todo Reset rotation on new document, maybe on new page? diff --git a/frontend/apps/reader/modules/readerstyletweak.lua b/frontend/apps/reader/modules/readerstyletweak.lua index 18de93117..4461d34af 100644 --- a/frontend/apps/reader/modules/readerstyletweak.lua +++ b/frontend/apps/reader/modules/readerstyletweak.lua @@ -50,7 +50,7 @@ function TweakInfoWidget:init() } } end - self:registerKeyEvents(true) + self:registerKeyEvents() local content = VerticalGroup:new{ TextBoxWidget:new{ @@ -166,16 +166,13 @@ function TweakInfoWidget:init() } end -function TweakInfoWidget:registerKeyEvents(init) +function TweakInfoWidget:registerKeyEvents() if Device:hasKeys() then self.key_events.Close = { { Device.input.group.Back } } - elseif not init then - self.key_events.Close = nil end end TweakInfoWidget.onPhysicalKeyboardConnected = TweakInfoWidget.registerKeyEvents -TweakInfoWidget.onPhysicalKeyboardDisconnected = TweakInfoWidget.registerKeyEvents function TweakInfoWidget:onShow() UIManager:setDirty(self, function() diff --git a/frontend/apps/reader/modules/readertoc.lua b/frontend/apps/reader/modules/readertoc.lua index 79c14f49f..d9aa5db19 100644 --- a/frontend/apps/reader/modules/readertoc.lua +++ b/frontend/apps/reader/modules/readertoc.lua @@ -35,7 +35,7 @@ local ReaderToc = InputContainer:extend{ } function ReaderToc:init() - self:registerKeyEvents(true) + self:registerKeyEvents() if G_reader_settings:hasNot("toc_items_per_page") then -- The TOC items per page and items' font size can now be @@ -60,16 +60,13 @@ end function ReaderToc:onGesture() end -function ReaderToc:registerKeyEvents(init) +function ReaderToc:registerKeyEvents() if Device:hasKeyboard() then self.key_events.ShowToc = { { "T" } } - elseif not init then - self.key_events.ShowToc = nil end end ReaderToc.onPhysicalKeyboardConnected = ReaderToc.registerKeyEvents -ReaderToc.onPhysicalKeyboardDisconnected = ReaderToc.registerKeyEvents function ReaderToc:onReadSettings(config) self.toc_ticks_ignored_levels = config:readSetting("toc_ticks_ignored_levels") or {} diff --git a/frontend/apps/reader/modules/readerzooming.lua b/frontend/apps/reader/modules/readerzooming.lua index c3aa20c1a..bcb091d1a 100644 --- a/frontend/apps/reader/modules/readerzooming.lua +++ b/frontend/apps/reader/modules/readerzooming.lua @@ -91,10 +91,10 @@ local ReaderZooming = InputContainer:extend{ } function ReaderZooming:init() - self:registerKeyEvents(true) + self:registerKeyEvents() end -function ReaderZooming:registerKeyEvents(init) +function ReaderZooming:registerKeyEvents() if Device:hasKeyboard() then self.key_events = { ZoomIn = { @@ -143,13 +143,10 @@ function ReaderZooming:registerKeyEvents(init) args = "manual", }, } - elseif not init then - self.key_events = {} end end ReaderZooming.onPhysicalKeyboardConnected = ReaderZooming.registerKeyEvents -ReaderZooming.onPhysicalKeyboardDisconnected = ReaderZooming.registerKeyEvents -- Conversions between genus/type combos and zoom_mode... function ReaderZooming:mode_to_combo(zoom_mode) diff --git a/frontend/apps/reader/readerui.lua b/frontend/apps/reader/readerui.lua index 232b18faa..9f0f6d819 100644 --- a/frontend/apps/reader/readerui.lua +++ b/frontend/apps/reader/readerui.lua @@ -122,7 +122,7 @@ function ReaderUI:init() -- Handle local settings migration SettingsMigration:migrateSettings(self.doc_settings) - self:registerKeyEvents(true) + self:registerKeyEvents() -- a view container (so it must be child #1!) -- all paintable widgets need to be a child of reader view @@ -481,18 +481,14 @@ function ReaderUI:init() ReaderUI.instance = self end -function ReaderUI:registerKeyEvents(init) +function ReaderUI:registerKeyEvents() if Device:hasKeys() then self.key_events.Home = { { "Home" } } self.key_events.Reload = { { "F5" } } - elseif not init then - self.key_events.Home = nil - self.key_events.Reload = nil end end ReaderUI.onPhysicalKeyboardConnected = ReaderUI.registerKeyEvents -ReaderUI.onPhysicalKeyboardDisconnected = ReaderUI.registerKeyEvents function ReaderUI:setLastDirForFileBrowser(dir) if dir and #dir > 1 and dir:sub(-1) == "/" then diff --git a/frontend/ui/widget/container/inputcontainer.lua b/frontend/ui/widget/container/inputcontainer.lua index 82a41b558..afb83a8b5 100644 --- a/frontend/ui/widget/container/inputcontainer.lua +++ b/frontend/ui/widget/container/inputcontainer.lua @@ -305,4 +305,13 @@ function InputContainer:closeInputDialog() UIManager:close(self.input_dialog) end +function InputContainer:onPhysicalKeyboardDisconnected() + -- Clear the key bindings if Device no longer has keys + -- NOTE: hasKeys is the lowest common denominator of key-related Device caps, + -- hasDPad/hasFewKeys/hasKeyboard all imply hasKeys ;). + if not Device:hasKeys() then + self.key_events = {} + end +end + return InputContainer diff --git a/frontend/ui/widget/focusmanager.lua b/frontend/ui/widget/focusmanager.lua index e388a9e29..fb750d722 100644 --- a/frontend/ui/widget/focusmanager.lua +++ b/frontend/ui/widget/focusmanager.lua @@ -274,12 +274,17 @@ function FocusManager:onPhysicalKeyboardDisconnected() local prev_key_events = KEY_EVENTS populateEventMappings() - -- Remove what disappeared from KEY_EVENTS from self.key_events (if any). - -- NOTE: This is slightly overkill, we could very well live with a few unreachable mappings for the rest of this widget's life ;). - for k, _ in pairs(prev_key_events) do - if not KEY_EVENTS[k] then - self.key_events[k] = nil + -- If we still have keys, remove what disappeared from KEY_EVENTS from self.key_events (if any). + if Device:hasKeys() then + -- NOTE: This is slightly overkill, we could very well live with a few unreachable mappings for the rest of this widget's life ;). + for k, _ in pairs(prev_key_events) do + if not KEY_EVENTS[k] then + self.key_events[k] = nil + end end + else + -- If we longer have keys at all, that's easy ;). + self.key_events = {} end self.builtin_key_events = BUILTIN_KEY_EVENTS self.extra_key_events = EXTRA_KEY_EVENTS