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 /////////////////////////////////////
/**
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());