save doc settings when receiving IntoSS or Suspend or SaveState events

pull/634/head
chrox 10 years ago
parent 3b5fa25c25
commit 15baeb7867

@ -293,6 +293,11 @@ function ReaderUI:saveSettings()
self.doc_settings:flush()
end
function ReaderUI:onFlushSettings()
self:saveSettings()
return true
end
function ReaderUI:onClose()
DEBUG("closing reader")
self:saveSettings()

@ -6,12 +6,14 @@ local Screen = require("ui/screen")
local Math = require("optmath")
local DEBUG = require("dbg")
local _ = require("gettext")
local ffi = require("ffi")
local util = require("ffi/util")
-- constants from <linux/input.h>
local EV_SYN = 0
local EV_KEY = 1
local EV_ABS = 3
local EV_MSC = 4
-- key press event values (KEY.value)
local EVENT_VALUE_KEY_PRESS = 1
@ -211,6 +213,39 @@ function Input:initKeyMap()
[117] = "RPgFwd", -- normal PageDown
[119] = "Del", -- Delete
}
self.sdl2_event_map = {
[ 4] = "A", [ 5] = "B", [ 6] = "C", [ 7] = "D", [ 8] = "E", [ 9] = "F",
[10] = "G", [11] = "H", [12] = "I", [13] = "J", [14] = "K", [15] = "L",
[16] = "M", [17] = "N", [18] = "O", [19] = "P", [20] = "Q", [21] = "R",
[22] = "S", [23] = "T", [24] = "U", [25] = "V", [26] = "W", [27] = "X",
[28] = "Y", [29] = "Z", [30] = "1", [31] = "2", [32] = "3", [33] = "4",
[34] = "5", [35] = "6", [36] = "7", [37] = "8", [38] = "9", [39] = "0",
[42] = "Back", -- Backspace
[40] = "Enter", -- Enter
[225] = "Shift", -- left shift
[55] = ".",
[56] = "/",
[229] = "Sym", -- right shift key
[226] = "Alt", -- left alt
[44] = " ", -- Spacebar
[58] = "Menu", -- F[1]
[63] = "LPgBack", -- F[6]
[64] = "LPgFwd", -- F[7]
[68] = "VPlus", -- F[11]
[69] = "VMinus", -- F[12]
[230] = "AA", -- right alt key
[74] = "Home", -- Home
[82] = "Up", -- arrow up
[75] = "RPgBack", -- normal PageUp
[80] = "Left", -- arrow left
[79] = "Right", -- arrow right
[77] = "Press", -- End (above arrows)
[81] = "Down", -- arrow down
[78] = "RPgFwd", -- normal PageDown
[76] = "Del", -- Delete
}
self.modifiers = {
Alt = false,
Shift = false
@ -261,9 +296,7 @@ function Input:initTouchState()
end
function Input:init()
if Device:hasKeyboard() then
self:initKeyMap()
end
self:initKeyMap()
if Device:isTouchDevice() then
self:initTouchState()
end
@ -274,12 +307,16 @@ function Input:init()
self.event_map[10021] = "NotCharging"
if util.isEmulated() then
self:initKeyMap()
os.remove("/tmp/emu_event")
os.execute("mkfifo /tmp/emu_event")
input.open("/tmp/emu_event")
-- SDL key codes
self.event_map = self.sdl_event_map
if not util.haveSDL2() then
self.event_map = self.sdl_event_map
else
self.event_map = self.sdl2_event_map
end
else
local dev_mod = Device:getModel()
if not Device:isKobo() then
@ -389,6 +426,10 @@ function Input:init()
input.open("/dev/input/event1")
elseif util.isAndroid() then
DEBUG("Auto-detected Android")
self:adjustAndroidEventMap()
function Input:handleMiscEv(ev)
return Input:handleAndroidMiscEvent(ev)
end
else
DEBUG("Not supported device model!")
end
@ -425,6 +466,9 @@ function Input:adjustKoboEventMap()
self.event_map[116] = "Power"
end
function Input:adjustAndroidEventMap()
end
function Input:setTimeout(cb, tv_out)
local item = {
callback = cb,
@ -486,6 +530,15 @@ function Input:handleKeyBoardEv(ev)
end
end
function Input:handleMiscEv(ev)
end
function Input:handleAndroidMiscEvent(ev)
if ev.code == ffi.C.APP_CMD_SAVE_STATE then
return "SaveState"
end
end
function Input:setMtSlot(slot, key, val)
if not self.ev_slots[slot] then
self.ev_slots[slot] = {
@ -717,9 +770,12 @@ function Input:waitEvent(timeout_us, timeout_s)
end
ev = self:eventAdjustHook(ev)
if ev.type == EV_KEY then
DEBUG("key ev", ev)
return self:handleKeyBoardEv(ev)
elseif ev.type == EV_ABS or ev.type == EV_SYN then
return self:handleTouchEv(ev)
elseif ev.type == EV_MSC then
return self:handleMiscEv(ev)
else
-- some other kind of event that we do not know yet
return Event:new("GenericInput", ev)

@ -282,6 +282,7 @@ function UIManager:run()
if input_event then
--DEBUG("in ui.lua:", input_event)
if input_event == "IntoSS" then
self:sendEvent(Event:new("FlushSettings"))
Device:intoScreenSaver()
elseif input_event == "OutOfSS" then
Device:outofScreenSaver()
@ -299,12 +300,15 @@ function UIManager:run()
text = _("Standby"),
timeout = 1,
})
self:sendEvent(Event:new("FlushSettings"))
Device:prepareSuspend()
self:scheduleIn(0.5, function() Device:Suspend() end)
elseif (input_event == "Power" and Device.screen_saver_mode)
or input_event == "Resume" then
Device:Resume()
self:sendEvent(Event:new("Resume"))
elseif input_event == "SaveState" then
self:sendEvent(Event:new("FlushSettings"))
else
self:sendEvent(input_event)
end

@ -1 +1 @@
Subproject commit 2b38b16d2795a228b1a541fbc2e09bd093119aad
Subproject commit 9dc2c6b2a2e15d47a17cb811182684a4ed272013
Loading…
Cancel
Save