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