diff --git a/frontend/apps/reader/modules/readerback.lua b/frontend/apps/reader/modules/readerback.lua index 9b406712c..2de42d379 100644 --- a/frontend/apps/reader/modules/readerback.lua +++ b/frontend/apps/reader/modules/readerback.lua @@ -20,9 +20,7 @@ local ReaderBack = EventListener:extend{ } function ReaderBack:init() - if Device:hasKeys() then - self.ui.key_events.Back = { { Device.input.group.Back } } - end + self:registerKeyEvents(true) -- Regular function wrapping our method, to avoid re-creating -- an anonymous function at each page turn self._addPreviousLocationToStackCallback = function() @@ -30,6 +28,17 @@ function ReaderBack:init() end end +function ReaderBack:registerKeyEvents(init) + 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 return self.ui.paging:getBookLocation() diff --git a/frontend/apps/reader/modules/readerbookmark.lua b/frontend/apps/reader/modules/readerbookmark.lua index 10f9f61be..53d58908e 100644 --- a/frontend/apps/reader/modules/readerbookmark.lua +++ b/frontend/apps/reader/modules/readerbookmark.lua @@ -37,9 +37,7 @@ local ReaderBookmark = InputContainer:extend{ } function ReaderBookmark:init() - if Device:hasKeyboard() then - self.key_events.ShowBookmark = { { "B" } } - end + self:registerKeyEvents(true) if G_reader_settings:hasNot("bookmarks_items_per_page") then -- The Bookmarks items per page and items' font size can now be @@ -62,6 +60,17 @@ end function ReaderBookmark:onGesture() end +function ReaderBookmark:registerKeyEvents(init) + 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 = { text = _("Bookmarks"), diff --git a/frontend/apps/reader/modules/readerconfig.lua b/frontend/apps/reader/modules/readerconfig.lua index f744ace10..20c14790b 100644 --- a/frontend/apps/reader/modules/readerconfig.lua +++ b/frontend/apps/reader/modules/readerconfig.lua @@ -19,9 +19,7 @@ function ReaderConfig:init() end self.configurable:loadDefaults(self.options) - if Device:hasKeys() then - self.key_events.ShowConfigMenu = { { { "Press", "AA" } } } - end + self:registerKeyEvents(true) self:initGesListener() if G_reader_settings:has("activate_menu") then self.activation_menu = G_reader_settings:readSetting("activate_menu") @@ -35,6 +33,17 @@ end function ReaderConfig:onGesture() end +function ReaderConfig:registerKeyEvents(init) + 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 d9e06fd43..8a828e32b 100644 --- a/frontend/apps/reader/modules/readerfont.lua +++ b/frontend/apps/reader/modules/readerfont.lua @@ -31,22 +31,7 @@ local ReaderFont = InputContainer:extend{ } function ReaderFont:init() - if Device:hasKeyboard() then - -- add shortcut for keyboard - self.key_events = { - ShowFontMenu = { { "F" } }, - IncreaseSize = { - { "Shift", Input.group.PgFwd }, - event = "ChangeSize", - args = 0.5 - }, - DecreaseSize = { - { "Shift", Input.group.PgBack }, - event = "ChangeSize", - args = -0.5 - }, - } - end + self:registerKeyEvents(true) -- Build face_table for menu self.face_table = {} -- Font settings @@ -133,6 +118,30 @@ end function ReaderFont:onGesture() end +function ReaderFont:registerKeyEvents(init) + if Device:hasKeyboard() then + -- add shortcut for keyboard + self.key_events = { + ShowFontMenu = { { "F" } }, + IncreaseSize = { + { "Shift", Input.group.PgFwd }, + event = "ChangeSize", + args = 0.5 + }, + DecreaseSize = { + { "Shift", Input.group.PgBack }, + event = "ChangeSize", + 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 end diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index 3110569cf..bcc59357e 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -52,24 +52,7 @@ function ReaderHighlight:init() self._previous_indicator_pos = nil self._last_indicator_move_args = {dx = 0, dy = 0, distance = 0, time = time:now()} - if Device:hasDPad() then - -- Used for text selection with dpad/keys - local QUICK_INDICTOR_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_INDICTOR_MOVE} } - self.key_events.QuickDownHighlightIndicator = { { "Shift", "Down" }, event = "MoveHighlightIndicator", args = {0, 1, QUICK_INDICTOR_MOVE} } - self.key_events.QuickLeftHighlightIndicator = { { "Shift", "Left" }, event = "MoveHighlightIndicator", args = {-1, 0, QUICK_INDICTOR_MOVE} } - self.key_events.QuickRightHighlightIndicator = { { "Shift", "Right" }, event = "MoveHighlightIndicator", args = {1, 0, QUICK_INDICTOR_MOVE} } - self.key_events.StartHighlightIndicator = { { "H" } } - end - end + self:registerKeyEvents(true) self._highlight_buttons = { -- highlight and add_note are for the document itself, @@ -237,6 +220,42 @@ end function ReaderHighlight:onGesture() end +function ReaderHighlight:registerKeyEvents(init) + if Device:hasDPad() 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" } } + 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 local hold_pan_rate = G_reader_settings:readSetting("hold_pan_rate") diff --git a/frontend/apps/reader/modules/readerlink.lua b/frontend/apps/reader/modules/readerlink.lua index 7f6bb089d..84231b32a 100644 --- a/frontend/apps/reader/modules/readerlink.lua +++ b/frontend/apps/reader/modules/readerlink.lua @@ -26,25 +26,7 @@ local ReaderLink = InputContainer:extend{ } function ReaderLink:init() - if Device:hasKeys() then - self.key_events = { - SelectNextPageLink = { - { "Tab" }, - event = "SelectNextPageLink", - }, - SelectPrevPageLink = { - { "Shift", "Tab" }, - { "Sym", "Tab" }, -- Shift or Sym + Tab - event = "SelectPrevPageLink", - }, - GotoSelectedPageLink = { - { "Press" }, - event = "GotoSelectedPageLink", - }, - -- "Back" is handled by ReaderBack, which will call our onGoBackLink() - -- when G_reader_settings:readSetting("back_in_reader") == "previous_location" - } - end + self:registerKeyEvents(true) if Device:isTouchDevice() then self.ui:registerTouchZones({ { @@ -113,6 +95,33 @@ end function ReaderLink:onGesture() end +function ReaderLink:registerKeyEvents(init) + if Device:hasKeys() then + self.key_events = { + SelectNextPageLink = { + { "Tab" }, + event = "SelectNextPageLink", + }, + SelectPrevPageLink = { + { "Shift", "Tab" }, + { "Sym", "Tab" }, -- Shift or Sym + Tab + event = "SelectPrevPageLink", + }, + GotoSelectedPageLink = { + { "Press" }, + event = "GotoSelectedPageLink", + }, + -- "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 self.location_stack = {} diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index 749433e6b..0177ac786 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -56,6 +56,21 @@ function ReaderMenu:init() self.registered_widgets = {} + self:registerKeyEvents(true) + + if G_reader_settings:has("activate_menu") then + self.activation_menu = G_reader_settings:readSetting("activate_menu") + else + self.activation_menu = "swipe_tap" + end + + -- delegate gesture listener to readerui, NOP our own + self.ges_events = nil +end + +function ReaderMenu:onGesture() end + +function ReaderMenu:registerKeyEvents(init) if Device:hasKeys() then if Device:isTouchDevice() then self.key_events.TapShowMenu = { { "Menu" } } @@ -70,18 +85,14 @@ function ReaderMenu:init() self.key_events.ShowMenu = { { { "Menu", "Right" } } } end end + elseif not init then + self.key_events.TapShowMenu = nil + self.key_events.ShowMenu = nil end - if G_reader_settings:has("activate_menu") then - self.activation_menu = G_reader_settings:readSetting("activate_menu") - else - self.activation_menu = "swipe_tap" - end - - -- delegate gesture listener to readerui, NOP our own - self.ges_events = nil end -function ReaderMenu:onGesture() 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 e1f3fc5f0..790f22d77 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -41,6 +41,17 @@ local ReaderPaging = InputContainer:extend{ } function ReaderPaging:init() + self:registerKeyEvents(true) + self.pan_interval = time.s(1 / self.pan_rate) + self.number_of_pages = self.ui.document.info.number_of_pages + + -- delegate gesture listener to readerui, NOP our own + self.ges_events = nil +end + +function ReaderPaging:onGesture() end + +function ReaderPaging:registerKeyEvents(init) if Device:hasKeys() then self.key_events.GotoNextPage = { { { "RPgFwd", "LPgFwd", not Device:hasFewKeys() and "Right" } }, @@ -62,7 +73,11 @@ function ReaderPaging: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 = { @@ -115,15 +130,22 @@ function ReaderPaging: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 - self.pan_interval = time.s(1 / self.pan_rate) - self.number_of_pages = self.ui.document.info.number_of_pages - - -- delegate gesture listener to readerui, NOP our own - self.ges_events = nil end -function ReaderPaging:onGesture() 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 bf9950e7b..74ccabcb5 100644 --- a/frontend/apps/reader/modules/readerpanning.lua +++ b/frontend/apps/reader/modules/readerpanning.lua @@ -13,6 +13,14 @@ local ReaderPanning = InputContainer:extend{ } function ReaderPanning:init() + self:registerKeyEvents(true) + -- NOP our own gesture handling + self.ges_events = nil +end + +function ReaderPanning:onGesture() end + +function ReaderPanning:registerKeyEvents(init) if Device:hasKeyboard() then self.key_events = { -- these will all generate the same event, just with different arguments @@ -37,12 +45,13 @@ function ReaderPanning:init() args = {1, 0} }, } + elseif not init then + self.key_events = {} end - -- NOP our own gesture handling - self.ges_events = nil end -function ReaderPanning:onGesture() 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 26232b7b9..5e344c435 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -57,7 +57,29 @@ local ReaderRolling = InputContainer:extend{ } function ReaderRolling:init() - self.key_events = {} + self:registerKeyEvents(true) + self.pan_interval = time.s(1 / self.pan_rate) + + table.insert(self.ui.postInitCallback, function() + self.rendering_hash = self.ui.document:getDocumentRenderingHash() + self.ui.document:_readMetadata() + end) + table.insert(self.ui.postReaderCallback, function() + self:updatePos() + -- Disable crengine internal history, with required redraw + self.ui.document:enableInternalHistory(false) + self:onRedrawCurrentView() + end) + self.ui.menu:registerToMainMenu(self) + self.batched_update_count = 0 + + -- delegate gesture listener to readerui, NOP our own + self.ges_events = nil +end + +function ReaderRolling:onGesture() end + +function ReaderRolling:registerKeyEvents(init) if Device:hasKeys() then self.key_events.GotoNextView = { { { "RPgFwd", "LPgFwd", "Right" } }, @@ -69,6 +91,9 @@ function ReaderRolling: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 = { @@ -81,6 +106,9 @@ function ReaderRolling: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 = { @@ -133,27 +161,22 @@ function ReaderRolling: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 - self.pan_interval = time.s(1 / self.pan_rate) - - table.insert(self.ui.postInitCallback, function() - self.rendering_hash = self.ui.document:getDocumentRenderingHash() - self.ui.document:_readMetadata() - end) - table.insert(self.ui.postReaderCallback, function() - self:updatePos() - -- Disable crengine internal history, with required redraw - self.ui.document:enableInternalHistory(false) - self:onRedrawCurrentView() - end) - self.ui.menu:registerToMainMenu(self) - self.batched_update_count = 0 - - -- delegate gesture listener to readerui, NOP our own - self.ges_events = nil end -function ReaderRolling:onGesture() 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 b44082b4a..6d5cb02ec 100644 --- a/frontend/apps/reader/modules/readerrotation.lua +++ b/frontend/apps/reader/modules/readerrotation.lua @@ -8,6 +8,14 @@ local ReaderRotation = InputContainer:extend{ } function ReaderRotation:init() + self:registerKeyEvents(true) + -- NOP our own gesture handling + self.ges_events = nil +end + +function ReaderRotation:onGesture() end + +function ReaderRotation:registerKeyEvents(init) if Device:hasKeyboard() then self.key_events = { -- these will all generate the same event, just with different arguments @@ -22,12 +30,13 @@ function ReaderRotation:init() args = 90 }, } + elseif not init then + self.key_events = {} end - -- NOP our own gesture handling - self.ges_events = nil end -function ReaderRotation:onGesture() 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 93bfe9ef7..18de93117 100644 --- a/frontend/apps/reader/modules/readerstyletweak.lua +++ b/frontend/apps/reader/modules/readerstyletweak.lua @@ -50,9 +50,7 @@ function TweakInfoWidget:init() } } end - if Device:hasKeys() then - self.key_events.Close = { { Device.input.group.Back } } - end + self:registerKeyEvents(true) local content = VerticalGroup:new{ TextBoxWidget:new{ @@ -168,6 +166,17 @@ function TweakInfoWidget:init() } end +function TweakInfoWidget:registerKeyEvents(init) + 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() return "ui", self.movable.dimen diff --git a/frontend/apps/reader/modules/readertoc.lua b/frontend/apps/reader/modules/readertoc.lua index 806b7ff41..79c14f49f 100644 --- a/frontend/apps/reader/modules/readertoc.lua +++ b/frontend/apps/reader/modules/readertoc.lua @@ -35,9 +35,7 @@ local ReaderToc = InputContainer:extend{ } function ReaderToc:init() - if Device:hasKeyboard() then - self.key_events.ShowToc = { { "T" } } - end + self:registerKeyEvents(true) if G_reader_settings:hasNot("toc_items_per_page") then -- The TOC items per page and items' font size can now be @@ -62,6 +60,17 @@ end function ReaderToc:onGesture() end +function ReaderToc:registerKeyEvents(init) + 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 {} self.toc_chapter_navigation_bind_to_ticks = config:readSetting("toc_chapter_navigation_bind_to_ticks") diff --git a/frontend/apps/reader/modules/readerzooming.lua b/frontend/apps/reader/modules/readerzooming.lua index e9d0109b4..c3aa20c1a 100644 --- a/frontend/apps/reader/modules/readerzooming.lua +++ b/frontend/apps/reader/modules/readerzooming.lua @@ -91,6 +91,10 @@ local ReaderZooming = InputContainer:extend{ } function ReaderZooming:init() + self:registerKeyEvents(true) +end + +function ReaderZooming:registerKeyEvents(init) if Device:hasKeyboard() then self.key_events = { ZoomIn = { @@ -139,9 +143,14 @@ function ReaderZooming: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) if not zoom_mode then diff --git a/frontend/apps/reader/readerui.lua b/frontend/apps/reader/readerui.lua index b57fd4740..232b18faa 100644 --- a/frontend/apps/reader/readerui.lua +++ b/frontend/apps/reader/readerui.lua @@ -122,10 +122,7 @@ function ReaderUI:init() -- Handle local settings migration SettingsMigration:migrateSettings(self.doc_settings) - if Device:hasKeys() then - self.key_events.Home = { { "Home" } } - self.key_events.Reload = { { "F5" } } - end + self:registerKeyEvents(true) -- a view container (so it must be child #1!) -- all paintable widgets need to be a child of reader view @@ -484,6 +481,19 @@ function ReaderUI:init() ReaderUI.instance = self end +function ReaderUI:registerKeyEvents(init) + 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 dir = dir:sub(1, -2)