화성에서 마이그레이션 한 이래로 내 RCP 앱의 드래그 앤 드롭 기능이 더 이상 작동하지 않습니다.Eclipse 화성에서 mouseDrag와 mouseMove를 구별
나는 방법이 클래스 org.eclipse.gef.ui.parts.DomainEventDispatcher에 루나에서 화성에서 다른 행동을 발견 디버깅 후 :
/**
* @see EventDispatcher#dispatchMouseMoved(org.eclipse.swt.events.MouseEvent)
*/
public void dispatchMouseMoved(org.eclipse.swt.events.MouseEvent me) {
if (!editorCaptured) {
super.dispatchMouseMoved(me);
if (draw2dBusy())
return;
}
if (okToDispatch()) {
if ((me.stateMask & InputEvent.ANY_BUTTON) != 0)
domain.mouseDrag(me, viewer);
else
domain.mouseMove(me, viewer);
}
}
가 mouseDrag 및 mouseMove 나 구별이되지 않습니다 편집기에서 마우스를 끌고 (클릭하고 드래그해도) me.stateMask가 0이기 때문에 더 이상 공개되지 않습니다. 이 사람이 이클립스 버그 또는 새로운 행동인지 알 수 있습니까?
업데이트 : 좀 더 연구하고 문제가 거기에서 오지 않는다, 그러나 방법이
:
private void receive(org.eclipse.swt.events.MouseEvent me) {
currentEvent = null;
updateFigureUnderCursor(me);
if (captured) {
if (mouseTarget != null)
currentEvent = new MouseEvent(this, mouseTarget, me);
} else {
IFigure f = root.findMouseEventTargetAt(me.x, me.y);
if (f == mouseTarget) {
if (mouseTarget != null)
currentEvent = new MouseEvent(this, mouseTarget, me);
return;
}
if (mouseTarget != null) {
currentEvent = new MouseEvent(this, mouseTarget, me);
mouseTarget.handleMouseExited(currentEvent);
}
setMouseTarget(f);
if (mouseTarget != null) {
currentEvent = new MouseEvent(this, mouseTarget, me);
mouseTarget.handleMouseEntered(currentEvent);
}
}
}
다음 SWTEventDispatcher에서 (나 org.eclipse.swt.events.MouseEvent)를 수신
특정한 경우에 Figure/editpart를 클릭하면 dispatchMouseReleased가 SWTEventDispatcher에서 호출 된 후 receive (..) 메서드에서 Luna의 IFigure f = root.findMouseEventTargetAt (me.x, me. 와이);' 이제는 화성에서 그림을 반환합니다. 이것은 드래그 앤 드롭이 작동하지 않는 것을 발견 한 현재의 차이입니다.
그러나 .. 나는 루나와 화성의 차이점을 이해하지 못한다. org.eclipse.draw2d.findMouseEventTargetAt는 다르게 작동한다.