static void swingAndWait(Runnable r) ctex { if (isAWTThread()) r.run(); else { r = addThreadInfoToRunnable(r); executingSwingCode(r); EventQueue.invokeAndWait(r); } } static O swingAndWait(O f) { if (isAWTThread()) ret callF(f); else { new Var result; swingAndWait(r { result.set(callF(f)); }); ret result!; } }