This is an automated email from the ASF dual-hosted git repository.

harbs pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new b28c704dc6 This should make timer handling more robust
b28c704dc6 is described below

commit b28c704dc68c83cbc144b6b31d69a227e4b88e5c
Author: Harbs <ha...@in-tools.com>
AuthorDate: Tue Oct 11 10:57:58 2022 +0300

    This should make timer handling more robust
---
 .../beads/controllers/SpinnerMouseController.as    | 38 ++++++++++------------
 1 file changed, 17 insertions(+), 21 deletions(-)

diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/SpinnerMouseController.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/SpinnerMouseController.as
index 1ef88f4cac..0f508b6400 100755
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/SpinnerMouseController.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/SpinnerMouseController.as
@@ -79,17 +79,17 @@ package org.apache.royale.jewel.beads.controllers
 
                        rangeModel = UIBase(value).model as IRangeModel;
 
-            COMPILE::SWF
-            {
+                       COMPILE::SWF
+                       {
                        var spinnerBead:ISpinnerView = 
value.getBeadByType(ISpinnerView) as ISpinnerView;
                        
spinnerBead.decrement.addEventListener(MouseEvent.CLICK, decrementClickHandler);
                        spinnerBead.decrement.addEventListener("buttonRepeat", 
decrementClickHandler);
                        
spinnerBead.increment.addEventListener(MouseEvent.CLICK, incrementClickHandler);
                        spinnerBead.increment.addEventListener("buttonRepeat", 
incrementClickHandler);
-            }
+                       }
 
-            COMPILE::JS
-            {
+                       COMPILE::JS
+                       {
                        var view:ISpinnerView = 
value.getBeadByType(ISpinnerView) as ISpinnerView;
 
                        var incrementButton:Button = view.increment;
@@ -103,7 +103,7 @@ package org.apache.royale.jewel.beads.controllers
                        decrementButton.addEventListener(MouseEvent.MOUSE_DOWN, 
decrementMouseDownHandler);
                        decrementButton.addEventListener(MouseEvent.MOUSE_UP, 
decrementMouseUpHandlermouseUpHandler);
                        decrementButton.addEventListener(MouseEvent.MOUSE_OUT, 
cancelTimerMouseOutHandler);
-            }
+                       }
                }
 
                private var mouseDown:Boolean = false;
@@ -123,18 +123,20 @@ package org.apache.royale.jewel.beads.controllers
                                if (timer.delay > 150)
                                {
                                        var newdelay:Number = timer.delay/2;
-                                       removeTimer(incOrDecFunc);
                                        createTimer(incOrDecFunc, newdelay)
                                }
                        }
                }
 
+               private var currentFunc:Function;
                /**
                 * Create the timer each time needed depending on function to 
listen and delay
                 * @private
                 */
                private function createTimer(incOrDecFunc:Function, 
delay:Number):void
                {
+                       removeTimer();
+                       currentFunc = incOrDecFunc;
                        timer = new Timer(delay, 0);
                        timer.addEventListener("timer", incOrDecFunc);
                        timer.start();
@@ -144,9 +146,12 @@ package org.apache.royale.jewel.beads.controllers
                 * Remove the timer each time needed depending on function to 
listen
                 * @private
                 */
-               private function removeTimer(incOrDecFunc:Function):void
+               private function removeTimer():void
                {
-                       timer.removeEventListener("timer", incOrDecFunc);
+                       if(!timer || !currentFunc)
+                               return;
+                       
+                       timer.removeEventListener("timer", currentFunc);
                        timer.stop();
                        timer = null;
                }
@@ -156,16 +161,7 @@ package org.apache.royale.jewel.beads.controllers
                 */
                private function 
cancelTimerMouseOutHandler(event:MouseEvent):void
                {
-                       if (timer != null && timer.running)
-                       {
-                               //TODO removeAllListeners should probably not 
be used as it's a goog construct
-                               COMPILE::JS
-                               {
-                                       timer.removeAllListeners();
-                               }
-                               timer.stop();
-                               timer = null;
-                       }
+                       removeTimer();
                }
 
                /**
@@ -192,7 +188,7 @@ package org.apache.royale.jewel.beads.controllers
                                return;
                        }
                        mouseDown = false;
-                       removeTimer(incrementClickHandler);
+                       removeTimer();
                }
                /**
                 * Increment mouse click handler
@@ -231,7 +227,7 @@ package org.apache.royale.jewel.beads.controllers
                                return;
                        }
                        mouseDown = false;
-                       removeTimer(decrementClickHandler);
+                       removeTimer();
                }
                /**
                 * Decrement mouse click handler

Reply via email to