mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
[DictQuickLookup] Enable temporary large window for open dictionary window (#13862)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user