On Wed, 5 Feb 2020 23:31:29 GMT, Kevin Rushforth <[email protected]> wrote:
>> Issue: >> Dragging a tab and dropping it back to it's original position causes an >> incorrect reordering of tabs. Incorrect order of tabs can be observed using >> arrow key traversal through tabs. >> >> Cause: >> Below mechanism of identifying if tab header is dragged and dropped at same >> position is not reliable. >> When a tab is selected for dragging, the tab's layout X is stored as >> `dragHeaderStartX`. >> When the tab is dropped, the tab's destination layout X is saved as >> `dragHeaderDestX`. >> These two values are used to decide if the reordering of tabs is needed. >> This is an unreliable mechanism in two cases, >> >> 1. When the `TabPane.TabClosingPolicy` is set to >> `TabPane.TabClosingPolicy.SELECTED_TAB`, the close button icon gets added >> only to the selected tab. >> Each time when the tab selection is changed, the header region needs a >> re-layout. When a non selected tab is chosen for dragging `dragHeaderStartX` >> and `dragHeaderDestX` will always differ. >> >> 2. Calculation of `dragHeaderDestX` involves floating point operation. So >> the computed `dragHeaderDestX` may sometimes vary by fraction than >> `dragHeaderStartX`. >> >> Fix: >> Use the index of tab header for identifying the tabs which are reordered. >> Save the index when reordering begins. `dragTabHeaderStartIndex` >> Save the index when tab is dropped. `dragTabHeaderIndex` >> If the index are same then reordering of tabs is NOT needed. >> If the index are NOT same then the tabs from `dragTabHeaderStartIndex` to >> `dragTabHeaderIndex` are reordered. >> >> Verification: >> This fix is specific to TabPane reordering. No other tests/behavior should >> be affected. >> Added a new system test. > > Looks good. I'd like @agahisas to take a look as well. ------------- PR: https://git.openjdk.java.net/jfx/pull/106
