diff --git a/src/as/com/threerings/presents/client/Client.as b/src/as/com/threerings/presents/client/Client.as index 91965d9dd..5d367d8f9 100644 --- a/src/as/com/threerings/presents/client/Client.as +++ b/src/as/com/threerings/presents/client/Client.as @@ -55,7 +55,6 @@ public class Client extends EventDispatcher { _creds = creds; _stage = stage; - MethodQueue.setStage(stage); } /** @@ -269,9 +268,7 @@ public class Client extends EventDispatcher // we need to wait for the CLIENT_WILL_LOGON to have been dispatched before we actually // tell the communicator to logon, so we run this through the callLater pipeline _comm = new Communicator(this); - callLater(function () :void { - _comm.logon(); - }); + callLater(_comm.logon); // it is safe, however, to start up our tick interval immediately if (_tickInterval == null) { diff --git a/src/as/com/threerings/util/MethodQueue.as b/src/as/com/threerings/util/MethodQueue.as index 5b55e9f8e..64e347c65 100644 --- a/src/as/com/threerings/util/MethodQueue.as +++ b/src/as/com/threerings/util/MethodQueue.as @@ -21,7 +21,7 @@ package com.threerings.util { -import flash.display.Stage; +import flash.display.Sprite; import flash.events.Event; @@ -31,48 +31,14 @@ import flash.events.Event; */ public class MethodQueue { - /** - * Set the stage which will be used for coordinating the use of the - * method queue. If no stage is set, functions will continue to pile up - * without being called. - */ - public static function setStage (stage :Stage) :void - { - if (_listening) { - removeListener(); - } - _stage = stage; - checkListen(); - } - /** * Call the specified method at the entry to the next frame. */ public static function callLater (fn :Function, args :Array = null) :void { _methodQueue.push([fn, args]); - if (!_listening) { - checkListen(); - } - } - - /** - * Stop listening for the frame event. - */ - protected static function removeListener () :void - { - _stage.removeEventListener(Event.ENTER_FRAME, handleEnterFrame); - _listening = false; - } - - /** - * Check to see if we should be listening for the next frame event. - */ - protected static function checkListen () :void - { - if (_stage != null && _methodQueue.length > 0) { - _stage.addEventListener(Event.ENTER_FRAME, handleEnterFrame); - _listening = true; + if (!_d.hasEventListener(Event.ENTER_FRAME)) { + _d.addEventListener(Event.ENTER_FRAME, handleEnterFrame); } } @@ -101,17 +67,14 @@ public class MethodQueue // If no new functions were added while we were calling the current set, // then remove the listener. if (_methodQueue.length == 0) { - removeListener(); + _d.removeEventListener(Event.ENTER_FRAME, handleEnterFrame); } } - /** The stage we're working with. */ - protected static var _stage :Stage; + /** A display object on which we listen for ENTER_FRAME. */ + protected static var _d :Sprite = new Sprite(); /** The currently queued functions. */ protected static var _methodQueue :Array = []; - - /** Are we presently listening for the frame event? */ - protected static var _listening :Boolean = false; } }