--- old/src/java.desktop/macosx/classes/com/apple/eawt/_AppEventLegacyHandler.java 2015-11-19 18:20:53.985554671 +0300 +++ /dev/null 2015-11-09 12:41:48.570911013 +0300 @@ -1,188 +0,0 @@ -/* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package com.apple.eawt; - -import java.awt.Toolkit; -import java.io.File; -import java.util.*; - -import com.apple.eawt.AppEvent.*; - -@SuppressWarnings("deprecation") -class _AppEventLegacyHandler implements AboutHandler, PreferencesHandler, _OpenAppHandler, AppReOpenedListener, OpenFilesHandler, PrintFilesHandler, QuitHandler { - final _AppEventHandler parent; - final Vector legacyAppListeners = new Vector(); - boolean blockLegacyAPI; - boolean initializedParentDispatchers; - - _AppEventLegacyHandler(final _AppEventHandler parent) { - this.parent = parent; - } - - void blockLegacyAPI() { - blockLegacyAPI = true; - } - - void checkIfLegacyAPIBlocked() { - if (!blockLegacyAPI) return; - throw new IllegalStateException("Cannot add com.apple.eawt.ApplicationListener after installing an app event handler"); - } - - void addLegacyAppListener(final ApplicationListener listener) { - checkIfLegacyAPIBlocked(); - - if (!initializedParentDispatchers) { - final _AppMenuBarHandler menuBarHandler = Application.getApplication().menuBarHandler; - final boolean prefsMenuAlreadyExplicitlySet = menuBarHandler.prefsMenuItemExplicitlySet; - - parent.aboutDispatcher.setHandler(this); - parent.preferencesDispatcher.setHandler(this); - if (!prefsMenuAlreadyExplicitlySet) { - menuBarHandler.setPreferencesMenuItemVisible(false); // default behavior is not to have a preferences item - } - parent.openAppDispatcher.setHandler(this); - parent.reOpenAppDispatcher.addListener(this); - parent.openFilesDispatcher.setHandler(this); - parent.printFilesDispatcher.setHandler(this); - parent.quitDispatcher.setHandler(this); - - initializedParentDispatchers = true; - } - - synchronized (legacyAppListeners) { - legacyAppListeners.addElement(listener); - } - } - - public void removeLegacyAppListener(final ApplicationListener listener) { - checkIfLegacyAPIBlocked(); - - synchronized (legacyAppListeners) { - legacyAppListeners.removeElement(listener); - } - } - - @Override - public void handleAbout(final AboutEvent e) { - final ApplicationEvent ae = new ApplicationEvent(Toolkit.getDefaultToolkit()); - sendEventToEachListenerUntilHandled(ae, new EventDispatcher() { - public void dispatchEvent(final ApplicationListener listener) { - listener.handleAbout(ae); - } - }); - - if (ae.isHandled()) return; - parent.openCocoaAboutWindow(); - } - - @Override - public void handlePreferences(final PreferencesEvent e) { - final ApplicationEvent ae = new ApplicationEvent(Toolkit.getDefaultToolkit()); - sendEventToEachListenerUntilHandled(ae, new EventDispatcher() { - public void dispatchEvent(final ApplicationListener listener) { - listener.handlePreferences(ae); - } - }); - } - - @Override - public void handleOpenApp() { - final ApplicationEvent ae = new ApplicationEvent(Toolkit.getDefaultToolkit()); - sendEventToEachListenerUntilHandled(ae, new EventDispatcher() { - public void dispatchEvent(final ApplicationListener listener) { - listener.handleOpenApplication(ae); - } - }); - } - - @Override - public void appReOpened(final AppReOpenedEvent e) { - final ApplicationEvent ae = new ApplicationEvent(Toolkit.getDefaultToolkit()); - sendEventToEachListenerUntilHandled(ae, new EventDispatcher() { - public void dispatchEvent(final ApplicationListener listener) { - listener.handleReOpenApplication(ae); - } - }); - } - - @Override - public void openFiles(final OpenFilesEvent e) { - final List files = e.getFiles(); - for (final File file : files) { // legacy ApplicationListeners only understood one file at a time - final ApplicationEvent ae = new ApplicationEvent(Toolkit.getDefaultToolkit(), file.getAbsolutePath()); - sendEventToEachListenerUntilHandled(ae, new EventDispatcher() { - public void dispatchEvent(final ApplicationListener listener) { - listener.handleOpenFile(ae); - } - }); - } - } - - @Override - public void printFiles(PrintFilesEvent e) { - final List files = e.getFiles(); - for (final File file : files) { // legacy ApplicationListeners only understood one file at a time - final ApplicationEvent ae = new ApplicationEvent(Toolkit.getDefaultToolkit(), file.getAbsolutePath()); - sendEventToEachListenerUntilHandled(ae, new EventDispatcher() { - public void dispatchEvent(final ApplicationListener listener) { - listener.handlePrintFile(ae); - } - }); - } - } - - @Override - public void handleQuitRequestWith(final QuitEvent e, final QuitResponse response) { - final ApplicationEvent ae = new ApplicationEvent(Toolkit.getDefaultToolkit()); - sendEventToEachListenerUntilHandled(ae, new EventDispatcher() { - public void dispatchEvent(final ApplicationListener listener) { - listener.handleQuit(ae); - } - }); - - if (ae.isHandled()) { - parent.performQuit(); - } else { - parent.cancelQuit(); - } - } - - interface EventDispatcher { - void dispatchEvent(final ApplicationListener listener); - } - - // helper that cycles through the loop and aborts if the event is handled, or there are no listeners - void sendEventToEachListenerUntilHandled(final ApplicationEvent event, final EventDispatcher dispatcher) { - synchronized (legacyAppListeners) { - if (legacyAppListeners.size() == 0) return; - - final Enumeration e = legacyAppListeners.elements(); - while (e.hasMoreElements() && !event.isHandled()) { - dispatcher.dispatchEvent(e.nextElement()); - } - } - } -}