X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fio%2FECMA48Terminal.java;h=f6bc0b3a076c03f358c4c811f0c9a3c8450e46c6;hb=e826b451baf0d1e66d09ce03a6fefee2eb8386f5;hp=b8fabda389b5253d10bf5ed0a1b91199eee37bff;hpb=b299e69c251b7639440bfb914dbbdc51aa689af5;p=fanfix.git diff --git a/src/jexer/io/ECMA48Terminal.java b/src/jexer/io/ECMA48Terminal.java index b8fabda..f6bc0b3 100644 --- a/src/jexer/io/ECMA48Terminal.java +++ b/src/jexer/io/ECMA48Terminal.java @@ -61,7 +61,7 @@ import static jexer.TKeypress.*; * This class reads keystrokes and mouse events and emits output to ANSI * X3.64 / ECMA-48 type terminals e.g. xterm, linux, vt100, ansi.sys, etc. */ -public class ECMA48Terminal implements Runnable { +public final class ECMA48Terminal implements Runnable { /** * The session information. @@ -73,7 +73,7 @@ public class ECMA48Terminal implements Runnable { * * @return the SessionInfo */ - public final SessionInfo getSessionInfo() { + public SessionInfo getSessionInfo() { return sessionInfo; } @@ -243,7 +243,7 @@ public class ECMA48Terminal implements Runnable { }; try { Process process; - if (mode == true) { + if (mode) { process = Runtime.getRuntime().exec(cmdRaw); } else { process = Runtime.getRuntime().exec(cmdCooked); @@ -474,7 +474,7 @@ public class ECMA48Terminal implements Runnable { // Unknown modifier, bail out return null; } - + switch (key) { case 1: return new TKeypressEvent(kbHome, alt, ctrl, shift); @@ -530,97 +530,100 @@ public class ECMA48Terminal implements Runnable { y = windowResize.getHeight() - 1; } - TMouseEvent event = new TMouseEvent(TMouseEvent.Type.MOUSE_DOWN); - event.x = x; - event.y = y; - event.absoluteX = x; - event.absoluteY = y; + TMouseEvent.Type eventType = TMouseEvent.Type.MOUSE_DOWN; + boolean eventMouse1 = false; + boolean eventMouse2 = false; + boolean eventMouse3 = false; + boolean eventMouseWheelUp = false; + boolean eventMouseWheelDown = false; // System.err.printf("buttons: %04x\r\n", buttons); switch (buttons) { case 0: - event.mouse1 = true; + eventMouse1 = true; mouse1 = true; break; case 1: - event.mouse2 = true; + eventMouse2 = true; mouse2 = true; break; case 2: - event.mouse3 = true; + eventMouse3 = true; mouse3 = true; break; case 3: // Release or Move if (!mouse1 && !mouse2 && !mouse3) { - event.type = TMouseEvent.Type.MOUSE_MOTION; + eventType = TMouseEvent.Type.MOUSE_MOTION; } else { - event.type = TMouseEvent.Type.MOUSE_UP; + eventType = TMouseEvent.Type.MOUSE_UP; } if (mouse1) { mouse1 = false; - event.mouse1 = true; + eventMouse1 = true; } if (mouse2) { mouse2 = false; - event.mouse2 = true; + eventMouse2 = true; } if (mouse3) { mouse3 = false; - event.mouse3 = true; + eventMouse3 = true; } break; case 32: // Dragging with mouse1 down - event.mouse1 = true; + eventMouse1 = true; mouse1 = true; - event.type = TMouseEvent.Type.MOUSE_MOTION; + eventType = TMouseEvent.Type.MOUSE_MOTION; break; case 33: // Dragging with mouse2 down - event.mouse2 = true; + eventMouse2 = true; mouse2 = true; - event.type = TMouseEvent.Type.MOUSE_MOTION; + eventType = TMouseEvent.Type.MOUSE_MOTION; break; case 34: // Dragging with mouse3 down - event.mouse3 = true; + eventMouse3 = true; mouse3 = true; - event.type = TMouseEvent.Type.MOUSE_MOTION; + eventType = TMouseEvent.Type.MOUSE_MOTION; break; case 96: // Dragging with mouse2 down after wheelUp - event.mouse2 = true; + eventMouse2 = true; mouse2 = true; - event.type = TMouseEvent.Type.MOUSE_MOTION; + eventType = TMouseEvent.Type.MOUSE_MOTION; break; case 97: // Dragging with mouse2 down after wheelDown - event.mouse2 = true; + eventMouse2 = true; mouse2 = true; - event.type = TMouseEvent.Type.MOUSE_MOTION; + eventType = TMouseEvent.Type.MOUSE_MOTION; break; case 64: - event.mouseWheelUp = true; + eventMouseWheelUp = true; break; case 65: - event.mouseWheelDown = true; + eventMouseWheelDown = true; break; default: // Unknown, just make it motion - event.type = TMouseEvent.Type.MOUSE_MOTION; + eventType = TMouseEvent.Type.MOUSE_MOTION; break; } - return event; + return new TMouseEvent(eventType, x, y, x, y, + eventMouse1, eventMouse2, eventMouse3, + eventMouseWheelUp, eventMouseWheelDown); } /** @@ -631,7 +634,9 @@ public class ECMA48Terminal implements Runnable { public void getEvents(final List queue) { synchronized (eventQueue) { if (eventQueue.size() > 0) { - queue.addAll(eventQueue); + synchronized (queue) { + queue.addAll(eventQueue); + } eventQueue.clear(); } } @@ -662,7 +667,9 @@ public class ECMA48Terminal implements Runnable { synchronized (eventQueue) { if (eventQueue.size() > 0) { - queue.addAll(eventQueue); + synchronized (queue) { + queue.addAll(eventQueue); + } eventQueue.clear(); } } @@ -1442,8 +1449,8 @@ public class ECMA48Terminal implements Runnable { } } } else { - // Wait 5 millis for more data - Thread.sleep(5); + // Wait 10 millis for more data + Thread.sleep(10); } // System.err.println("end while loop"); System.err.flush(); } catch (InterruptedException e) {