InputContainer/FocusManager: Simplify key_events clearing on unplug

Thanks to @poire-z for the idea, it's indeed much nicer this way ;).
reviewable/pr9739/r1
NiLuJe 2 years ago
parent d585cd5d86
commit 925fd647dc

@ -473,7 +473,7 @@ function FileManager:setupLayout()
end end
function FileManager:registerKeyEvents() 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 if Device:hasKeys() then
self.key_events.Home = { { "Home" } } self.key_events.Home = { { "Home" } }
-- Override the menu.lua way of handling the back key -- Override the menu.lua way of handling the back key

@ -48,7 +48,7 @@ function FileManagerMenu:init()
self.registered_widgets = {} self.registered_widgets = {}
self:registerKeyEvents(true) self:registerKeyEvents()
self.activation_menu = G_reader_settings:readSetting("activate_menu") self.activation_menu = G_reader_settings:readSetting("activate_menu")
if self.activation_menu == nil then if self.activation_menu == nil then
@ -56,16 +56,13 @@ function FileManagerMenu:init()
end end
end end
function FileManagerMenu:registerKeyEvents(init) function FileManagerMenu:registerKeyEvents()
if Device:hasKeys() then if Device:hasKeys() then
self.key_events.ShowMenu = { { "Menu" } } self.key_events.ShowMenu = { { "Menu" } }
elseif not init then
self.key_events.ShowMenu = nil
end end
end end
FileManagerMenu.onPhysicalKeyboardConnected = FileManagerMenu.registerKeyEvents FileManagerMenu.onPhysicalKeyboardConnected = FileManagerMenu.registerKeyEvents
FileManagerMenu.onPhysicalKeyboardDisconnected = FileManagerMenu.registerKeyEvents
function FileManagerMenu:initGesListener() function FileManagerMenu:initGesListener()
if not Device:isTouchDevice() then return end if not Device:isTouchDevice() then return end

@ -20,7 +20,7 @@ local ReaderBack = EventListener:extend{
} }
function ReaderBack:init() function ReaderBack:init()
self:registerKeyEvents(true) self:registerKeyEvents()
-- Regular function wrapping our method, to avoid re-creating -- Regular function wrapping our method, to avoid re-creating
-- an anonymous function at each page turn -- an anonymous function at each page turn
self._addPreviousLocationToStackCallback = function() self._addPreviousLocationToStackCallback = function()
@ -28,16 +28,13 @@ function ReaderBack:init()
end end
end end
function ReaderBack:registerKeyEvents(init) function ReaderBack:registerKeyEvents()
if Device:hasKeys() then if Device:hasKeys() then
self.ui.key_events.Back = { { Device.input.group.Back } } self.ui.key_events.Back = { { Device.input.group.Back } }
elseif not init then
self.ui.key_events.Back = nil
end end
end end
ReaderBack.onPhysicalKeyboardConnected = ReaderBack.registerKeyEvents ReaderBack.onPhysicalKeyboardConnected = ReaderBack.registerKeyEvents
ReaderBack.onPhysicalKeyboardDisconnected = ReaderBack.registerKeyEvents
function ReaderBack:_getCurrentLocation() function ReaderBack:_getCurrentLocation()
if self.ui.document.info.has_pages then if self.ui.document.info.has_pages then

