From f22a53affd79ae77ce5e9deb06c84210e72bc9d0 Mon Sep 17 00:00:00 2001 From: chrox Date: Mon, 2 Feb 2015 01:36:49 +0800 Subject: [PATCH] screen orientation won't change when going into filemanager and filemanager remembers screen orientation at exit This should fix #1338. --- frontend/apps/filemanager/filemanager.lua | 25 +++++++++++++++++---- frontend/apps/reader/modules/readermenu.lua | 7 +++--- frontend/ui/widget/filechooser.lua | 7 +++--- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index 161996dc8..b9ebeef41 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -155,6 +155,20 @@ function FileManager:init() self:handleEvent(Event:new("SetDimensions", self.dimen)) end +function FileManager:resetDimen(dimen) + self.dimen = dimen + -- backup the root path and path items + self.root_path = self.file_chooser.path + local path_items_backup = {} + for k, v in pairs(self.file_chooser.path_items) do + path_items_backup[k] = v + end + -- reinit filemanager + self:init() + self.file_chooser.path_items = path_items_backup + self:onRefresh() +end + function FileManager:toggleHiddenFiles() self.file_chooser:toggleHiddenFiles() G_reader_settings:saveSetting("show_hidden", self.file_chooser.show_hidden) @@ -172,6 +186,7 @@ end function FileManager:onClose() DEBUG("close filemanager") + G_reader_settings:saveSetting("fm_screen_mode", Screen:getScreenMode()) UIManager:close(self) if self.onExit then self:onExit() @@ -206,15 +221,17 @@ function FileManager:showFiles(path) DEBUG("show home page") path = path or G_reader_settings:readSetting("lastdir") or self:getDefaultDir() G_reader_settings:saveSetting("lastdir", path) - UIManager:show(FileManager:new{ + self:restoreScreenMode() + local file_manager = FileManager:new{ dimen = Screen:getSize(), root_path = path, onExit = function() - self.is_running = false + self.instance = nil UIManager:quit() end - }) - self.is_running = true + } + UIManager:show(file_manager) + self.instance = file_manager end function FileManager:copyFile(file) diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index fce5cd206..2e4d3c8b6 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -40,11 +40,10 @@ function ReaderMenu:init() callback = function() self:onTapCloseMenu() self.ui:onClose() - -- screen orientation is independent for docview and filemanager - -- so we need to restore the screen mode for the filemanager local FileManager = require("apps/filemanager/filemanager") - FileManager:restoreScreenMode() - if not FileManager.is_running then + if FileManager.instance then + FileManager.instance:resetDimen(Screen:getSize()) + else local lastdir = nil local last_file = G_reader_settings:readSetting("lastfile") if last_file then diff --git a/frontend/ui/widget/filechooser.lua b/frontend/ui/widget/filechooser.lua index 06f9007f5..4fcb81984 100644 --- a/frontend/ui/widget/filechooser.lua +++ b/frontend/ui/widget/filechooser.lua @@ -26,7 +26,7 @@ local FileChooser = Menu:extend{ strcoll = strcoll, collate = "strcoll", -- or collate = "access", reverse_collate = false, - path_pages = {}, -- store last browsed location(page) for each path + path_items = {}, -- store last browsed location(item index) for each path } function FileChooser:init() @@ -150,12 +150,11 @@ end function FileChooser:updateItems(select_number) Menu.updateItems(self, select_number) -- call parent's updateItems() - self.path_pages[self.path] = self.page + self.path_items[self.path] = (self.page - 1) * self.perpage + (select_number or 1) end function FileChooser:refreshPath() - self.page = self.path_pages[self.path] or 1 - self:swithItemTable(nil, self:genItemTableFromPath(self.path), -1) + self:swithItemTable(nil, self:genItemTableFromPath(self.path), self.path_items[self.path]) end function FileChooser:changeToPath(path)