diff --git a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/tools/PanningSelectionExtendedTool.java b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/tools/PanningSelectionExtendedTool.java index 87f4e1883..0ba882176 100644 --- a/com.archimatetool.editor/src/com/archimatetool/editor/diagram/tools/PanningSelectionExtendedTool.java +++ b/com.archimatetool.editor/src/com/archimatetool/editor/diagram/tools/PanningSelectionExtendedTool.java @@ -7,6 +7,8 @@ import org.eclipse.gef.tools.PanningSelectionTool; +import com.archimatetool.editor.utils.PlatformUtils; + /** * Extend the PanningSelectionTool so that Panning occurs on middle mouse button * @@ -16,21 +18,23 @@ public class PanningSelectionExtendedTool extends PanningSelectionTool { @Override protected boolean handleButtonDown(int which) { - if(which == 2) { + if(which == 2) { // Middle mouse button if(stateTransition(STATE_INITIAL, PAN)) { refreshCursor(); } - which = 1; + return super.handleButtonDown(1); // Set to left mouse } /* - * A right-click on the canvas will show the plus cursor for the marquee selection tool. - * On macOS Sonoma the current cursor persists onto the context menu. - * This is a general problem with Sonoma, see https://github.com/eclipse-platform/eclipse.platform.swt/issues/773 - * As the right-click is only for showing the context menu we don't need to see this cursor when right-clicking at all, so trap this here. + * A right-click on the canvas will briefly show the plus cursor for the marquee selection tool before showing the context menu. + * On macOS Sonoma and greater this cursor persists while the context menu is shown. + * This is a general problem with Mac, see https://github.com/eclipse-platform/eclipse.platform.swt/issues/773 + * As right-click is only used for showing the context menu we don't need to see this cursor when right-clicking at all, so trap this here. */ - if(which == 3) { - return true; + if(PlatformUtils.isMac() && which == 3 || (which == 1 && getCurrentInput().isControlKeyDown())) { + boolean result = super.handleButtonDown(which); + setCursor(null); + return result; } return super.handleButtonDown(which); @@ -38,8 +42,8 @@ protected boolean handleButtonDown(int which) { @Override protected boolean handleButtonUp(int which) { - if(which == 2) { - which = 1; + if(which == 2) { // Middle mouse button + return super.handleButtonUp(1); // Set to left mouse } return super.handleButtonUp(which);