package org.gudy.azureus2.ui.swt.osx; import java.lang.reflect.Field; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.gudy.azureus2.platform.macosx.access.jnilib.OSXAccess; import org.gudy.azureus2.ui.swt.Utils; import com.aelitis.azureus.core.AzureusCore; import com.aelitis.azureus.core.AzureusCoreFactory; import com.aelitis.azureus.core.AzureusCoreRunningListener; import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT; public class OSXFileOpen { public static void fileOpen(String[] files) { for (String file : files) { fileOpen(file); } } public static void fileOpen(final String file) { AzureusCoreFactory.addCoreRunningListener(new AzureusCoreRunningListener() { public void azureusCoreRunning(AzureusCore core) { UIFunctionsManagerSWT.getUIFunctionsSWT().openTorrentOpenOptions( Utils.findAnyShell(), null, new String[] { file }, false, false); } }); } /** * Called by OSXAccess by reflection to do some SWT hooks * * @since 5.0.0.1 */ public static void initLight() { try { Display display = new Display(); // hook opendoc try { Field fldOpenDoc = SWT.class.getDeclaredField("OpenDocument"); int SWT_OpenDocument = fldOpenDoc.getInt(null); display.addListener(SWT_OpenDocument, new Listener() { public void handleEvent(final Event event) { try { OSXAccess.passParameter(event.text); } catch (Throwable e) { } } }); } catch (Throwable t) { } // OpenDoc will trigger almost immediately (in first loop). However, // do it for at least 300ms just in case for (int i = 0; i < 10; i ++) { while (display.readAndDispatch()) { } Thread.sleep(30); } } catch (Throwable t) { t.printStackTrace(); } } }