X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FTrap.java;h=f33f75a96610786fe83434a3350d9cfa603d6144;hb=e072ecc212b652dd55fb932cd7ed715e65dcfd2b;hp=196c445472c11d86d6bb7f8e15925e141ca13b3f;hpb=fe1024c315340ffc74c62faa8edd33cd3ef1c0da;p=org.ibex.core.git diff --git a/src/org/xwt/Trap.java b/src/org/xwt/Trap.java index 196c445..f33f75a 100644 --- a/src/org/xwt/Trap.java +++ b/src/org/xwt/Trap.java @@ -102,8 +102,10 @@ public class Trap { } public void perform(Object val) throws JS.Exn { - if (f.getNumFormalArgs()== 0) cascade(val); - f.call(new TrapArgs(this, val)); + if (f.getNumFormalArgs() == 0) cascade(val); + TrapArgs ta = new TrapArgs(this, val); + Object ret = f.call(ta); + if (ret != Boolean.FALSE && !ta.cascadeHappened) cascade(val); } public Object cascade() { @@ -118,11 +120,12 @@ public class Trap { private static class TrapArgs extends JS.Array { private Trap t; + public boolean cascadeHappened = false; public TrapArgs(Trap t) { this.t = t; } public TrapArgs(Trap t, Object value) { this.t = t; addElement(value); } public void put(Object key, Object val) { - if (key.equals("cascade")) t.cascade(val); + if (key.equals("cascade")) { cascadeHappened = true; t.cascade(val); } else super.put(key, val); }