[DictQuickLookup] Enable temporary large window for open dictionary window (#13862)

This commit is contained in:
David
2025-06-02 13:58:24 +01:00
committed by GitHub
parent cfc67797e2
commit 06661b05ab

View File

@@ -67,8 +67,13 @@ local DictQuickLookup = InputContainer:extend{
window_list = {},
-- Static class member, used by ReaderWiktionary to communicate state from a closed widget to the next opened one.
rotated_update_wiki_languages_on_close = nil,
_is_temporary_large_window = false,
}
-- Static variable to hold request data for temporary fullscreen
DictQuickLookup.temp_large_window_request = nil
function DictQuickLookup.getWikiSaveEpubDefaultDir()
local dir = G_reader_settings:readSetting("home_dir") or filemanagerutil.getDefaultDir()
if dir:sub(-1) ~= "/" then
@@ -193,6 +198,12 @@ function DictQuickLookup:init()
end
end
},
SetTemporaryLargeWindowMode = {
GestureRange:new{
ges = "spread",
range = range,
},
},
-- These will be forwarded to MovableContainer after some checks
ForwardingTouch = { GestureRange:new{ ges = "touch", range = range, }, },
ForwardingPan = { GestureRange:new{ ges = "pan", range = range, }, },
@@ -200,10 +211,17 @@ function DictQuickLookup:init()
}
end
self.temp_large_window = DictQuickLookup.temp_large_window_request and DictQuickLookup.temp_large_window_request.is_large_window == true
-- We no longer support setting a default dict with Tap on title.
-- self:changeToDefaultDict()
-- Now, dictionaries can be ordered (although not yet per-book), so trust the order set
self:changeDictionary(1, true) -- don't call update
if DictQuickLookup.temp_large_window_request and DictQuickLookup.temp_large_window_request.dict_index then
self:changeDictionary(DictQuickLookup.temp_large_window_request.dict_index, true)
DictQuickLookup.temp_large_window_request.dict_index = nil
self._is_temporary_large_window = true
else
self:changeDictionary(1, true) -- don't call update
end
-- And here comes the initial widget layout...
if self.is_wiki then
@@ -214,7 +232,7 @@ function DictQuickLookup:init()
-- Bigger window if fullpage Wikipedia article being shown,
-- or when large windows for dict requested
local is_large_window = self.is_wiki_fullpage or G_reader_settings:isTrue("dict_largewindow")
local is_large_window = self.is_wiki_fullpage or G_reader_settings:isTrue("dict_largewindow") or self.temp_large_window
if is_large_window then
self.width = Screen:getWidth() - 2*Size.margin.default
else
@@ -769,6 +787,7 @@ function DictQuickLookup:registerKeyEvents()
local modifier = Device:hasScreenKB() and "ScreenKB" or "Shift"
self.key_events.ChangeToPrevDict = { { modifier, Input.group.PgBack } }
self.key_events.ChangeToNextDict = { { modifier, Input.group.PgFwd } }
self.key_events.SetTemporaryLargeWindowMode = { { modifier, "Home" } }
self.key_events.StartOrUpTextSelectorIndicator = { { modifier, "Up" }, event = "StartOrMoveTextSelectorIndicator", args = { 0, -1, true } }
self.key_events.StartOrDownTextSelectorIndicator = { { modifier, "Down" }, event = "StartOrMoveTextSelectorIndicator", args = { 0, 1, true } }
self.key_events.FastLeftTextSelectorIndicator = { { modifier, "Left" }, event = "MoveTextSelectorIndicator", args = { -1, 0, true } }
@@ -983,6 +1002,36 @@ function DictQuickLookup:update()
end)
end
function DictQuickLookup:onSetTemporaryLargeWindowMode()
self:setTemporaryLargeWindowMode()
return true
end
function DictQuickLookup:setTemporaryLargeWindowMode()
if self.temp_large_window then return false end
if self.is_wiki_fullpage or G_reader_settings:isTrue("dict_largewindow") then return false end
-- Remove ourselves from window_list before creating the new instance, onHoldClose won't like it if we still exist.
for i = #DictQuickLookup.window_list, 1, -1 do
if DictQuickLookup.window_list[i] == self then
table.remove(DictQuickLookup.window_list, i)
break
end
end
-- We want to remember the current dict_index (e.g. 5/7), so that it can be restored later.
DictQuickLookup.temp_large_window_request = {
dict_index = self.dict_index,
is_large_window = true, -- note: any would-be child window will also open in fullscreen mode.
}
-- Re-trigger the lookup, and close this instance _after_ the new one is created.
if self.is_wiki then
self.ui:handleEvent(Event:new("LookupWikipedia", self.word, self.is_sane_word, self.word_boxes, false, self.lang, function() self:onClose(true) end))
else
self.ui:handleEvent(Event:new("LookupWord", self.word, true, self.word_boxes, self.highlight, nil, function() self:onClose(true) end))
end
return true
end
function DictQuickLookup:getInitialVisibleArea()
-- Some positioning happens only at paintTo() time, but we want
-- to know this before. So, do a bit like WidgetContainer does
@@ -1227,6 +1276,10 @@ function DictQuickLookup:onClose(no_clear)
UIManager:close(self)
if self._is_temporary_large_window then
DictQuickLookup.temp_large_window_request = nil
end
if self.update_wiki_languages_on_close then
-- except if we got no result for current language
if not self.results.no_result then