1.1 --- a/boot/src/main/java/org/apidesign/html/boot/impl/FnUtils.java Thu Sep 12 09:33:50 2013 +0200
1.2 +++ b/boot/src/main/java/org/apidesign/html/boot/impl/FnUtils.java Thu Sep 12 17:59:10 2013 +0200
1.3 @@ -36,6 +36,7 @@
1.4 */
1.5 public final class FnUtils {
1.6 private static final ThreadLocal<Fn.Presenter> CURRENT = new ThreadLocal<Fn.Presenter>();
1.7 + private static final ThreadLocal<List<Runnable>> LATER = new ThreadLocal<List<Runnable>>();
1.8
1.9 private FnUtils() {
1.10 }
1.11 @@ -130,8 +131,28 @@
1.12 }
1.13
1.14 public static Fn.Presenter currentPresenter(Fn.Presenter p) {
1.15 + List<Runnable> list = LATER.get();
1.16 + LATER.set(null);
1.17 + if (list != null) for (Runnable runnable : list) {
1.18 + try {
1.19 + runnable.run();
1.20 + } catch (Throwable t) {
1.21 + t.printStackTrace();
1.22 + }
1.23 + }
1.24 +
1.25 Fn.Presenter prev = CURRENT.get();
1.26 CURRENT.set(p);
1.27 return prev;
1.28 }
1.29 +
1.30 + public static void runLater(Runnable r) {
1.31 + currentPresenter();
1.32 + List<Runnable> list = LATER.get();
1.33 + if (list == null) {
1.34 + list = new ArrayList<Runnable>();
1.35 + LATER.set(list);
1.36 + }
1.37 + list.add(r);
1.38 + }
1.39 }