You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by yi...@apache.org on 2022/04/06 07:23:42 UTC

[royale-asjs] branch develop updated: Stop mx Menu from creating Basic Menu which messed up nested menu selection.

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

yishayw 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 3258429dbf Stop mx Menu from creating Basic Menu which messed up nested menu selection.
     new d17d4f0585 Merge branch 'develop' of https://github.com/apache/royale-asjs into develop
3258429dbf is described below

commit 3258429dbfc0e946b1c2ef26b9984ca8ceb151b4
Author: Yishay Weiss <yi...@hotmail.com>
AuthorDate: Wed Apr 6 10:22:02 2022 +0300

    Stop mx Menu from creating Basic Menu which messed up nested menu
    selection.
---
 .../MXRoyale/src/main/resources/defaults.css       |  2 +-
 .../MXRoyale/src/main/royale/mx/controls/Menu.as   | 23 +++++++++++++++++-----
 .../CascadingMenuSelectionMouseController.as       |  6 ++++++
 .../menuClasses/CascadingMenuItemRenderer.as       | 14 ++++++++++++-
 4 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index b7348d978a..dcb8d858b9 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -380,7 +380,7 @@ menu|MenuBarItemRenderer {
 }
 
 Menu {
-	IMenu: ClassReference("org.apache.royale.html.CascadingMenu");
+	IMenu: ClassReference("mx.controls.Menu");
 	IBeadModel: ClassReference("mx.controls.beads.models.CascadingMenuModel");
 	IBeadController: ClassReference("mx.controls.beads.controllers.CascadingMenuSelectionMouseController");
 	IItemRenderer: ClassReference("mx.controls.menuClasses.CascadingMenuItemRenderer");
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as
index 9547be8cf7..cf9fb5a6bd 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/Menu.as
@@ -99,6 +99,8 @@ package mx.controls
 	import org.apache.royale.core.ILayoutView;
 	import org.apache.royale.core.IHasLabelField;
 	import org.apache.royale.html.util.getModelByType;
+	import org.apache.royale.core.IPopUpHostParent;
+	import org.apache.royale.core.IPopUpHost;
 	
 	use namespace mx_internal;
 	
@@ -593,7 +595,7 @@ package mx.controls
 	 *  @playerversion AIR 1.1
 	 *  @productversion Flex 3
 	 */
-	public class Menu extends UIComponent implements IFocusManagerContainer, IMenu, IItemRendererProvider, ILayoutParent, ILayoutView, IHasLabelField
+	public class Menu extends UIComponent implements IFocusManagerContainer, IMenu, IItemRendererProvider, ILayoutParent, ILayoutView, IHasLabelField, IPopUpHostParent
 	{
 		// include "../core/Version.as";
 		
@@ -680,7 +682,7 @@ package mx.controls
 		 *  @playerversion AIR 1.1
 		 *  @productversion Flex 3
 		 */
-		public static function popUpMenu(menu:Menu, parent:UIComponent, mdp:Object):void
+		public static function popUpMenu(menu:Menu, parent:IUIBase, mdp:Object):void
 		{
 			menu.parentDisplayObject = parent ?
 				parent :
@@ -781,7 +783,7 @@ package mx.controls
 		 *  @private
 		 *  Where to add this menu on the display list.
 		 */
-		mx_internal var parentDisplayObject:UIComponent;
+		mx_internal var parentDisplayObject:IUIBase;
 		
 		/**
 		 *  @private
@@ -1624,8 +1626,8 @@ package mx.controls
 		 */
 		public function show(parent:IUIBase, xShow:Number = 0, yShow:Number = 0):void
 		{
-			if (parent is UIComponent)
-				parentDisplayObject = (parent as UIComponent);
+			if (parent is IUIBase)
+				parentDisplayObject = (parent as IUIBase);
 				
 			//this could be an empty menu so we'll return if it is
 			//if (collection && collection.length == 0)
@@ -3116,6 +3118,17 @@ package mx.controls
 
 			dispatchEvent(new Event("iconFunctionChanged"));
 		    }
+
+		    private var _popUpHost:IPopUpHost;
+		    public function get popUpHost():IPopUpHost
+		    {
+			    return _popUpHost;
+		    }
+
+		    public function set popUpHost(value:IPopUpHost):void
+		    {
+			    _popUpHost = value;
+		    }
 		        
 	}
 	
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/CascadingMenuSelectionMouseController.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/CascadingMenuSelectionMouseController.as
index 0899473464..c71636061d 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/CascadingMenuSelectionMouseController.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/controllers/CascadingMenuSelectionMouseController.as
@@ -31,6 +31,8 @@ package mx.controls.beads.controllers
 	import org.apache.royale.core.UIBase;
 	import org.apache.royale.events.IEventDispatcher;
 	import mx.supportClasses.IFoldable;
+	import mx.controls.Menu;
+	import org.apache.royale.core.IPopUpHost;
 
 /**
  *  The CascadingMenuSelectionMouseController is the default controller for emulation cascading menu
@@ -74,6 +76,10 @@ package mx.controls.beads.controllers
 
 		override protected function selectedHandler(event:ItemClickedEvent):void
 		{
+			if (_strand is Menu && event.target is IPopUpHost)
+			{
+				(_strand as Menu).popUpHost = event.target as IPopUpHost;
+			}
 			super.selectedHandler(event);
 			if (event.target is IFoldable && (event.target as IFoldable).canUnfold)
 			{
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as
index b405f2a2fb..1f0f88cf1c 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/menuClasses/CascadingMenuItemRenderer.as
@@ -24,6 +24,8 @@ package mx.controls.menuClasses
 	import org.apache.royale.core.layout.EdgeData;
 	import org.apache.royale.html.supportClasses.CascadingMenuItemRenderer;
 	import mx.supportClasses.IFoldable;
+	import org.apache.royale.core.IPopUpHost;
+	import org.apache.royale.core.IPopUpHostParent;
 
 	/**
 	 *  The ListItemRenderer is the default renderer for mx.controls.List
@@ -34,7 +36,7 @@ package mx.controls.menuClasses
 	 *  @productversion Flex 3
 	 */
 
-	public class CascadingMenuItemRenderer extends org.apache.royale.html.supportClasses.CascadingMenuItemRenderer implements IFoldable
+	public class CascadingMenuItemRenderer extends org.apache.royale.html.supportClasses.CascadingMenuItemRenderer implements IFoldable, IPopUpHost, IPopUpHostParent
 	{
 		public function CascadingMenuItemRenderer()
 		{
@@ -100,6 +102,16 @@ package mx.controls.menuClasses
 		{
 			return getHasMenu();
 		}
+
+		public function get popUpParent():IPopUpHostParent
+		{
+			return this;
+		}
+
+		public function get popUpHost():IPopUpHost
+		{
+			return this;
+		}
 	}
 
 }