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 <yishayj...@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;
+               }
        }
 
 }

Reply via email to