You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flex.apache.org by "Philip Mair (JIRA)" <ji...@apache.org> on 2013/06/19 14:36:20 UTC

[jira] [Commented] (FLEX-33593) mx.controls.MenuBar#mouseOutHandler TypeError

    [ https://issues.apache.org/jira/browse/FLEX-33593?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13687928#comment-13687928 ] 

Philip Mair commented on FLEX-33593:
------------------------------------

On trying to provide a sample code i got an equal error in mouseOverHandler!

I think that all eventHandlers which are registered here:

MenuBar#insertMenuBarItem()

        item.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
        item.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
        item.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
        item.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);

should be removed in removeMenuBarItemAt(), and removeAll()
                
> mx.controls.MenuBar#mouseOutHandler TypeError
> ---------------------------------------------
>
>                 Key: FLEX-33593
>                 URL: https://issues.apache.org/jira/browse/FLEX-33593
>             Project: Apache Flex
>          Issue Type: Bug
>          Components: mx: Menu Bar
>    Affects Versions: Apache Flex 4.9.0
>            Reporter: Philip Mair
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> When changing MenuBar dataProvider within click on Menu sometimes causes a TypeError in mouseOutHandler.
> I solved this with following workaround:
> 		public override function addChild(child:DisplayObject):DisplayObject
> 		{
> 			if( child is IMenuBarItemRenderer )
> 			{
> 				var item: IMenuBarItemRenderer = IMenuBarItemRenderer( child );
> 				
> 				
> 				item.addEventListener( MouseEvent.MOUSE_OUT, patchedMouseOutHandler, false, int.MAX_VALUE );
> 			}
> 			
> 			return super.addChild( child );
> 		}
> 		
> 		private function patchedMouseOutHandler( event: MouseEvent ) : void
> 		{
> 			//stop the event to avoid npe
> 			event.stopImmediatePropagation();
> 			event.stopPropagation();
> 			
> 			var item:IMenuBarItemRenderer = IMenuBarItemRenderer(event.target);
> 			var index:int = item.menuBarItemIndex;
> 			var m:Menu = getMenuAt(index);
> 			
> 			if (item.enabled && selectedIndex != index)
> 			{
> 				if( menuBarItems.indexOf( item ) >= 0 )
> 					menuBarItems[index].menuBarItemState = "itemUpSkin";
> 			}
> 			// Fire the appropriate rollout event
> 			if (item.data && 
> 				(m.dataDescriptor.getType(item.data) != "separator"))
> 			{
> 				var menuEvent:MenuEvent = new MenuEvent(MenuEvent.ITEM_ROLL_OUT);
> 				menuEvent.index = index;
> 				menuEvent.menuBar = this;
> 				menuEvent.label = itemToLabel(item.data);
> 				menuEvent.item = item.data;
> 				menuEvent.itemRenderer = item;
> 				dispatchEvent(menuEvent);
> 			}
> 		}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira