[ 
https://issues.apache.org/jira/browse/FLEX-33604?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mihai Chira updated FLEX-33604:
-------------------------------

    Description: 
Run the application below (or import the attached project into FlashBuilder) 
and click the second tab.

Actual result: a tooltip appears next to the mouse saying "<dataTip>".
Desired result: no such tooltip should appear.

Notes: from what I could tell, it happens because the data grid creates its 
typical item renderer during a measure() call; the renderer, through the 
validateNow() function, registers itself with the TooltipManager; in that 
function ("registerToolTip()"), the latter checks if the mouse is currently 
over the target. In reality it's not, but because all this happens during 
measure, the parents of the renderer haven't been measured yet, so its 
localToGlobal() function returns wrong data. This happens to indicate that the 
current mouse position is over the renderer. Therefore the tooltip is shown.


__________________________
{code}
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"; 
                                           
xmlns:s="library://ns.adobe.com/flex/spark"
                                           xmlns:local="*">
        <fx:Script>
                <![CDATA[
                        import mx.collections.ArrayCollection;
                        
                        import spark.components.TabBar;
                        import spark.events.IndexChangeEvent;
                        
                        private static const STATE1_ID:String = "firstTab";
                        private static const STATE2_ID:String = "secondTab";
                        private static const STATES:ArrayCollection = new 
ArrayCollection([STATE1_ID, STATE2_ID]);
                        
                        protected function 
onTabChange(event:IndexChangeEvent):void
                        {
                                var buttonBar:TabBar = event.target as TabBar;
                                
                                if (!buttonBar)
                                        return;
                                
                                switch (buttonBar.selectedItem)
                                {
                                        case STATE1_ID:
                                                this.currentState = "tab1";
                                                break;
                                        case STATE2_ID:
                                                this.currentState = "tab2";
                                                break;
                                }
                        }
                ]]>
        </fx:Script>
        
        <s:states>
                <s:State id="firstTab" name="tab1"/>
                <s:State id="secondTab" name="tab2"/>
        </s:states>
        
        <s:VGroup width="100%" height="100%" clipAndEnableScrolling="true">
                
                <s:TabBar id="dataGridNavigation" width="100%" 
dataProvider="{STATES}" change="onTabChange(event)"/>
                <s:Label text="Welcome! Please click on the second tab and 
don't move the mouse." includeIn="tab1"/>
                <local:DataGridShowingOutOfPlaceTooltip width="100%" 
height="100%" includeIn="tab2"/>
        </s:VGroup>
</s:WindowedApplication>
{code}



______________________


and the "DataGridShowingOutOfPlaceTooltip" component:


<?xml version="1.0" encoding="utf-8"?>
<s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"; 
                  xmlns:s="library://ns.adobe.com/flex/spark" 
                  xmlns:mx="library://ns.adobe.com/flex/mx">
        <fx:Script>
                <![CDATA[
                        import spark.skins.spark.DefaultGridItemRenderer;
                ]]>
        </fx:Script>
        <fx:Declarations>
                <s:ArrayCollection id="someObjects">
                        <fx:Object description="obj desc1" note="note1" 
hours="1"/>
                        <fx:Object description="obj desc2" note="note2" 
hours="2"/>
                        <fx:Object description="obj desc3" note="note3" 
hours="3"/>
                </s:ArrayCollection>
        </fx:Declarations>
        
        <s:DataGrid dataProvider="{someObjects}"
                                width="100%" height="100%"
                                
itemRenderer="spark.skins.spark.DefaultGridItemRenderer"
                                showDataTips="true">
                
                <s:columns>
                        <s:ArrayList>
                                <s:GridColumn headerText="Note"
                                                          dataField="note"/>
                                <s:GridColumn headerText="Description"
                                                          
dataField="description"/>
                                <s:GridColumn headerText="Hours"
                                                          dataField="hours"/>
                        </s:ArrayList>
                </s:columns>
                
        </s:DataGrid>
</s:VGroup>

  was:
Run the application below (or import the attached project into FlashBuilder) 
and click the second tab.

Actual result: a tooltip appears next to the mouse saying "<dataTip>".
Desired result: no such tooltip should appear.

Notes: from what I could tell, it happens because the data grid creates its 
typical item renderer during a measure() call; the renderer, through the 
validateNow() function, registers itself with the TooltipManager; in that 
function ("registerToolTip()"), the latter checks if the mouse is currently 
over the target. In reality it's not, but because all this happens during 
measure, the parents of the renderer haven't been measured yet, so its 
localToGlobal() function returns wrong data. This happens to indicate that the 
current mouse position is over the renderer. Therefore the tooltip is shown.


__________________________
{code:ActionScript}
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"; 
                                           
xmlns:s="library://ns.adobe.com/flex/spark"
                                           xmlns:local="*">
        <fx:Script>
                <![CDATA[
                        import mx.collections.ArrayCollection;
                        
                        import spark.components.TabBar;
                        import spark.events.IndexChangeEvent;
                        
                        private static const STATE1_ID:String = "firstTab";
                        private static const STATE2_ID:String = "secondTab";
                        private static const STATES:ArrayCollection = new 
ArrayCollection([STATE1_ID, STATE2_ID]);
                        
                        protected function 
onTabChange(event:IndexChangeEvent):void
                        {
                                var buttonBar:TabBar = event.target as TabBar;
                                
                                if (!buttonBar)
                                        return;
                                
                                switch (buttonBar.selectedItem)
                                {
                                        case STATE1_ID:
                                                this.currentState = "tab1";
                                                break;
                                        case STATE2_ID:
                                                this.currentState = "tab2";
                                                break;
                                }
                        }
                ]]>
        </fx:Script>
        
        <s:states>
                <s:State id="firstTab" name="tab1"/>
                <s:State id="secondTab" name="tab2"/>
        </s:states>
        
        <s:VGroup width="100%" height="100%" clipAndEnableScrolling="true">
                
                <s:TabBar id="dataGridNavigation" width="100%" 
dataProvider="{STATES}" change="onTabChange(event)"/>
                <s:Label text="Welcome! Please click on the second tab and 
don't move the mouse." includeIn="tab1"/>
                <local:DataGridShowingOutOfPlaceTooltip width="100%" 
height="100%" includeIn="tab2"/>
        </s:VGroup>
</s:WindowedApplication>
{code}



______________________


and the "DataGridShowingOutOfPlaceTooltip" component:


<?xml version="1.0" encoding="utf-8"?>
<s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"; 
                  xmlns:s="library://ns.adobe.com/flex/spark" 
                  xmlns:mx="library://ns.adobe.com/flex/mx">
        <fx:Script>
                <![CDATA[
                        import spark.skins.spark.DefaultGridItemRenderer;
                ]]>
        </fx:Script>
        <fx:Declarations>
                <s:ArrayCollection id="someObjects">
                        <fx:Object description="obj desc1" note="note1" 
hours="1"/>
                        <fx:Object description="obj desc2" note="note2" 
hours="2"/>
                        <fx:Object description="obj desc3" note="note3" 
hours="3"/>
                </s:ArrayCollection>
        </fx:Declarations>
        
        <s:DataGrid dataProvider="{someObjects}"
                                width="100%" height="100%"
                                
itemRenderer="spark.skins.spark.DefaultGridItemRenderer"
                                showDataTips="true">
                
                <s:columns>
                        <s:ArrayList>
                                <s:GridColumn headerText="Note"
                                                          dataField="note"/>
                                <s:GridColumn headerText="Description"
                                                          
dataField="description"/>
                                <s:GridColumn headerText="Hours"
                                                          dataField="hours"/>
                        </s:ArrayList>
                </s:columns>
                
        </s:DataGrid>
</s:VGroup>

    
> spark DataGrid causes a tooltip (text: "<dataTip>") to appear for its typical 
> item renderer although mouse not over data grid
> -----------------------------------------------------------------------------------------------------------------------------
>
>                 Key: FLEX-33604
>                 URL: https://issues.apache.org/jira/browse/FLEX-33604
>             Project: Apache Flex
>          Issue Type: Bug
>          Components: Cell Renderers, Spark: DataGrid, Tooltip Manager
>    Affects Versions: Apache Flex 4.9.0
>         Environment: Tested on a Win 8 and a Win 7 system.
>            Reporter: Mihai Chira
>            Priority: Critical
>              Labels: newbie
>         Attachments: FaultyTooltipViaDataGrid.fxp
>
>
> Run the application below (or import the attached project into FlashBuilder) 
> and click the second tab.
> Actual result: a tooltip appears next to the mouse saying "<dataTip>".
> Desired result: no such tooltip should appear.
> Notes: from what I could tell, it happens because the data grid creates its 
> typical item renderer during a measure() call; the renderer, through the 
> validateNow() function, registers itself with the TooltipManager; in that 
> function ("registerToolTip()"), the latter checks if the mouse is currently 
> over the target. In reality it's not, but because all this happens during 
> measure, the parents of the renderer haven't been measured yet, so its 
> localToGlobal() function returns wrong data. This happens to indicate that 
> the current mouse position is over the renderer. Therefore the tooltip is 
> shown.
> __________________________
> {code}
> <?xml version="1.0" encoding="utf-8"?>
> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"; 
>                                          
> xmlns:s="library://ns.adobe.com/flex/spark"
>                                          xmlns:local="*">
>       <fx:Script>
>               <![CDATA[
>                       import mx.collections.ArrayCollection;
>                       
>                       import spark.components.TabBar;
>                       import spark.events.IndexChangeEvent;
>                       
>                       private static const STATE1_ID:String = "firstTab";
>                       private static const STATE2_ID:String = "secondTab";
>                       private static const STATES:ArrayCollection = new 
> ArrayCollection([STATE1_ID, STATE2_ID]);
>                       
>                       protected function 
> onTabChange(event:IndexChangeEvent):void
>                       {
>                               var buttonBar:TabBar = event.target as TabBar;
>                               
>                               if (!buttonBar)
>                                       return;
>                               
>                               switch (buttonBar.selectedItem)
>                               {
>                                       case STATE1_ID:
>                                               this.currentState = "tab1";
>                                               break;
>                                       case STATE2_ID:
>                                               this.currentState = "tab2";
>                                               break;
>                               }
>                       }
>               ]]>
>       </fx:Script>
>       
>       <s:states>
>               <s:State id="firstTab" name="tab1"/>
>               <s:State id="secondTab" name="tab2"/>
>       </s:states>
>       
>       <s:VGroup width="100%" height="100%" clipAndEnableScrolling="true">
>               
>               <s:TabBar id="dataGridNavigation" width="100%" 
> dataProvider="{STATES}" change="onTabChange(event)"/>
>               <s:Label text="Welcome! Please click on the second tab and 
> don't move the mouse." includeIn="tab1"/>
>               <local:DataGridShowingOutOfPlaceTooltip width="100%" 
> height="100%" includeIn="tab2"/>
>       </s:VGroup>
> </s:WindowedApplication>
> {code}
> ______________________
> and the "DataGridShowingOutOfPlaceTooltip" component:
> <?xml version="1.0" encoding="utf-8"?>
> <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"; 
>                 xmlns:s="library://ns.adobe.com/flex/spark" 
>                 xmlns:mx="library://ns.adobe.com/flex/mx">
>       <fx:Script>
>               <![CDATA[
>                       import spark.skins.spark.DefaultGridItemRenderer;
>               ]]>
>       </fx:Script>
>       <fx:Declarations>
>               <s:ArrayCollection id="someObjects">
>                       <fx:Object description="obj desc1" note="note1" 
> hours="1"/>
>                       <fx:Object description="obj desc2" note="note2" 
> hours="2"/>
>                       <fx:Object description="obj desc3" note="note3" 
> hours="3"/>
>               </s:ArrayCollection>
>       </fx:Declarations>
>       
>       <s:DataGrid dataProvider="{someObjects}"
>                               width="100%" height="100%"
>                               
> itemRenderer="spark.skins.spark.DefaultGridItemRenderer"
>                               showDataTips="true">
>               
>               <s:columns>
>                       <s:ArrayList>
>                               <s:GridColumn headerText="Note"
>                                                         dataField="note"/>
>                               <s:GridColumn headerText="Description"
>                                                         
> dataField="description"/>
>                               <s:GridColumn headerText="Hours"
>                                                         dataField="hours"/>
>                       </s:ArrayList>
>               </s:columns>
>               
>       </s:DataGrid>
> </s:VGroup>

--
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

Reply via email to