mirror of
https://github.com/koreader/koreader.git
synced 2025-12-13 20:36:53 +01:00
Touch zones: fix loss of overrides when re-registering a zone (#5658)
Happens with "Inverse reading order", which re-registers the Reader tap forward/backward zones and would prevent tap menu and bookmark from working. Before, when removing them, we would lose all the override= set on them by other touch zones (tap menu, bookmarks...), and so they were no more ensured after re-adding the zone. So, make sure we don't lose that info.
This commit is contained in:
@@ -1577,11 +1577,6 @@ function ReaderGesture:onToggleReadingOrder()
|
|||||||
local document_module = self.ui.document.info.has_pages and self.ui.paging or self.ui.rolling
|
local document_module = self.ui.document.info.has_pages and self.ui.paging or self.ui.rolling
|
||||||
document_module.inverse_reading_order = not document_module.inverse_reading_order
|
document_module.inverse_reading_order = not document_module.inverse_reading_order
|
||||||
document_module:setupTouchZones()
|
document_module:setupTouchZones()
|
||||||
-- Needed to reset the touch zone overrides
|
|
||||||
local gesture_manager = G_reader_settings:readSetting(self.ges_mode)
|
|
||||||
for gesture, action in pairs(gesture_manager) do
|
|
||||||
self:setupGesture(gesture, action)
|
|
||||||
end
|
|
||||||
UIManager:show(Notification:new{
|
UIManager:show(Notification:new{
|
||||||
text = document_module.inverse_reading_order and _("RTL page turning.") or _("LTR page turning."),
|
text = document_module.inverse_reading_order and _("RTL page turning.") or _("LTR page turning."),
|
||||||
timeout = 2.5,
|
timeout = 2.5,
|
||||||
|
|||||||
@@ -40,7 +40,18 @@ function DepGraph:addNode(node_key, deps)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function DepGraph:removeNode(node_key)
|
function DepGraph:removeNode(node_key)
|
||||||
self.nodes[node_key] = nil
|
-- We should not remove it from self.nodes if it has
|
||||||
|
-- a .deps array (it is the other nodes, that had this
|
||||||
|
-- one in their override=, that have added themselves in
|
||||||
|
-- this node's .deps). We don't want to lose these
|
||||||
|
-- dependencies if we later re-addNode this node.
|
||||||
|
local node = self.nodes[node_key]
|
||||||
|
if node then
|
||||||
|
if not node.deps or #node.deps == 0 then
|
||||||
|
self.nodes[node_key] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- But we should remove it from the .deps of other nodes.
|
||||||
for curr_node_key, curr_node in pairs(self.nodes) do
|
for curr_node_key, curr_node in pairs(self.nodes) do
|
||||||
if curr_node.deps then
|
if curr_node.deps then
|
||||||
local remove_idx
|
local remove_idx
|
||||||
|
|||||||
@@ -98,4 +98,43 @@ describe("DepGraph module", function()
|
|||||||
'readerhighlight_hold_release',
|
'readerhighlight_hold_release',
|
||||||
}, dg:serialize())
|
}, dg:serialize())
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("should serialize complex graph and keep dependencies after removing and re-adding", function()
|
||||||
|
local dg = DepGraph:new{}
|
||||||
|
dg:addNode("tap_backward")
|
||||||
|
dg:addNode("tap_forward")
|
||||||
|
-- The next 3 steps are what is done when registering:
|
||||||
|
-- { id = "readermenu_tap", overrides = { "tap_forward", "tap_backward" } }
|
||||||
|
dg:addNode("readermenu_tap")
|
||||||
|
dg:addNodeDep("tap_backward", "readermenu_tap")
|
||||||
|
dg:addNodeDep("tap_forward", "readermenu_tap")
|
||||||
|
-- print(require("dump")(dg))
|
||||||
|
-- ["nodes"] = {
|
||||||
|
-- ["readermenu_tap"] = {},
|
||||||
|
-- ["tap_backward"] = {
|
||||||
|
-- ["deps"] = {
|
||||||
|
-- [1] = "readermenu_tap"
|
||||||
|
-- }
|
||||||
|
-- },
|
||||||
|
-- ["tap_forward"] = {
|
||||||
|
-- ["deps"] = {
|
||||||
|
-- [1] = "readermenu_tap"
|
||||||
|
-- }
|
||||||
|
-- }
|
||||||
|
-- }
|
||||||
|
dg:removeNode("tap_forward")
|
||||||
|
dg:removeNode("tap_backward")
|
||||||
|
dg:addNode("tap_forward")
|
||||||
|
dg:addNode("tap_backward")
|
||||||
|
-- print(require("dump")(dg))
|
||||||
|
assert.are.same({
|
||||||
|
"readermenu_tap",
|
||||||
|
"tap_backward",
|
||||||
|
"tap_forward",
|
||||||
|
}, dg:serialize())
|
||||||
|
assert.is_true(type(dg.nodes["tap_forward"].deps) == "table")
|
||||||
|
assert.is_true(#dg.nodes["tap_forward"].deps > 0)
|
||||||
|
assert.is_true(type(dg.nodes["tap_backward"].deps) == "table")
|
||||||
|
assert.is_true(#dg.nodes["tap_backward"].deps > 0)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|||||||
Reference in New Issue
Block a user