On Fri, 1 May 2020 14:39:30 GMT, Kevin Rushforth <k...@openjdk.org> wrote:
>> Issue: >> When tabs are permuted as mentioned in the issue description as, >> 1. TabPane.getTabs().setAll(tab0, tab1) >> 2. TabPane.getTabs().setAll(tab0, tab1, tab2, tab3); >> the tab headers do not get permuted in same order as `TabPane.getTabs()`. >> >> => tab headers should be shown in order as tab0, tab1, tab2, tab3. >> => but are show in order as tab2, tab3, tab0, tab1 >> >> Cause: >> Newly added tabs(tab2, tab3) are not inserted at correct index. The index >> `Change.getFrom()` (0) used from Change does >> not remain valid after the tabs to be moved(tab0, tab1) are removed from >> `tabsToAdd` list. >> Fix: >> Use the index of first newly added tab, from `TabPane.getTabs()`, which >> would be always reliable. >> >> Verification: >> No existing tests fail due to this change. >> Added a system test which fails without and pass with fix. > > modules/javafx.controls/src/main/java/javafx/scene/control/skin/TabPaneSkin.java > line 994: > >> 993: private void moveTab(int moveToIndex, TabHeaderSkin >> tabHeaderSkin) { >> 994: if (moveToIndex != >> headersRegion.getChildren().indexOf(tabHeaderSkin)) { >> 995: headersRegion.getChildren().remove(tabHeaderSkin); > > Unless I am missing something, this check seems unrelated to the bug. Yes Kevin, this is not required for fix. In some scenarios the tabHeader gets placed at correct index due to the addition of new headers, so this movement becomes redundant. ------------- PR: https://git.openjdk.java.net/jfx/pull/201