私がMarsに移行して以来、私のRCPアプリケーションのドラッグ&ドロップ機能はもう動作していません。Eclipse Marsで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であるため、もう明らかになりました。これはEclipseのバグか新しい動作かどうかは誰にも分かりますか?
UPDATE:私はもっと研究し、問題がそこから来ていませんが、方法がある
:
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)を受け取ります
fig/editpartをクリックすると、dispatchMouseReleasedが(SWTEventDispatcherから)呼び出された後、LunaのIFigure f = root.findMouseEventTargetAt(me.x、me。 y); '今は火星では図を返します。これは私が見つけた現在の違いで、ドラッグ・アンド・ドロップは動作しません。
しかし..ルナと火星の違いは、org.eclipse.draw2d.findMouseEventTargetAtの動作がどう違うか分かりません。