diff --git a/src/com/maccasoft/tools/Terminal.java b/src/com/maccasoft/tools/Terminal.java index f277a08..0b9c7ad 100644 --- a/src/com/maccasoft/tools/Terminal.java +++ b/src/com/maccasoft/tools/Terminal.java @@ -10,6 +10,8 @@ package com.maccasoft.tools; +import java.util.concurrent.atomic.AtomicReference; + import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; @@ -92,6 +94,7 @@ public class Terminal { @Override public void run() { + pendingRunnable.set(null); if (canvas.isDisposed() || bounds == null) { return; } @@ -99,6 +102,8 @@ public class Terminal { } }; + final AtomicReference pendingRunnable = new AtomicReference(); + Terminal() { // For JUnit tests } @@ -422,7 +427,9 @@ public class Terminal { } finally { gc.dispose(); } - display.timerExec(REDRAW_MS, redrawRunnable); + if (pendingRunnable.compareAndSet(null, redrawRunnable)) { + display.timerExec(REDRAW_MS, redrawRunnable); + } } }); } @@ -705,7 +712,9 @@ public class Terminal { } finally { gc.dispose(); } - display.timerExec(REDRAW_MS, redrawRunnable); + if (pendingRunnable.compareAndSet(null, redrawRunnable)) { + display.timerExec(REDRAW_MS, redrawRunnable); + } } }); } @@ -723,7 +732,9 @@ public class Terminal { } finally { gc.dispose(); } - display.timerExec(REDRAW_MS, redrawRunnable); + if (pendingRunnable.compareAndSet(null, redrawRunnable)) { + display.timerExec(REDRAW_MS, redrawRunnable); + } } }); }