mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
added wrapper function for input.waitForEvent that retries on EINTR
This commit is contained in:
@@ -164,7 +164,7 @@ function FileChooser:choose(ypos, height)
|
||||
pagedirty = false
|
||||
end
|
||||
|
||||
local ev = input.waitForEvent()
|
||||
local ev = input.saveWaitForEvent()
|
||||
--print("key code:"..ev.code)
|
||||
ev.code = adjustKeyEvents(ev)
|
||||
if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then
|
||||
|
||||
@@ -289,7 +289,7 @@ function FileSearcher:choose(keywords)
|
||||
self.pagedirty = false
|
||||
end
|
||||
|
||||
local ev = input.waitForEvent()
|
||||
local ev = input.saveWaitForEvent()
|
||||
ev.code = adjustKeyEvents(ev)
|
||||
if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then
|
||||
keydef = Keydef:new(ev.code, getKeyModifier())
|
||||
|
||||
@@ -77,7 +77,7 @@ function HelpPage:show(ypos, height, commands)
|
||||
pagedirty = false
|
||||
end
|
||||
|
||||
local ev = input.waitForEvent()
|
||||
local ev = input.saveWaitForEvent()
|
||||
--print("key code:"..ev.code)
|
||||
ev.code = adjustKeyEvents(ev)
|
||||
if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then
|
||||
|
||||
@@ -163,7 +163,7 @@ function InputBox:input(ypos, height, title, d_text)
|
||||
fb:refresh(1, 20, ypos, w, h)
|
||||
|
||||
while true do
|
||||
local ev = input.waitForEvent()
|
||||
local ev = input.saveWaitForEvent()
|
||||
ev.code = adjustKeyEvents(ev)
|
||||
if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then
|
||||
keydef = Keydef:new(ev.code, getKeyModifier())
|
||||
|
||||
19
keys.lua
19
keys.lua
@@ -254,3 +254,22 @@ function adjustKeyEvents(ev)
|
||||
print("# Unrecognizable rotation mode "..Screen.cur_rotation_mode.."!")
|
||||
return nil
|
||||
end
|
||||
|
||||
-- wrapper for input.waitForEvents that will retry for some cases
|
||||
function input.saveWaitForEvent(timeout)
|
||||
local retry = true
|
||||
while retry do
|
||||
local ok, ev = pcall(input.waitForEvent, timeout)
|
||||
if not ok then
|
||||
print("got error waiting for events:", ev)
|
||||
if ev == "Waiting for input failed: 4" then
|
||||
-- EINTR, we got interrupted. Try and restart
|
||||
retry = true
|
||||
else
|
||||
retry = false
|
||||
end
|
||||
else
|
||||
return ev
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -318,7 +318,7 @@ function SelectMenu:choose(ypos, height)
|
||||
self.pagedirty = false
|
||||
end
|
||||
|
||||
local ev = input.waitForEvent()
|
||||
local ev = input.saveWaitForEvent()
|
||||
ev.code = adjustKeyEvents(ev)
|
||||
if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then
|
||||
keydef = Keydef:new(ev.code, getKeyModifier())
|
||||
|
||||
@@ -508,7 +508,7 @@ function UniReader:startHighLightMode()
|
||||
|
||||
-- first use cursor to place start pos for highlight
|
||||
while running do
|
||||
local ev = input.waitForEvent()
|
||||
local ev = input.saveWaitForEvent()
|
||||
ev.code = adjustKeyEvents(ev)
|
||||
if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then
|
||||
if ev.code == KEY_FW_LEFT and not is_meet_start then
|
||||
@@ -727,7 +727,7 @@ function UniReader:startHighLightMode()
|
||||
-- go into highlight mode
|
||||
running = true
|
||||
while running do
|
||||
local ev = input.waitForEvent()
|
||||
local ev = input.saveWaitForEvent()
|
||||
ev.code = adjustKeyEvents(ev)
|
||||
if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then
|
||||
if ev.code == KEY_FW_LEFT then
|
||||
@@ -1602,7 +1602,7 @@ function UniReader:showMenu()
|
||||
|
||||
fb:refresh(1)
|
||||
while 1 do
|
||||
local ev = input.waitForEvent()
|
||||
local ev = input.saceWaitForEvent()
|
||||
ev.code = adjustKeyEvents(ev)
|
||||
if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then
|
||||
if ev.code == KEY_BACK or ev.code == KEY_MENU then
|
||||
@@ -1627,7 +1627,7 @@ end
|
||||
function UniReader:inputLoop()
|
||||
local keep_running = true
|
||||
while 1 do
|
||||
local ev = input.waitForEvent()
|
||||
local ev = input.saveWaitForEvent()
|
||||
ev.code = adjustKeyEvents(ev)
|
||||
if ev.type == EV_KEY and ev.value == EVENT_VALUE_KEY_PRESS then
|
||||
local secs, usecs = util.gettime()
|
||||
|
||||
Reference in New Issue
Block a user