@@ -1030,4 +1030,45 @@ public void testAddNullPostLayoutPulseListener() {
10301030 // Verify TilePane was GC'd:
10311031 JMemoryBuddy .assertCollectable (ref );
10321032 }
1033+
1034+ @ Test public void testNoReferencesRemainToRemovedNodeAfterStartingFullDrag () {
1035+ TilePane pane = new TilePane ();
1036+ pane .setMinSize (200 , 200 );
1037+
1038+ WeakReference <TilePane > ref = new WeakReference <>(pane );
1039+
1040+ Group root = new Group (pane );
1041+ final Scene scene = new Scene (root , 400 , 400 );
1042+ stage .setScene (scene );
1043+
1044+ pane .setOnDragDetected (event -> ((Node ) event .getSource ()).startFullDrag ());
1045+
1046+ // Simulate a drag operation from the user
1047+ SceneHelper .processMouseEvent (scene ,
1048+ MouseEventGenerator .generateMouseEvent (MouseEvent .MOUSE_PRESSED , 50 , 50 ));
1049+
1050+ SceneHelper .processMouseEvent (scene ,
1051+ MouseEventGenerator .generateMouseEvent (MouseEvent .MOUSE_DRAGGED , 70 , 70 ));
1052+
1053+ SceneHelper .processMouseEvent (scene ,
1054+ MouseEventGenerator .generateMouseEvent (MouseEvent .MOUSE_RELEASED , 50 , 50 ));
1055+
1056+ root .getChildren ().setAll (new StackPane ());
1057+
1058+ // Generate a MOUSE_EXITED event for the removed node and a pulse as otherwise many unrelated Scene references
1059+ // hang around to the removed node:
1060+ SceneHelper .processMouseEvent (
1061+ scene ,
1062+ new MouseEvent (
1063+ MouseEvent .MOUSE_EXITED , 50 , 50 , 50 , 50 , MouseButton .NONE , 0 , false , false , false ,
1064+ false , false , false , false , false , false , true , null
1065+ )
1066+ );
1067+
1068+ Toolkit .getToolkit ().firePulse ();
1069+
1070+ pane = null ;
1071+
1072+ JMemoryBuddy .assertCollectable (ref );
1073+ }
10331074}
0 commit comments