import java.util.IdentityHashMap; import java.util.Map; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.input.MouseDragEvent; import javafx.scene.input.MouseEvent; import org.eclipse.gef.mvc.fx.gestures.HoverGesture; import org.eclipse.gef.mvc.fx.viewer.IViewer; public class HoverGestureWithDraggedSupport extends HoverGesture { private final Map<Scene, EventHandler<MouseEvent>> fullDragFilters = new IdentityHashMap<>(); @Override protected void doActivate() { super.doActivate(); for (IViewer viewer : getDomain().getViewers().values()) { Scene scene = viewer.getCanvas().getScene(); if (!fullDragFilters.containsKey(scene)) { EventHandler<MouseEvent> filter = new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { scene.startFullDrag(); } }; scene.addEventFilter(MouseEvent.DRAG_DETECTED, filter); fullDragFilters.put(scene, filter); } } } @Override protected void doDeactivate() { for (Scene scene : fullDragFilters.keySet()) { scene.removeEventFilter(MouseEvent.DRAG_DETECTED, fullDragFilters.remove(scene)); } super.doDeactivate(); } protected boolean isHoverEvent(MouseEvent event) { //@formatter:off return event.getEventType().equals(MouseEvent.MOUSE_MOVED) || event.getEventType().equals(MouseEvent.MOUSE_ENTERED_TARGET) || event.getEventType().equals(MouseEvent.MOUSE_EXITED_TARGET) || event.getEventType().equals(MouseDragEvent.MOUSE_DRAG_OVER); //@formatter:on } }