You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2022/11/28 00:05:26 UTC

[royale-asjs] branch develop updated: quick fix/workaround for change event issues, keeping full binding support in mx ColorPicker

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

gregdove 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 3b52a9daae quick fix/workaround for change event issues, keeping full binding support in mx ColorPicker
3b52a9daae is described below

commit 3b52a9daae48f0d5c9d639a426479fadccd4d2a0
Author: greg-dove <gr...@gmail.com>
AuthorDate: Mon Nov 28 13:04:58 2022 +1300

    quick fix/workaround for change event issues, keeping full binding support in mx ColorPicker
---
 .../MXRoyale/src/main/royale/mx/controls/ColorPicker.as | 17 ++++++++++++-----
 .../main/royale/mx/controls/beads/ColorPickerView.as    |  5 ++++-
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ColorPicker.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ColorPicker.as
index 73e22c8742..7b0e650b9b 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ColorPicker.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ColorPicker.as
@@ -19,12 +19,14 @@
 
 package mx.controls
 {
-	import org.apache.royale.events.Event;
+    import org.apache.royale.events.Event;
     import org.apache.royale.core.IColorModel;
 	//import mx.controls.ComboBase;
     import mx.core.UIComponent;
     import mx.controls.colorPickerClasses.WebSafePalette;
+    import mx.controls.beads.ColorPickerView;
     import org.apache.royale.core.ISelectionModel;
+    import mx.events.FlexEvent;
 /*
 import flash.display.DisplayObject;
 import flash.events.Event;
@@ -665,20 +667,25 @@ public class ColorPicker extends UIComponent //ComboBase
         else
         {
             indexFlag = false;
-        }
+        } */
         if (value != selectedColor)
         {
-            _selectedColor = value;
+            //selectedColor = value;
 
             //updateColor(value);
 
             //if (dropdownSwatch)
             //    dropdownSwatch.selectedColor = value;
+            //quick fix: avoid dispatch of 'change' events from ColorPickerView, which should only be from user-initiated changes:
+            (view as ColorPickerView).programmaticChange = true;
+            (model as IColorModel).color = value;
+            //reset the flag so user-initiated changes will dispatch subsequent changes:
+            (view as ColorPickerView).programmaticChange = false;
+            //programmatic changes dispatch 'valueCommit' as they do in Flex, to ensure bindings work for them also:
+            dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
         }
 
         //dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
-        */
-        (model as IColorModel).color = value;
     }
     
     public function get selectedItem():Object
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ColorPickerView.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ColorPickerView.as
index 92623545b5..0445c37f0f 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ColorPickerView.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/ColorPickerView.as
@@ -216,6 +216,8 @@ package mx.controls.beads
 		{
 			sizeChangeAction();
 		}
+
+		public var programmaticChange:Boolean = false;
 		
 		/**
 		 * @private
@@ -223,7 +225,8 @@ package mx.controls.beads
 		protected function handleColorChange(event:Event):void
 		{
 			colorChangeAction();
-			(_strand as IEventDispatcher).dispatchEvent(new ColorPickerEvent("change"));
+			//'change' events should only be from User-initiated changes
+			if (!programmaticChange) (_strand as IEventDispatcher).dispatchEvent(new ColorPickerEvent("change"));
 		}
 		
 		/**