factor out repaint to its own method

it's gotten complex enough to isolate it
Fix double-check of task list

Since commit 12a76fee3375741bc257ddbfd6eaa9fc531695ca, we had a potential
bug on the event mechanism:

It introduced (besides the checkTasks method itself) a second run of the
checkTasks() method. In the second run, however, scheduled events were
not taken into consideration in how long to wait for input events
afterwards.

So when the after the first run of checkTasks() there were new scheduled
tasks added to the task queue, they were not properly scheduled and
and depended on an already existing scheduled event or an input event
to trigger.

This might have led to unexpected order of execution (though the order
is not guaranteed by the task scheduling anyway!) or to events triggering
not at all until the next input event.
Merge pull request #1168 from hwhw/master

Fix double-check of task list