--- old/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDesktopPeer.java 2015-11-19 18:20:27.545553994 +0300 +++ new/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDesktopPeer.java 2015-11-19 18:20:27.417553990 +0300 @@ -25,9 +25,19 @@ package sun.lwawt.macosx; +import com.apple.eawt.Application; +import com.apple.eawt.FullScreenUtilities; +import sun.awt.AWTAccessor; +import sun.lwawt.LWWindowPeer; + +import javax.swing.*; +import java.awt.*; import java.awt.Desktop.Action; +import java.awt.desktop.*; +import java.awt.peer.ComponentPeer; import java.awt.peer.DesktopPeer; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI; @@ -37,34 +47,230 @@ * * @see DesktopPeer */ -public class CDesktopPeer implements DesktopPeer { +final public class CDesktopPeer implements DesktopPeer { + + private static final CFileManager fileManager = new CFileManager(); + @Override public boolean isSupported(Action action) { - // OPEN, EDIT, PRINT, MAIL, BROWSE all supported. - // Though we don't really differentiate between OPEN / EDIT return true; } + @Override public void open(File file) throws IOException { this.lsOpenFile(file, false); } + @Override public void edit(File file) throws IOException { this.lsOpenFile(file, false); } + @Override public void print(File file) throws IOException { this.lsOpenFile(file, true); } + @Override public void mail(URI uri) throws IOException { this.lsOpen(uri); } + @Override public void browse(URI uri) throws IOException { this.lsOpen(uri); } + @Override + public void addAppEventListener(SystemEventListener listener) { + Application.getApplication().addAppEventListener(listener); + } + + @Override + public void removeAppEventListener(SystemEventListener listener) { + Application.getApplication().removeAppEventListener(listener); + } + + @Override + public void setAboutHandler(AboutHandler aboutHandler) { + Application.getApplication().setAboutHandler(aboutHandler); + } + + @Override + public void setPreferencesHandler(PreferencesHandler preferencesHandler) { + Application.getApplication().setPreferencesHandler(preferencesHandler); + } + + @Override + public void setOpenFileHandler(OpenFilesHandler openFileHandler) { + Application.getApplication().setOpenFileHandler(openFileHandler); + } + + @Override + public void setPrintFileHandler(PrintFilesHandler printFileHandler) { + Application.getApplication().setPrintFileHandler(printFileHandler); + } + + @Override + public void setOpenURIHandler(OpenURIHandler openURIHandler) { + Application.getApplication().setOpenURIHandler(openURIHandler); + } + + @Override + public void setQuitHandler(QuitHandler quitHandler) { + Application.getApplication().setQuitHandler(quitHandler); + } + + @Override + public void setQuitStrategy(QuitStrategy strategy) { + Application.getApplication().setQuitStrategy(strategy); + } + + @Override + public void enableSuddenTermination() { + Application.getApplication().enableSuddenTermination(); + } + + @Override + public void disableSuddenTermination() { + Application.getApplication().disableSuddenTermination(); + } + + @Override + public void requestForeground(boolean allWindows) { + Application.getApplication().requestForeground(allWindows); + } + + @Override + public void openHelpViewer() { + Application.getApplication().openHelpViewer(); + } + + @Override + public void setDefaultMenuBar(JMenuBar menuBar) { + Application.getApplication().setDefaultMenuBar(menuBar); + } + + @Override + public void addWindowFullScreenListener(final Window window, + final FullScreenListener listener) { + FullScreenUtilities.addFullScreenListenerTo(window, listener); + } + + @Override + public void removeWindowFullScreenListener(final Window window, + final FullScreenListener listener) { + FullScreenUtilities.removeFullScreenListenerFrom(window, listener); + } + + @Override + public void setWindowCanFullScreen(Window window, boolean canFullScreen) { + FullScreenUtilities.setWindowCanFullScreen(window, canFullScreen); + } + + @Override + public void requestToggleFullScreen(Window window) { + final ComponentPeer peer = AWTAccessor.getComponentAccessor().getPeer(window); + + if (!(peer instanceof LWWindowPeer)) { + return; + } + Object platformWindow = ((LWWindowPeer) peer).getPlatformWindow(); + if (!(platformWindow instanceof CPlatformWindow)) { + return; + } + ((CPlatformWindow) platformWindow).toggleFullScreen(); + } + + @Override + public FileManager getFileManager() { + return fileManager; + } + + private static class CFileManager extends FileManager { + + @Override + public int OSTypeToInt(String type) { + return com.apple.eio.FileManager.OSTypeToInt(type); + } + + @Override + public void setFileTypeAndCreator(String filename, int type, int creator) + throws IOException { + com.apple.eio.FileManager.setFileTypeAndCreator(filename, type, creator); + } + + @Override + public void setFileType(String filename, int type) throws IOException { + com.apple.eio.FileManager.setFileType(filename, type); + } + + @Override + public void setFileCreator(String filename, int creator) throws IOException { + com.apple.eio.FileManager.setFileCreator(filename, creator); + } + + @Override + public int getFileType(String filename) throws IOException { + return com.apple.eio.FileManager.getFileType(filename); + } + + @Override + public int getFileCreator(String filename) throws IOException { + return com.apple.eio.FileManager.getFileCreator(filename); + } + + @Override + public String findFolder(int folderType) throws FileNotFoundException { + return com.apple.eio.FileManager.findFolder(folderType); + } + + @Override + public String findFolder(short domain, int folderType) + throws FileNotFoundException { + return com.apple.eio.FileManager.findFolder(domain, folderType); + } + + @Override + public String findFolder(short domain, int folderType, boolean createIfNeeded) + throws FileNotFoundException { + return com.apple.eio.FileManager.findFolder(domain, folderType, createIfNeeded); + } + + @Override + public String getResource(String resourceName) throws FileNotFoundException { + return com.apple.eio.FileManager.getResource(resourceName); + } + + @Override + public String getResource(String resourceName, String subDirName) + throws FileNotFoundException { + return com.apple.eio.FileManager.getResource(resourceName, subDirName); + } + + @Override + public String getResource(String resourceName, String subDirName, String type) + throws FileNotFoundException { + return com.apple.eio.FileManager.getResource(resourceName, subDirName, type); + } + + @Override + public String getPathToApplicationBundle() { + return com.apple.eio.FileManager.getPathToApplicationBundle(); + } + + @Override + public boolean moveToTrash(File file) throws FileNotFoundException { + return com.apple.eio.FileManager.moveToTrash(file); + } + + @Override + public boolean revealInFinder(File file) throws FileNotFoundException { + return com.apple.eio.FileManager.revealInFinder(file); + } + + } + private void lsOpen(URI uri) throws IOException { int status = _lsOpenURI(uri.toString());