Skip to content

Commit

Permalink
8237372: NullPointerException in TabPaneSkin.stopDrag
Browse files Browse the repository at this point in the history
Test simulates a single mouse-released event.
Fix simply guards against the null case.
  • Loading branch information
Robert Lichtenberger committed Jan 17, 2020
1 parent 16cea41 commit 923a63b
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2213,14 +2213,16 @@ private void stopDrag() {
return;
}
// Animate tab header being dragged to its final position.
dragHeaderSourceX = dragTabHeader.getLayoutX();
dragHeaderTransitionX = dragHeaderDestX - dragHeaderSourceX;
dragHeaderAnim.playFromStart();

// Reorder the tab list.
if (dragHeaderStartX != dragHeaderDestX) {
((TabObservableList<Tab>) getSkinnable().getTabs()).reorder(dragTabHeader.tab, swapTab);
swapTab = null;
if (dragTabHeader != null) {
dragHeaderSourceX = dragTabHeader.getLayoutX();
dragHeaderTransitionX = dragHeaderDestX - dragHeaderSourceX;
dragHeaderAnim.playFromStart();

// Reorder the tab list.
if (dragHeaderStartX != dragHeaderDestX) {
((TabObservableList<Tab>) getSkinnable().getTabs()).reorder(dragTabHeader.tab, swapTab);
swapTab = null;
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
Expand Down Expand Up @@ -463,6 +464,24 @@ private void show() {
assertSame(TabPane.TabDragPolicy.FIXED, tabPane.getTabDragPolicy());
}

@Test public void tabDragPolicyReorderAndAsymmetricMouseEvent() {
tabPane.setTabDragPolicy(TabPane.TabDragPolicy.REORDER);
tabPane.getTabs().add(tab1);
tabPane.getTabs().add(tab2);
root.getChildren().add(tabPane);
show();

root.layout();

double xval = (tabPane.localToScene(tabPane.getLayoutBounds())).getMinX();
double yval = (tabPane.localToScene(tabPane.getLayoutBounds())).getMinY();

SceneHelper.processMouseEvent(scene,
MouseEventGenerator.generateMouseEvent(MouseEvent.MOUSE_RELEASED, xval+75, yval+20));
tk.firePulse();
}


@Test public void setRotateGraphicAndSeeValueIsReflectedInModel() {
tabPane.setRotateGraphic(true);
assertTrue(tabPane.rotateGraphicProperty().getValue());
Expand Down

0 comments on commit 923a63b

Please sign in to comment.