added wrapper function for input.waitForEvent that retries on EINTR

pull/2/merge
HW 12 years ago
parent b11c5f414a
commit 57d769e0ae

@ -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())

@ -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()

Loading…
Cancel
Save