From ecda206df411afa4272754baa31662a62e84d0b7 Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Sat, 12 Sep 2026 21:24:27 +0200 Subject: [PATCH] [GEF] Align `handleMove()` with GEF CreationTool The current command should be set before showing the target feedback. Doing so requires an early update of the grid so that the grid-target is up-to-date when calculating the command. --- .../wb/gef/core/tools/AbstractCreationTool.java | 2 +- .../layout/grid/AbstractGridLayoutEditPolicy.java | 12 +++++++++++- .../forms/layout/grid/TableWrapLayoutEditPolicy.java | 2 +- .../swing/FormLayout/gef/FormLayoutEditPolicy.java | 2 +- .../swing/MigLayout/gef/MigLayoutEditPolicy.java | 2 +- .../policy/layout/gbl/GridBagLayoutEditPolicy.java | 2 +- .../gef/policy/layout/grid/GridLayoutEditPolicy.java | 2 +- 7 files changed, 17 insertions(+), 7 deletions(-) diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/AbstractCreationTool.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/AbstractCreationTool.java index a344041b9..fc6aa623f 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/AbstractCreationTool.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/tools/AbstractCreationTool.java @@ -75,8 +75,8 @@ protected boolean handleButtonUp(int button) { protected boolean handleMove() { updateTargetRequest(); updateTargetUnderMouse(); - showTargetFeedback(); setCurrentCommand(getCommand()); + showTargetFeedback(); return true; } diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridLayoutEditPolicy.java index fdc870e72..4db828514 100644 --- a/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridLayoutEditPolicy.java +++ b/org.eclipse.wb.core/src/org/eclipse/wb/core/gef/policy/layout/grid/AbstractGridLayoutEditPolicy.java @@ -35,6 +35,7 @@ import org.eclipse.gef.EditPartListener; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Request; +import org.eclipse.gef.RequestConstants; import org.eclipse.gef.requests.DropRequest; import org.eclipse.swt.graphics.Color; @@ -121,6 +122,15 @@ private void refreshSelectionGrid() { private static final Color m_badTargetFillColor = new Color(255, 0, 0); private static final Color m_badTargetBorderColor = new Color(255, 192, 192); + @Override + public EditPart getTargetEditPart(Request request) { + if (RequestConstants.REQ_CREATE.equals(request.getType())) { + Point location = PolicyUtils.getAbsoluteLocation(getHost(), (DropRequest) request); + updateGridTarget(location); + } + return super.getTargetEditPart(request); + } + @Override protected final void showLayoutTargetFeedback(Request request) { IGridInfo gridInfo = getGridInfo(); @@ -368,5 +378,5 @@ public String toString() { * @param mouseLocation * the location of mouse in absolute coordinates. */ - protected abstract void updateGridTarget(Point mouseLocation) throws Exception; + protected abstract void updateGridTarget(Point mouseLocation); } diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapLayoutEditPolicy.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapLayoutEditPolicy.java index 1a04310b5..f67c7ac2d 100644 --- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapLayoutEditPolicy.java +++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/TableWrapLayoutEditPolicy.java @@ -244,7 +244,7 @@ public static int[] getInsertFeedbackParameters(Interval interval, } @Override - protected void updateGridTarget(Point mouseLocation) throws Exception { + protected void updateGridTarget(Point mouseLocation) { m_target = new GridTarget(); // prepare location in model Point location = mouseLocation.getCopy(); diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormLayoutEditPolicy.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormLayoutEditPolicy.java index 12393b6c0..2e590bee0 100644 --- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormLayoutEditPolicy.java +++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/FormLayoutEditPolicy.java @@ -226,7 +226,7 @@ protected void executeEdit() throws Exception { // //////////////////////////////////////////////////////////////////////////// @Override - protected void updateGridTarget(Point mouseLocation) throws Exception { + protected void updateGridTarget(Point mouseLocation) { m_target = new GridTarget(); // mouseLocation = mouseLocation.getCopy(); diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutEditPolicy.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutEditPolicy.java index f9938ab31..70a9776d3 100644 --- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutEditPolicy.java +++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/MigLayoutEditPolicy.java @@ -323,7 +323,7 @@ public static int[] getInsertFeedbackParameters(Interval interval, } @Override - protected void updateGridTarget(Point mouseLocation) throws Exception { + protected void updateGridTarget(Point mouseLocation) { m_target = new GridTarget(); // prepare location in model Point location = mouseLocation.getCopy(); diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagLayoutEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagLayoutEditPolicy.java index 4541309b0..229f6138b 100644 --- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagLayoutEditPolicy.java +++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/gbl/GridBagLayoutEditPolicy.java @@ -180,7 +180,7 @@ protected Command getAddCommand(ChangeBoundsRequest request) { // //////////////////////////////////////////////////////////////////////////// @Override - protected void updateGridTarget(Point mouseLocation) throws Exception { + protected void updateGridTarget(Point mouseLocation) { m_target = new GridTarget(); // prepare location in model Point location = mouseLocation.getCopy(); diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridLayoutEditPolicy.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridLayoutEditPolicy.java index 183ea12ea..e9c72aea9 100644 --- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridLayoutEditPolicy.java +++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/GridLayoutEditPolicy.java @@ -294,7 +294,7 @@ public static int[] getInsertFeedbackParameters(Interval interval, } @Override - protected void updateGridTarget(Point mouseLocation) throws Exception { + protected void updateGridTarget(Point mouseLocation) { m_target = new GridTarget(); // prepare location in model Point location = mouseLocation.getCopy();