From 076d7caf5c47cffa230983b199d076becc4e8294 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Wed, 15 Jun 2022 22:00:14 +0200 Subject: [PATCH] Initialize OSX OpenFileHandler in invokeAndWait --- .../net/sf/openrocket/startup/OSXSetup.java | 18 +++++++++++++++++- .../sf/openrocket/startup/SwingStartup.java | 2 ++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/swing/src/net/sf/openrocket/startup/OSXSetup.java b/swing/src/net/sf/openrocket/startup/OSXSetup.java index 8e4a0a038..378c5afda 100644 --- a/swing/src/net/sf/openrocket/startup/OSXSetup.java +++ b/swing/src/net/sf/openrocket/startup/OSXSetup.java @@ -6,6 +6,7 @@ import java.awt.desktop.OpenFilesEvent; import java.awt.desktop.OpenFilesHandler; import java.awt.desktop.PreferencesHandler; import java.awt.desktop.QuitHandler; +import java.lang.reflect.InvocationTargetException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -92,7 +93,6 @@ final class OSXSetup { // Set handlers osxDesktop.setAboutHandler(ABOUT_HANDLER); - osxDesktop.setOpenFileHandler(OPEN_FILE_HANDLER); osxDesktop.setPreferencesHandler(PREFERENCES_HANDLER); osxDesktop.setQuitHandler(QUIT_HANDLER); @@ -115,4 +115,20 @@ final class OSXSetup { } } + /** + * Sets up the open file handler, which handles file association on macOS. + */ + public static void setupOSXOpenFileHandler() { + if (SystemInfo.getPlatform() != Platform.MAC_OS) { + log.warn("Attempting to set up OSX file handler on non-MAC_OS"); + } + final Desktop osxDesktop = Desktop.getDesktop(); + if (osxDesktop == null) { + // Application is null: Something is wrong, give up on OS setup + throw new NullPointerException("com.apple.eawt.Application.getApplication() returned NULL. " + + "Aborting OSX UI Setup."); + } + osxDesktop.setOpenFileHandler(OPEN_FILE_HANDLER); + } + } diff --git a/swing/src/net/sf/openrocket/startup/SwingStartup.java b/swing/src/net/sf/openrocket/startup/SwingStartup.java index c95860878..5a125e702 100644 --- a/swing/src/net/sf/openrocket/startup/SwingStartup.java +++ b/swing/src/net/sf/openrocket/startup/SwingStartup.java @@ -85,6 +85,8 @@ public class SwingStartup { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { + // Set up the OSX file open handler here so that it can handle files that are opened when OR is not yet running. + OSXSetup.setupOSXOpenFileHandler(); runner.runInEDT(args); } });