X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fbackend%2FECMA48Backend.java;h=f1508335a02dbf9f7afc104dac8fa13f9fe5c323;hb=623a1bd12877164ce2ae515e176b809d9c1a2041;hp=835dfaa7e705762cddec7f5cd536fbda463acfd0;hpb=4328bb42c10743287dad5cf045f059ad109eb540;p=nikiroo-utils.git diff --git a/src/jexer/backend/ECMA48Backend.java b/src/jexer/backend/ECMA48Backend.java index 835dfaa..f150833 100644 --- a/src/jexer/backend/ECMA48Backend.java +++ b/src/jexer/backend/ECMA48Backend.java @@ -87,14 +87,39 @@ public class ECMA48Backend extends Backend { /** * Get keyboard, mouse, and screen resize events. * + * @param queue list to append new events to * @param timeout maximum amount of time (in millis) to wait for an * event. 0 means to return immediately, i.e. perform a poll. - * @return events received, or an empty list if the timeout was reached - * first */ @Override - public List getEvents(int timeout) { - return terminal.getEvents(); + public void getEvents(List queue, int timeout) { + if (timeout > 0) { + // Try to sleep, let the terminal's input thread wake me up if + // something came in. + synchronized (terminal) { + try { + terminal.wait(timeout); + if (terminal.hasEvents()) { + // System.err.println("getEvents()"); + terminal.getIdleEvents(queue); + } else { + // If I got here, then I timed out. Call + // terminal.getIdleEvents() to pick up stragglers + // like bare resize. + // System.err.println("getIdleEvents()"); + terminal.getIdleEvents(queue); + } + } catch (InterruptedException e) { + // Spurious interrupt, pretend it was like a timeout. + // System.err.println("[interrupt] getEvents()"); + terminal.getIdleEvents(queue); + } + } + } else { + // Asking for a poll, go get it. + System.err.println("[polled] getEvents()"); + terminal.getEvents(queue); + } } /**