@ -37,7 +37,7 @@ local ReaderBookmark = InputContainer:extend{
} }
function ReaderBookmark:init() function ReaderBookmark:init()
self:registerKeyEvents(true) self:registerKeyEvents()
if G_reader_settings:hasNot("bookmarks_items_per_page") then if G_reader_settings:hasNot("bookmarks_items_per_page") then
-- The Bookmarks items per page and items' font size can now be -- The Bookmarks items per page and items' font size can now be
@ -60,16 +60,13 @@ end
function ReaderBookmark:onGesture() end function ReaderBookmark:onGesture() end
function ReaderBookmark:registerKeyEvents(init) function ReaderBookmark:registerKeyEvents()
if Device:hasKeyboard() then if Device:hasKeyboard() then
self.key_events.ShowBookmark = { { "B" } } self.key_events.ShowBookmark = { { "B" } }
elseif not init then
self.key_events.ShowBookmark = nil
end end
end end
ReaderBookmark.onPhysicalKeyboardConnected = ReaderBookmark.registerKeyEvents ReaderBookmark.onPhysicalKeyboardConnected = ReaderBookmark.registerKeyEvents
ReaderBookmark.onPhysicalKeyboardDisconnected = ReaderBookmark.registerKeyEvents
function ReaderBookmark:addToMainMenu(menu_items) function ReaderBookmark:addToMainMenu(menu_items)
menu_items.bookmarks = { menu_items.bookmarks = {

@ -19,7 +19,7 @@ function ReaderConfig:init()
end end
self.configurable:loadDefaults(self.options) self.configurable:loadDefaults(self.options)
self:registerKeyEvents(true) self:registerKeyEvents()
self:initGesListener() self:initGesListener()
if G_reader_settings:has("activate_menu") then if G_reader_settings:has("activate_menu") then
self.activation_menu = G_reader_settings:readSetting("activate_menu") self.activation_menu = G_reader_settings:readSetting("activate_menu")
@ -33,16 +33,13 @@ end
function ReaderConfig:onGesture() end function ReaderConfig:onGesture() end
function ReaderConfig:registerKeyEvents(init) function ReaderConfig:registerKeyEvents()
if Device:hasKeys() then if Device:hasKeys() then
self.key_events.ShowConfigMenu = { { { "Press", "AA" } } } self.key_events.ShowConfigMenu = { { { "Press", "AA" } } }
elseif not init then
self.key_events.ShowConfigMenu = nil
end end
end end
ReaderConfig.onPhysicalKeyboardConnected = ReaderConfig.registerKeyEvents ReaderConfig.onPhysicalKeyboardConnected = ReaderConfig.registerKeyEvents
ReaderConfig.onPhysicalKeyboardDisconnected = ReaderConfig.registerKeyEvents
function ReaderConfig:initGesListener() function ReaderConfig:initGesListener()
if not Device:isTouchDevice() then return end if not Device:isTouchDevice() then return end

@ -31,7 +31,7 @@ local ReaderFont = InputContainer:extend{
} }
function ReaderFont:init() function ReaderFont:init()
self:registerKeyEvents(true) self:registerKeyEvents()
-- Build face_table for menu -- Build face_table for menu
self.face_table = {} self.face_table = {}
-- Font settings -- Font settings
@ -118,7 +118,7 @@ end
function ReaderFont:onGesture() end function ReaderFont:onGesture() end
function ReaderFont:registerKeyEvents(init) function ReaderFont:registerKeyEvents()
if Device:hasKeyboard() then if Device:hasKeyboard() then
-- add shortcut for keyboard -- add shortcut for keyboard
self.key_events = { self.key_events = {
@ -134,13 +134,10 @@ function ReaderFont:registerKeyEvents(init)
args = -0.5 args = -0.5
}, },
} }
elseif not init then
self.key_events = {}
end end
end end
ReaderFont.onPhysicalKeyboardConnected = ReaderFont.registerKeyEvents ReaderFont.onPhysicalKeyboardConnected = ReaderFont.registerKeyEvents
ReaderFont.onPhysicalKeyboardDisconnected = ReaderFont.registerKeyEvents
function ReaderFont:onSetDimensions(dimen) function ReaderFont:onSetDimensions(dimen)
self.dimen = dimen self.dimen = dimen

