diff --git a/frontend/ui/widget/dictquicklookup.lua b/frontend/ui/widget/dictquicklookup.lua index 73d35a77a..576eec263 100644 --- a/frontend/ui/widget/dictquicklookup.lua +++ b/frontend/ui/widget/dictquicklookup.lua @@ -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