X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTApplication.java;h=9fa64d0703ae5d973453db0abb998661eb76fe20;hb=0525b2ed026e0d510fdf23f6d8f4cb4562a17e0b;hp=6dd503f547a141d1a05f0511652c14e038a25f42;hpb=d36057dfab8def933a64be042b039d76708ac5ba;p=fanfix.git diff --git a/src/jexer/TApplication.java b/src/jexer/TApplication.java index 6dd503f..9fa64d0 100644 --- a/src/jexer/TApplication.java +++ b/src/jexer/TApplication.java @@ -1125,8 +1125,14 @@ public class TApplication implements Runnable { } secondaryEventReceiver.handleEvent(event); - if (doubleClick != null) { - secondaryEventReceiver.handleEvent(doubleClick); + // Note that it is possible for secondaryEventReceiver to be null + // now, because its handleEvent() might have finished out on the + // secondary thread. So put any extra processing inside a null + // check. + if (secondaryEventReceiver != null) { + if (doubleClick != null) { + secondaryEventReceiver.handleEvent(doubleClick); + } } } @@ -1199,7 +1205,8 @@ public class TApplication implements Runnable { keepTimers.add(timer); } } - timers = keepTimers; + timers.clear(); + timers.addAll(keepTimers); } // Call onIdle's @@ -1384,8 +1391,16 @@ public class TApplication implements Runnable { System.currentTimeMillis(), Thread.currentThread(), x, y); } CellAttributes attr = getScreen().getAttrXY(x, y); - attr.setForeColor(attr.getForeColor().invert()); - attr.setBackColor(attr.getBackColor().invert()); + if (attr.getForeColorRGB() < 0) { + attr.setForeColor(attr.getForeColor().invert()); + } else { + attr.setForeColorRGB(attr.getForeColorRGB() ^ 0x00ffffff); + } + if (attr.getBackColorRGB() < 0) { + attr.setBackColor(attr.getBackColor().invert()); + } else { + attr.setBackColorRGB(attr.getBackColorRGB() ^ 0x00ffffff); + } getScreen().putAttrXY(x, y, attr, false); } @@ -1902,11 +1917,12 @@ public class TApplication implements Runnable { } /** - * Add a window to my window list and make it active. + * Add a window to my window list and make it active. Note package + * private access. * * @param window new window to add */ - public final void addWindowToApplication(final TWindow window) { + final void addWindowToApplication(final TWindow window) { // Do not add menu windows to the window list. if (window instanceof TMenu) { @@ -1919,6 +1935,11 @@ public class TApplication implements Runnable { } synchronized (windows) { + if (windows.contains(window)) { + throw new IllegalArgumentException("Window " + window + + " is already in window list"); + } + // Whatever window might be moving/dragging, stop it now. for (TWindow w: windows) { if (w.inMovements()) { @@ -2947,6 +2968,7 @@ public class TApplication implements Runnable { * @param title window title, will be centered along the top border * @param width width of window * @param height height of window + * @return the new window */ public final TWindow addWindow(final String title, final int width, final int height) { @@ -2963,6 +2985,7 @@ public class TApplication implements Runnable { * @param width width of window * @param height height of window * @param flags bitmask of RESIZABLE, CENTERED, or MODAL + * @return the new window */ public final TWindow addWindow(final String title, final int width, final int height, final int flags) { @@ -2979,6 +3002,7 @@ public class TApplication implements Runnable { * @param y row relative to parent * @param width width of window * @param height height of window + * @return the new window */ public final TWindow addWindow(final String title, final int x, final int y, final int width, final int height) { @@ -2996,6 +3020,7 @@ public class TApplication implements Runnable { * @param width width of window * @param height height of window * @param flags mask of RESIZABLE, CENTERED, or MODAL + * @return the new window */ public final TWindow addWindow(final String title, final int x, final int y, final int width, final int height, @@ -3010,6 +3035,7 @@ public class TApplication implements Runnable { * active. * * @param file the file to open + * @return the new editor window * @throws IOException if a java.io operation throws */ public final TEditorWindow addEditor(final File file) throws IOException {