@ -52,7 +52,7 @@ function ReaderHighlight:init()
self._previous_indicator_pos = nil self._previous_indicator_pos = nil
self._last_indicator_move_args = {dx = 0, dy = 0, distance = 0, time = time:now()} self._last_indicator_move_args = {dx = 0, dy = 0, distance = 0, time = time:now()}
self:registerKeyEvents(true) self:registerKeyEvents()
self._highlight_buttons = { self._highlight_buttons = {
-- highlight and add_note are for the document itself, -- highlight and add_note are for the document itself,
@ -220,41 +220,28 @@ end
function ReaderHighlight:onGesture() end function ReaderHighlight:onGesture() end
function ReaderHighlight:registerKeyEvents(init) function ReaderHighlight:registerKeyEvents()
if Device:hasDPad() then if Device:hasKeys() then
-- Used for text selection with dpad/keys -- Used for text selection with dpad/keys
local QUICK_INDICATOR_MOVE = true local QUICK_INDICATOR_MOVE = true
self.key_events.StopHighlightIndicator = { { Device.input.group.Back }, args = true } -- true: clear highlight selection self.key_events.QuickUpHighlightIndicator = { { "Shift", "Up" }, event = "MoveHighlightIndicator", args = {0, -1, QUICK_INDICATOR_MOVE} }
self.key_events.UpHighlightIndicator = { { "Up" }, event = "MoveHighlightIndicator", args = {0, -1} } self.key_events.QuickDownHighlightIndicator = { { "Shift", "Down" }, event = "MoveHighlightIndicator", args = {0, 1, QUICK_INDICATOR_MOVE} }
self.key_events.DownHighlightIndicator = { { "Down" }, event = "MoveHighlightIndicator", args = {0, 1} } self.key_events.QuickLeftHighlightIndicator = { { "Shift", "Left" }, event = "MoveHighlightIndicator", args = {-1, 0, QUICK_INDICATOR_MOVE} }
-- let FewKeys device can move indicator left self.key_events.QuickRightHighlightIndicator = { { "Shift", "Right" }, event = "MoveHighlightIndicator", args = {1, 0, QUICK_INDICATOR_MOVE} }
self.key_events.LeftHighlightIndicator = { { "Left" }, event = "MoveHighlightIndicator", args = {-1, 0} } self.key_events.StartHighlightIndicator = { { "H" } }
self.key_events.RightHighlightIndicator = { { "Right" }, event = "MoveHighlightIndicator", args = {1, 0} } if Device:hasDPad() then
self.key_events.HighlightPress = { { "Press" } } self.key_events.StopHighlightIndicator = { { Device.input.group.Back }, args = true } -- true: clear highlight selection
if Device:hasKeys() then self.key_events.UpHighlightIndicator = { { "Up" }, event = "MoveHighlightIndicator", args = {0, -1} }
self.key_events.QuickUpHighlightIndicator = { { "Shift", "Up" }, event = "MoveHighlightIndicator", args = {0, -1, QUICK_INDICATOR_MOVE} } self.key_events.DownHighlightIndicator = { { "Down" }, event = "MoveHighlightIndicator", args = {0, 1} }
self.key_events.QuickDownHighlightIndicator = { { "Shift", "Down" }, event = "MoveHighlightIndicator", args = {0, 1, QUICK_INDICATOR_MOVE} } -- let hasFewKeys device move the indicator left
self.key_events.QuickLeftHighlightIndicator = { { "Shift", "Left" }, event = "MoveHighlightIndicator", args = {-1, 0, QUICK_INDICATOR_MOVE} } self.key_events.LeftHighlightIndicator = { { "Left" }, event = "MoveHighlightIndicator", args = {-1, 0} }
self.key_events.QuickRightHighlightIndicator = { { "Shift", "Right" }, event = "MoveHighlightIndicator", args = {1, 0, QUICK_INDICATOR_MOVE} } self.key_events.RightHighlightIndicator = { { "Right" }, event = "MoveHighlightIndicator", args = {1, 0} }
self.key_events.StartHighlightIndicator = { { "H" } } self.key_events.HighlightPress = { { "Press" } }
end 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
end end
ReaderHighlight.onPhysicalKeyboardConnected = ReaderHighlight.registerKeyEvents ReaderHighlight.onPhysicalKeyboardConnected = ReaderHighlight.registerKeyEvents
ReaderHighlight.onPhysicalKeyboardDisconnected = ReaderHighlight.registerKeyEvents
function ReaderHighlight:setupTouchZones() function ReaderHighlight:setupTouchZones()
if not Device:isTouchDevice() then return end if not Device:isTouchDevice() then return end

@ -26,7 +26,7 @@ local ReaderLink = InputContainer:extend{
} }
function ReaderLink:init() function ReaderLink:init()
self:registerKeyEvents(true) self:registerKeyEvents()
if Device:isTouchDevice() then if Device:isTouchDevice() then
self.ui:registerTouchZones({ self.ui:registerTouchZones({
{ {
@ -95,7 +95,7 @@ end
function ReaderLink:onGesture() end function ReaderLink:onGesture() end
function ReaderLink:registerKeyEvents(init) function ReaderLink:registerKeyEvents()
if Device:hasKeys() then if Device:hasKeys() then
self.key_events = { self.key_events = {
SelectNextPageLink = { SelectNextPageLink = {
@ -114,13 +114,10 @@ function ReaderLink:registerKeyEvents(init)
-- "Back" is handled by ReaderBack, which will call our onGoBackLink() -- "Back" is handled by ReaderBack, which will call our onGoBackLink()
-- when G_reader_settings:readSetting("back_in_reader") == "previous_location" -- when G_reader_settings:readSetting("back_in_reader") == "previous_location"
} }
elseif not init then
self.key_events = {}
end end
end end
ReaderLink.onPhysicalKeyboardConnected = ReaderLink.registerKeyEvents ReaderLink.onPhysicalKeyboardConnected = ReaderLink.registerKeyEvents
ReaderLink.onPhysicalKeyboardDisconnected = ReaderLink.registerKeyEvents
function ReaderLink:onReadSettings(config) function ReaderLink:onReadSettings(config)
-- called when loading new document -- called when loading new document

@ -56,7 +56,7 @@ function ReaderMenu:init()
self.registered_widgets = {} self.registered_widgets = {}
self:registerKeyEvents(true) self:registerKeyEvents()
if G_reader_settings:has("activate_menu") then if G_reader_settings:has("activate_menu") then
self.activation_menu = G_reader_settings:readSetting("activate_menu") self.activation_menu = G_reader_settings:readSetting("activate_menu")
@ -70,7 +70,7 @@ end
function ReaderMenu:onGesture() end function ReaderMenu:onGesture() end
function ReaderMenu:registerKeyEvents(init) function ReaderMenu:registerKeyEvents()
if Device:hasKeys() then if Device:hasKeys() then
if Device:isTouchDevice() then if Device:isTouchDevice() then
self.key_events.TapShowMenu = { { "Menu" } } self.key_events.TapShowMenu = { { "Menu" } }
@ -85,14 +85,10 @@ function ReaderMenu:registerKeyEvents(init)
self.key_events.ShowMenu = { { { "Menu", "Right" } } } self.key_events.ShowMenu = { { { "Menu", "Right" } } }
end end
end end
elseif not init then
self.key_events.TapShowMenu = nil
self.key_events.ShowMenu = nil
end end
end end
ReaderMenu.onPhysicalKeyboardConnected = ReaderMenu.registerKeyEvents ReaderMenu.onPhysicalKeyboardConnected = ReaderMenu.registerKeyEvents
ReaderMenu.onPhysicalKeyboardDisconnected = ReaderMenu.registerKeyEvents
function ReaderMenu:getPreviousFile() function ReaderMenu:getPreviousFile()
return require("readhistory"):getPreviousFile(self.ui.document.file) return require("readhistory"):getPreviousFile(self.ui.document.file)

@ -41,7 +41,7 @@ local ReaderPaging = InputContainer:extend{
} }
function ReaderPaging:init() function ReaderPaging:init()
self:registerKeyEvents(true) self:registerKeyEvents()
self.pan_interval = time.s(1 / self.pan_rate) self.pan_interval = time.s(1 / self.pan_rate)
self.number_of_pages = self.ui.document.info.number_of_pages self.number_of_pages = self.ui.document.info.number_of_pages
@ -51,7 +51,7 @@ end
function ReaderPaging:onGesture() end function ReaderPaging:onGesture() end
function ReaderPaging:registerKeyEvents(init) function ReaderPaging:registerKeyEvents()
if Device:hasKeys() then if Device:hasKeys() then
self.key_events.GotoNextPage = { self.key_events.GotoNextPage = {
{ { "RPgFwd", "LPgFwd", not Device:hasFewKeys() and "Right" } }, { { "RPgFwd", "LPgFwd", not Device:hasFewKeys() and "Right" } },
@ -73,11 +73,6 @@ function ReaderPaging:registerKeyEvents(init)
event = "GotoPosRel", event = "GotoPosRel",
args = -1, 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 end
if Device:hasKeyboard() then if Device:hasKeyboard() then
self.key_events.GotoFirst = { self.key_events.GotoFirst = {
@ -130,22 +125,10 @@ function ReaderPaging:registerKeyEvents(init)
event = "GotoPercent", event = "GotoPercent",
args = 100, 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
end end
ReaderPaging.onPhysicalKeyboardConnected = ReaderPaging.registerKeyEvents ReaderPaging.onPhysicalKeyboardConnected = ReaderPaging.registerKeyEvents
ReaderPaging.onPhysicalKeyboardDisconnected = ReaderPaging.registerKeyEvents
function ReaderPaging:onReaderReady() function ReaderPaging:onReaderReady()
self:setupTouchZones() self:setupTouchZones()

@ -13,14 +13,14 @@ local ReaderPanning = InputContainer:extend{
} }
function ReaderPanning:init() function ReaderPanning:init()
self:registerKeyEvents(true) self:registerKeyEvents()
-- NOP our own gesture handling -- NOP our own gesture handling
self.ges_events = nil self.ges_events = nil
end end
function ReaderPanning:onGesture() end function ReaderPanning:onGesture() end
function ReaderPanning:registerKeyEvents(init) function ReaderPanning:registerKeyEvents()
if Device:hasKeyboard() then if Device:hasKeyboard() then
self.key_events = { self.key_events = {
-- these will all generate the same event, just with different arguments -- these will all generate the same event, just with different arguments
@ -45,13 +45,10 @@ function ReaderPanning:registerKeyEvents(init)
args = {1, 0} args = {1, 0}
}, },
} }
elseif not init then
self.key_events = {}
end end
end end
ReaderPanning.onPhysicalKeyboardConnected = ReaderPanning.registerKeyEvents ReaderPanning.onPhysicalKeyboardConnected = ReaderPanning.registerKeyEvents
ReaderPanning.onPhysicalKeyboardDisconnected = ReaderPanning.registerKeyEvents
function ReaderPanning:onPanning(args, _) function ReaderPanning:onPanning(args, _)
local dx, dy = unpack(args) local dx, dy = unpack(args)

@ -57,7 +57,7 @@ local ReaderRolling = InputContainer:extend{
} }
function ReaderRolling:init() function ReaderRolling:init()
self:registerKeyEvents(true) self:registerKeyEvents()
self.pan_interval = time.s(1 / self.pan_rate) self.pan_interval = time.s(1 / self.pan_rate)
table.insert(self.ui.postInitCallback, function() table.insert(self.ui.postInitCallback, function()
@ -79,7 +79,7 @@ end
function ReaderRolling:onGesture() end function ReaderRolling:onGesture() end
function ReaderRolling:registerKeyEvents(init) function ReaderRolling:registerKeyEvents()
if Device:hasKeys() then if Device:hasKeys() then
self.key_events.GotoNextView = { self.key_events.GotoNextView = {
{ { "RPgFwd", "LPgFwd", "Right" } }, { { "RPgFwd", "LPgFwd", "Right" } },
@ -91,9 +91,6 @@ function ReaderRolling:registerKeyEvents(init)
event = "GotoViewRel", event = "GotoViewRel",
args = -1, args = -1,
} }
elseif not init then
self.key_events.GotoNextView = nil
self.key_events.GotoPrevView = nil
end end
if Device:hasDPad() then if Device:hasDPad() then
self.key_events.MoveUp = { self.key_events.MoveUp = {
@ -106,9 +103,6 @@ function ReaderRolling:registerKeyEvents(init)
event = "Panning", event = "Panning",
args = {0, 1}, args = {0, 1},
} }
elseif not init then
self.key_events.MoveUp = nil
self.key_events.MoveDown = nil
end end
if Device:hasKeyboard() then if Device:hasKeyboard() then
self.key_events.GotoFirst = { self.key_events.GotoFirst = {
@ -161,22 +155,10 @@ function ReaderRolling:registerKeyEvents(init)
event = "GotoPercent", event = "GotoPercent",
args = 100, 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
end end
ReaderRolling.onPhysicalKeyboardConnected = ReaderRolling.registerKeyEvents ReaderRolling.onPhysicalKeyboardConnected = ReaderRolling.registerKeyEvents
ReaderRolling.onPhysicalKeyboardDisconnected = ReaderRolling.registerKeyEvents
function ReaderRolling:onReadSettings(config) function ReaderRolling:onReadSettings(config)
-- 20180503: some fix in crengine has changed the way the DOM is built -- 20180503: some fix in crengine has changed the way the DOM is built

@ -8,14 +8,14 @@ local ReaderRotation = InputContainer:extend{
} }
function ReaderRotation:init() function ReaderRotation:init()
self:registerKeyEvents(true) self:registerKeyEvents()
-- NOP our own gesture handling -- NOP our own gesture handling
self.ges_events = nil self.ges_events = nil
end end
function ReaderRotation:onGesture() end function ReaderRotation:onGesture() end
function ReaderRotation:registerKeyEvents(init) function ReaderRotation:registerKeyEvents()
if Device:hasKeyboard() then if Device:hasKeyboard() then
self.key_events = { self.key_events = {
-- these will all generate the same event, just with different arguments -- these will all generate the same event, just with different arguments
@ -30,13 +30,10 @@ function ReaderRotation:registerKeyEvents(init)
args = 90 args = 90
}, },
} }
elseif not init then
self.key_events = {}
end end
end end
ReaderRotation.onPhysicalKeyboardConnected = ReaderRotation.registerKeyEvents ReaderRotation.onPhysicalKeyboardConnected = ReaderRotation.registerKeyEvents
ReaderRotation.onPhysicalKeyboardDisconnected = ReaderRotation.registerKeyEvents
--- @todo Reset rotation on new document, maybe on new page? --- @todo Reset rotation on new document, maybe on new page?

@ -50,7 +50,7 @@ function TweakInfoWidget:init()
} }
} }
end end
self:registerKeyEvents(true) self:registerKeyEvents()
local content = VerticalGroup:new{ local content = VerticalGroup:new{
TextBoxWidget:new{ TextBoxWidget:new{
@ -166,16 +166,13 @@ function TweakInfoWidget:init()
} }
end end
function TweakInfoWidget:registerKeyEvents(init) function TweakInfoWidget:registerKeyEvents()
if Device:hasKeys() then if Device:hasKeys() then
self.key_events.Close = { { Device.input.group.Back } } self.key_events.Close = { { Device.input.group.Back } }
elseif not init then
self.key_events.Close = nil
end end
end end
TweakInfoWidget.onPhysicalKeyboardConnected = TweakInfoWidget.registerKeyEvents TweakInfoWidget.onPhysicalKeyboardConnected = TweakInfoWidget.registerKeyEvents
TweakInfoWidget.onPhysicalKeyboardDisconnected = TweakInfoWidget.registerKeyEvents
function TweakInfoWidget:onShow() function TweakInfoWidget:onShow()
UIManager:setDirty(self, function() UIManager:setDirty(self, function()

@ -35,7 +35,7 @@ local ReaderToc = InputContainer:extend{
} }
function ReaderToc:init() function ReaderToc:init()
self:registerKeyEvents(true) self:registerKeyEvents()
if G_reader_settings:hasNot("toc_items_per_page") then if G_reader_settings:hasNot("toc_items_per_page") then
-- The TOC items per page and items' font size can now be -- The TOC items per page and items' font size can now be
@ -60,16 +60,13 @@ end
function ReaderToc:onGesture() end function ReaderToc:onGesture() end
function ReaderToc:registerKeyEvents(init) function ReaderToc:registerKeyEvents()
if Device:hasKeyboard() then if Device:hasKeyboard() then
self.key_events.ShowToc = { { "T" } } self.key_events.ShowToc = { { "T" } }
elseif not init then
self.key_events.ShowToc = nil
end end
end end
ReaderToc.onPhysicalKeyboardConnected = ReaderToc.registerKeyEvents ReaderToc.onPhysicalKeyboardConnected = ReaderToc.registerKeyEvents
ReaderToc.onPhysicalKeyboardDisconnected = ReaderToc.registerKeyEvents
function ReaderToc:onReadSettings(config) function ReaderToc:onReadSettings(config)
self.toc_ticks_ignored_levels = config:readSetting("toc_ticks_ignored_levels") or {} self.toc_ticks_ignored_levels = config:readSetting("toc_ticks_ignored_levels") or {}

@ -91,10 +91,10 @@ local ReaderZooming = InputContainer:extend{
} }
function ReaderZooming:init() function ReaderZooming:init()
self:registerKeyEvents(true) self:registerKeyEvents()
end end
function ReaderZooming:registerKeyEvents(init) function ReaderZooming:registerKeyEvents()
if Device:hasKeyboard() then if Device:hasKeyboard() then
self.key_events = { self.key_events = {
ZoomIn = { ZoomIn = {
@ -143,13 +143,10 @@ function ReaderZooming:registerKeyEvents(init)
args = "manual", args = "manual",
}, },
} }
elseif not init then
self.key_events = {}
end end
end end
ReaderZooming.onPhysicalKeyboardConnected = ReaderZooming.registerKeyEvents ReaderZooming.onPhysicalKeyboardConnected = ReaderZooming.registerKeyEvents
ReaderZooming.onPhysicalKeyboardDisconnected = ReaderZooming.registerKeyEvents
-- Conversions between genus/type combos and zoom_mode... -- Conversions between genus/type combos and zoom_mode...
function ReaderZooming:mode_to_combo(zoom_mode) function ReaderZooming:mode_to_combo(zoom_mode)

@ -122,7 +122,7 @@ function ReaderUI:init()
-- Handle local settings migration -- Handle local settings migration
SettingsMigration:migrateSettings(self.doc_settings) SettingsMigration:migrateSettings(self.doc_settings)
self:registerKeyEvents(true) self:registerKeyEvents()
-- a view container (so it must be child #1!) -- a view container (so it must be child #1!)
-- all paintable widgets need to be a child of reader view -- all paintable widgets need to be a child of reader view
@ -481,18 +481,14 @@ function ReaderUI:init()
ReaderUI.instance = self ReaderUI.instance = self
end end
function ReaderUI:registerKeyEvents(init) function ReaderUI:registerKeyEvents()
if Device:hasKeys() then if Device:hasKeys() then
self.key_events.Home = { { "Home" } } self.key_events.Home = { { "Home" } }
self.key_events.Reload = { { "F5" } } self.key_events.Reload = { { "F5" } }
elseif not init then
self.key_events.Home = nil
self.key_events.Reload = nil
end end
end end
ReaderUI.onPhysicalKeyboardConnected = ReaderUI.registerKeyEvents ReaderUI.onPhysicalKeyboardConnected = ReaderUI.registerKeyEvents
ReaderUI.onPhysicalKeyboardDisconnected = ReaderUI.registerKeyEvents
function ReaderUI:setLastDirForFileBrowser(dir) function ReaderUI:setLastDirForFileBrowser(dir)
if dir and #dir > 1 and dir:sub(-1) == "/" then if dir and #dir > 1 and dir:sub(-1) == "/" then

@ -305,4 +305,13 @@ function InputContainer:closeInputDialog()
UIManager:close(self.input_dialog) UIManager:close(self.input_dialog)
end 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 return InputContainer

@ -274,12 +274,17 @@ function FocusManager:onPhysicalKeyboardDisconnected()
local prev_key_events = KEY_EVENTS local prev_key_events = KEY_EVENTS
populateEventMappings() populateEventMappings()
-- Remove what disappeared from KEY_EVENTS from self.key_events (if any). -- If we still have keys, 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 ;). if Device:hasKeys() then
for k, _ in pairs(prev_key_events) do -- NOTE: This is slightly overkill, we could very well live with a few unreachable mappings for the rest of this widget's life ;).
if not KEY_EVENTS[k] then for k, _ in pairs(prev_key_events) do
self.key_events[k] = nil if not KEY_EVENTS[k] then
self.key_events[k] = nil
end
end end
else
-- If we longer have keys at all, that's easy ;).
self.key_events = {}
end end
self.builtin_key_events = BUILTIN_KEY_EVENTS self.builtin_key_events = BUILTIN_KEY_EVENTS
self.extra_key_events = EXTRA_KEY_EVENTS self.extra_key_events = EXTRA_KEY_EVENTS

Loading…
Cancel
Save