From e947f83548bb84d4e05031f4168d72b138dd3963 Mon Sep 17 00:00:00 2001 From: chrox Date: Sat, 18 Jan 2014 19:18:12 +0800 Subject: [PATCH] fix dogear not shown properly in crereader --- frontend/document/credocument.lua | 5 +++++ frontend/ui/reader/readerbookmark.lua | 25 +++++++++++++++++-------- frontend/ui/reader/readerdogear.lua | 2 ++ koreader-base | 2 +- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index b6bd76fff..b9bc174aa 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -348,6 +348,11 @@ function CreDocument:setBatteryState(state) self._document:setBatteryState(state) end +function CreDocument:isXPointerInCurrentPage(xp) + DEBUG("CreDocument: check in page", xp) + return self._document:isXPointerInCurrentPage(xp) +end + function CreDocument:register(registry) registry:addProvider("txt", "application/txt", self) registry:addProvider("epub", "application/epub", self) diff --git a/frontend/ui/reader/readerbookmark.lua b/frontend/ui/reader/readerbookmark.lua index 375c0d7cc..f717d43b7 100644 --- a/frontend/ui/reader/readerbookmark.lua +++ b/frontend/ui/reader/readerbookmark.lua @@ -7,6 +7,7 @@ local Geom = require("ui/geometry") local Screen = require("ui/screen") local UIManager = require("ui/uimanager") local Event = require("ui/event") +local DEBUG = require("dbg") local _ = require("gettext") local ReaderBookmark = InputContainer:new{ @@ -35,10 +36,10 @@ end function ReaderBookmark:onToggleBookmark() local pn_or_xp = nil - if self.ui.document.getXPointer then - pn_or_xp = self.ui.document:getXPointer() - else + if self.ui.document.info.has_pages then pn_or_xp = self.view.state.page + else + pn_or_xp = self.ui.document:getXPointer() end self:toggleBookmark(pn_or_xp) self.view.dogear_visible = not self.view.dogear_visible @@ -55,14 +56,20 @@ function ReaderBookmark:setDogearVisibility(pn_or_xp) end function ReaderBookmark:onPageUpdate(pageno) - self:setDogearVisibility(pageno) + if self.ui.document.info.has_pages then + self:setDogearVisibility(pageno) + else + -- FIXME: this is a dirty hack to prevent crash in isXPointerInCurrentPage + if pageno ~= 1 then + self:setDogearVisibility("dummy") + end + end end function ReaderBookmark:onPosUpdate(pos) - -- TODO: cannot check if this pos is bookmarked or not. + self:setDogearVisibility("dummy") end - function ReaderBookmark:onShowBookmark() -- build up item_table for k, v in ipairs(self.bookmarks) do @@ -124,7 +131,8 @@ end function ReaderBookmark:isBookmarked(pn_or_xp) for k,v in ipairs(self.bookmarks) do - if v.page == pn_or_xp then + if (type(pn_or_xp) == "number" and v.page == pn_or_xp) or + (type(pn_or_xp) == "string" and self.ui.document:isXPointerInCurrentPage(v.page)) then return true end end @@ -155,7 +163,8 @@ end function ReaderBookmark:toggleBookmark(pn_or_xp) for k,v in ipairs(self.bookmarks) do - if v.page == pn_or_xp then + if (type(pn_or_xp) == "number" and v.page == pn_or_xp) or + (type(pn_or_xp) == "string" and self.ui.document:isXPointerInCurrentPage(v.page)) then table.remove(self.bookmarks, k) return end diff --git a/frontend/ui/reader/readerdogear.lua b/frontend/ui/reader/readerdogear.lua index 13e8e2acc..cb3f2b50f 100644 --- a/frontend/ui/reader/readerdogear.lua +++ b/frontend/ui/reader/readerdogear.lua @@ -2,6 +2,7 @@ local InputContainer = require("ui/widget/container/inputcontainer") local RightContainer = require("ui/widget/container/rightcontainer") local ImageWidget = require("ui/widget/imagewidget") local GestureRange = require("ui/gesturerange") +local UIManager = require("ui/uimanager") local Device = require("ui/device") local Geom = require("ui/geometry") local Screen = require("ui/screen") @@ -57,6 +58,7 @@ end function ReaderDogear:onSetDogearVisibility(visible) self.view.dogear_visible = visible + UIManager:setDirty(self.view.dialog, "partial") return true end diff --git a/koreader-base b/koreader-base index ff0611948..aa1328ca5 160000 --- a/koreader-base +++ b/koreader-base @@ -1 +1 @@ -Subproject commit ff06119483b6500afc5a03dcecb5848871c658d2 +Subproject commit aa1328ca5d8812084cfb1adf45d809044f887379