ReaderZooming: Unconditionally update the configurables on SetZoomMode (#7735)

Expand #7728 to also catch SetZoomMode (mostly for Dispatcher's sake, but other things also send it).
reviewable/pr7744/r1
NiLuJe 3 years ago committed by GitHub
parent e955a28796
commit 2067a16fa1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -156,10 +156,6 @@ function ReaderCropping:setCropZoomMode(confirmed)
self:setZoomMode(zoom_mode_type self:setZoomMode(zoom_mode_type
and "content"..zoom_mode_type and "content"..zoom_mode_type
or self.orig_zoom_mode) or self.orig_zoom_mode)
-- Update the configurable, too
self.document.configurable.zoom_mode_genus = zoom_mode_type
and 3 -- "content"
or 4 -- "page"
self.ui:handleEvent(Event:new("InitScrollPageStates")) self.ui:handleEvent(Event:new("InitScrollPageStates"))
else else
self:setZoomMode(self.orig_zoom_mode) self:setZoomMode(self.orig_zoom_mode)

@ -119,14 +119,49 @@ function ReaderZooming:init()
}, },
} }
end end
-- Build the reverse zoom_mode -> genus/type mappings
self.zoom_mode_to_genus = {}
for k, v in pairs(self.zoom_mode_genus_map) do
self.zoom_mode_to_genus[v] = k
end
self.zoom_mode_to_type = {}
for k, v in pairs(self.zoom_mode_type_map) do
self.zoom_mode_to_type[v] = k
end
end end
function ReaderZooming:onReadSettings(config) -- Update the genus/type Configurables given a specific zoom_mode...
function ReaderZooming:_updateConfigurable(zoom_mode)
-- We may need to poke at the Configurable directly, because ReaderConfig is instantiated before us, -- We may need to poke at the Configurable directly, because ReaderConfig is instantiated before us,
-- so simply updating the DocSetting doesn't cut it... -- so simply updating the DocSetting doesn't cut it...
-- Conditional because this is an optional engine feature (only if self.document.info.configurable is true). -- Technically ought to be conditional,
local configurable = self.document and self.document.configurable -- because this is an optional engine feature (only if self.document.info.configurable is true).
-- But the rest of the code (as well as most other modules) assumes this is supported on all paged engines (it is).
local configurable = self.document.configurable
-- Quick'n dirty zoom_mode to genus/type conversion...
local zgenus, ztype = zoom_mode:match("^(page)(%l*)$")
if not zgenus then
zgenus, ztype = zoom_mode:match("^(content)(%l*)$")
end
if not zgenus then
zgenus = zoom_mode
end
if not ztype then
ztype = ""
end
local zoom_mode_genus = self.zoom_mode_to_genus[zgenus]
local zoom_mode_type = self.zoom_mode_to_type[ztype]
-- Configurable keys aren't prefixed, unlike the actual settings...
configurable.zoom_mode_genus = zoom_mode_genus
configurable.zoom_mode_type = zoom_mode_type
return zoom_mode_genus, zoom_mode_type
end
function ReaderZooming:onReadSettings(config)
-- If we have a composite zoom_mode stored, use that -- If we have a composite zoom_mode stored, use that
local zoom_mode = config:readSetting("zoom_mode") local zoom_mode = config:readSetting("zoom_mode")
or G_reader_settings:readSetting("zoom_mode") or G_reader_settings:readSetting("zoom_mode")
@ -137,38 +172,9 @@ function ReaderZooming:onReadSettings(config)
or self.DEFAULT_ZOOM_MODE or self.DEFAULT_ZOOM_MODE
-- Make sure the split genus & type match, to have an up-to-date ConfigDialog... -- Make sure the split genus & type match, to have an up-to-date ConfigDialog...
local mode_to_genus = {} local zoom_mode_genus, zoom_mode_type = self:_updateConfigurable(zoom_mode)
for k, v in pairs(self.zoom_mode_genus_map) do
mode_to_genus[v] = k
end
local mode_to_type = {}
for k, v in pairs(self.zoom_mode_type_map) do
mode_to_type[v] = k
end
-- Quick'n dirty zoom_mode to genus/type conversion...
local zgenus, ztype = zoom_mode:match("^(page)(%l*)$")
if not zgenus then
zgenus, ztype = zoom_mode:match("^(content)(%l*)$")
end
if not zgenus then
zgenus = zoom_mode
end
if not ztype then
ztype = ""
end
local zoom_mode_genus = mode_to_genus[zgenus]
config:saveSetting("kopt_zoom_mode_genus", zoom_mode_genus) config:saveSetting("kopt_zoom_mode_genus", zoom_mode_genus)
if configurable then
-- Configurable keys aren't prefixed, unlike the actual settings...
configurable.zoom_mode_genus = zoom_mode_genus
end
local zoom_mode_type = mode_to_type[ztype]
config:saveSetting("kopt_zoom_mode_type", zoom_mode_type) config:saveSetting("kopt_zoom_mode_type", zoom_mode_type)
if configurable then
configurable.zoom_mode_type = zoom_mode_type
end
else else
-- Otherwise, build it from the split genus & type settings -- Otherwise, build it from the split genus & type settings
local zoom_mode_genus = config:readSetting("kopt_zoom_mode_genus") local zoom_mode_genus = config:readSetting("kopt_zoom_mode_genus")
@ -193,9 +199,7 @@ function ReaderZooming:onReadSettings(config)
-- Import legacy zoom_factor settings -- Import legacy zoom_factor settings
if config:has("zoom_factor") and config:hasNot("kopt_zoom_factor") then if config:has("zoom_factor") and config:hasNot("kopt_zoom_factor") then
config:saveSetting("kopt_zoom_factor", config:readSetting("zoom_factor")) config:saveSetting("kopt_zoom_factor", config:readSetting("zoom_factor"))
if configurable then self.document.configurable.zoom_factor = config:readSetting("kopt_zoom_factor")
configurable.zoom_factor = config:readSetting("kopt_zoom_factor")
end
config:delSetting("zoom_factor") config:delSetting("zoom_factor")
elseif config:has("zoom_factor") and config:has("kopt_zoom_factor") then elseif config:has("zoom_factor") and config:has("kopt_zoom_factor") then
config:delSetting("zoom_factor") config:delSetting("zoom_factor")
@ -392,6 +396,7 @@ function ReaderZooming:onSetZoomMode(new_mode)
logger.info("setting zoom mode to", new_mode) logger.info("setting zoom mode to", new_mode)
self.ui:handleEvent(Event:new("ZoomModeUpdate", new_mode)) self.ui:handleEvent(Event:new("ZoomModeUpdate", new_mode))
self.zoom_mode = new_mode self.zoom_mode = new_mode
self:_updateConfigurable(new_mode)
self:setZoom() self:setZoom()
if new_mode == "manual" then if new_mode == "manual" then
self.ui:handleEvent(Event:new("SetScrollMode", false)) self.ui:handleEvent(Event:new("SetScrollMode", false))

Loading…
Cancel
Save