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/11 11:56:02 UTC

[royale-asjs] branch develop updated: Emulation - make sure invisible menus do not accidentally hide visible ones

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 1a776dc652 Emulation - make sure invisible menus do not accidentally hide visible ones
1a776dc652 is described below

commit 1a776dc652e57282699b39ec5214a7d160a172c4
Author: Yishay Weiss <yi...@hotmail.com>
AuthorDate: Mon Apr 11 14:53:41 2022 +0300

    Emulation - make sure invisible menus do not accidentally hide visible
    ones
    
    TODO - there might be an issue with 2 separate lists of visible menus
    being maintained in mx MenuModel and in CascadingMenuModel
---
 .../controllers/MenuSelectionMouseController.as    | 27 +++++++++++++---------
 .../CascadingMenuSelectionMouseController.as       | 19 +++++++++++++++
 2 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as
index fb9aa37e70..5b1672c69c 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MenuSelectionMouseController.as
@@ -73,17 +73,7 @@ package org.apache.royale.html.beads.controllers
 		{
 			_strand = value;
 			super.strand = value;
-						
-			// detect an up event on the background as a way to dismiss this menu
-			var host:IEventDispatcher = UIUtils.findPopUpHost(_strand as IUIBase) as IEventDispatcher;
-			host.addEventListener("hideMenus", handleHideMenus);
-			
-			COMPILE::SWF {
-				host.addEventListener(MouseEvent.MOUSE_UP, hideMenu_internal);
-			}
-			COMPILE::JS {
-				window.addEventListener('mouseup', hideMenu_internal, false);
-			}
+			addClickOutHandler(value);
 		}
 		/**
 		 * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
@@ -210,6 +200,21 @@ package org.apache.royale.html.beads.controllers
 			}			
 		}
 		
+		protected function addClickOutHandler(menu:Object):void
+		{
+			// detect an up event on the background as a way to dismiss this menu
+			var host:IEventDispatcher = UIUtils.findPopUpHost(_strand as IUIBase) as IEventDispatcher;
+			host.addEventListener("hideMenus", handleHideMenus);
+			
+			COMPILE::SWF {
+				host.addEventListener(MouseEvent.MOUSE_UP, hideMenu_internal);
+			}
+			COMPILE::JS {
+				window.addEventListener('mouseup', hideMenu_internal, false);
+			}
+
+		}
+		
 		/**
 		 * @private
 		 */
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 c71636061d..7dfecfd8af 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
@@ -33,6 +33,9 @@ package mx.controls.beads.controllers
 	import mx.supportClasses.IFoldable;
 	import mx.controls.Menu;
 	import org.apache.royale.core.IPopUpHost;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.core.IUIBase;
+	import org.apache.royale.html.beads.models.MenuModel;
 
 /**
  *  The CascadingMenuSelectionMouseController is the default controller for emulation cascading menu
@@ -138,6 +141,22 @@ package mx.controls.beads.controllers
 			return parentMenuBar ? parentMenuBar : _strand as IEventDispatcher;
 		}
 
+		override public function set strand(value:IStrand):void
+		{
+			super.strand = value;
+			if (!(value as IUIBase).visible)
+			{
+				removeClickOutHandler(value);
+				(value as IEventDispatcher).addEventListener('show', showHandler);
+			}
+		}
+
+		protected function showHandler(event:Event):void
+		{
+			MenuModel.menuList.push(event.target);
+			addClickOutHandler(event.target);
+		}
+
 	}
 
 }