2003/12/22 04:50:08
[org.ibex.core.git] / src / org / xwt / Scheduler.java
index 5000287..55be6df 100644 (file)
@@ -23,6 +23,9 @@ public class Scheduler {
 
     public static void init() { if (singleton == null) (singleton = Platform.getScheduler()).run(); }
 
+    private static Task current = null;
+    public static Task current() { return current; }
+
     // API which must be supported by subclasses /////////////////////////////////////
 
     /**
@@ -40,12 +43,20 @@ public class Scheduler {
     protected static Queue runnable = new Queue(50);
     public void defaultRun() {
         while(true) {
-            Task t = (Task)runnable.remove(true);
+            current = (Task)runnable.remove(true);
             try {
-                t.perform();
-                // FEATURE: be smarter about this
-                //if (t != Surface.renderAll) add(Surface.renderAll);
-                Surface.renderAll.perform();
+                for(int i=0; i<Surface.allSurfaces.size(); i++) {
+                    Surface s = (Surface)Surface.allSurfaces.elementAt(i);
+                    if (current instanceof JSFunction) {
+                        s._mousex = Integer.MAX_VALUE;
+                        s._mousey = Integer.MAX_VALUE;
+                    } else {
+                        s._mousex = s.mousex;
+                        s._mousey = s.mousey;
+                    }
+                }
+                current.perform();
+                if (runnable.size() == 0 && Surface.needRender) Surface.renderAll.perform();
             } catch (JSExn e) {
                 Log.log(Scheduler.class, "a JavaScript thread spawned with xwt.thread() threw an exception:");
                 Log.log(Scheduler.class, e.toString());