diff --git a/src/us/deathmarine/luyten/Keymap.java b/src/us/deathmarine/luyten/Keymap.java new file mode 100644 index 0000000..c84f26b --- /dev/null +++ b/src/us/deathmarine/luyten/Keymap.java @@ -0,0 +1,14 @@ +package us.deathmarine.luyten; + +import java.awt.event.InputEvent; + +public final class Keymap { + /** + * Ctrl+click defaults to "context menu" in macOS, so META+click is used there. + * + * @return META_DOWN_MASK for macOS, CTRL_DOWN_MASK otherwise + */ + public static int ctrlDownModifier() { + return SystemInfo.IS_MAC ? InputEvent.META_DOWN_MASK : InputEvent.CTRL_DOWN_MASK; + } +} diff --git a/src/us/deathmarine/luyten/LuytenOsx.java b/src/us/deathmarine/luyten/LuytenOsx.java index c848b3b..46670ae 100644 --- a/src/us/deathmarine/luyten/LuytenOsx.java +++ b/src/us/deathmarine/luyten/LuytenOsx.java @@ -10,9 +10,6 @@ import com.apple.eawt.ApplicationEvent; */ public class LuytenOsx extends Luyten { public static void main(String[] args) { - // Set a flag that says we are running in OS X - System.setProperty("us.deathmarine.luyten.Luyten.running_in_osx", "true"); - // Add an adapter as the handler to a new instance of the application // class @SuppressWarnings("deprecation") diff --git a/src/us/deathmarine/luyten/MainMenuBar.java b/src/us/deathmarine/luyten/MainMenuBar.java index 9b0a803..b9af8ba 100644 --- a/src/us/deathmarine/luyten/MainMenuBar.java +++ b/src/us/deathmarine/luyten/MainMenuBar.java @@ -249,7 +249,7 @@ public class MainMenuBar extends JMenuBar { // Only add the exit command for non-OS X. OS X handles its close // automatically - if (!("true".equals(System.getProperty("us.deathmarine.luyten.Luyten.running_in_osx")))) { + if (!Boolean.getBoolean("apple.laf.useScreenMenuBar")) { menuItem = new JMenuItem("Exit"); menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.ALT_MASK)); menuItem.addActionListener(new ActionListener() { diff --git a/src/us/deathmarine/luyten/Model.java b/src/us/deathmarine/luyten/Model.java index c94b1c6..fc807e6 100644 --- a/src/us/deathmarine/luyten/Model.java +++ b/src/us/deathmarine/luyten/Model.java @@ -153,7 +153,7 @@ public class Model extends JSplitPane { } }); - KeyStroke sfuncF4 = KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.CTRL_DOWN_MASK, false); + KeyStroke sfuncF4 = KeyStroke.getKeyStroke(KeyEvent.VK_F4, Keymap.ctrlDownModifier(), false); mainWindow.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(sfuncF4, "CloseTab"); mainWindow.getRootPane().getActionMap().put("CloseTab", new AbstractAction() { diff --git a/src/us/deathmarine/luyten/OpenFile.java b/src/us/deathmarine/luyten/OpenFile.java index a0a38aa..0b1cd2b 100644 --- a/src/us/deathmarine/luyten/OpenFile.java +++ b/src/us/deathmarine/luyten/OpenFile.java @@ -193,7 +193,7 @@ public class OpenFile implements SyntaxConstants { } textArea.setHyperlinksEnabled(true); - textArea.setLinkScanningMask(InputEvent.CTRL_DOWN_MASK); + textArea.setLinkScanningMask(Keymap.ctrlDownModifier()); textArea.setLinkGenerator(new LinkGenerator() { @Override @@ -240,7 +240,7 @@ public class OpenFile implements SyntaxConstants { return; } - if ((e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0) { + if ((e.getModifiersEx() & Keymap.ctrlDownModifier()) != 0) { Font font = textArea.getFont(); int size = font.getSize(); if (e.getWheelRotation() > 0) { @@ -410,7 +410,7 @@ public class OpenFile implements SyntaxConstants { public synchronized void mouseMoved(MouseEvent e) { String linkText = null; boolean isLinkLabel = false; - boolean isCtrlDown = (e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0; + boolean isCtrlDown = (e.getModifiersEx() & Keymap.ctrlDownModifier()) != 0; if (isCtrlDown) { linkText = createLinkLabel(e); isLinkLabel = linkText != null; diff --git a/src/us/deathmarine/luyten/SystemInfo.java b/src/us/deathmarine/luyten/SystemInfo.java new file mode 100644 index 0000000..77722ef --- /dev/null +++ b/src/us/deathmarine/luyten/SystemInfo.java @@ -0,0 +1,10 @@ +package us.deathmarine.luyten; + +import java.util.Locale; + +public class SystemInfo { + private static final String OS_NAME = System.getProperty("os.name"); + private static final String OS_NAME_LOWER = OS_NAME.toLowerCase(Locale.US); + + public static boolean IS_MAC = OS_NAME_LOWER.startsWith("mac"); +}