/* * Copyright (c) 2011, 2012, 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 jalview.gui; import java.awt.Container; import java.beans.PropertyVetoException; import java.util.Vector; import javax.swing.DefaultDesktopManager; import javax.swing.DesktopManager; import javax.swing.JInternalFrame; /** * Based on AquaInternalFrameManager * * DesktopManager implementation for Aqua * * Mac is more like Windows than it's like Motif/Basic * * From WindowsDesktopManager: * * This class implements a DesktopManager which more closely follows the MDI * model than the DefaultDesktopManager. Unlike the DefaultDesktopManager * policy, MDI requires that the selected and activated child frames are the * same, and that that frame always be the top-most window. *
* The maximized state is managed by the DesktopManager with MDI, instead of
* just being a property of the individual child frame. This means that if the
* currently selected window is maximized and another window is selected, that
* new window will be maximized.
*
* Downloaded from
* https://raw.githubusercontent.com/frohoff/jdk8u-jdk/master/src/macosx/classes/com/apple/laf/AquaInternalFrameManager.java
*
* Patch from Jim Procter - when the most recently opened frame is closed,
* correct behaviour is to go to the next most recent frame, rather than wrap
* around to the bottom of the window stack (as the original implementation
* does)
*
* @see com.sun.java.swing.plaf.windows.WindowsDesktopManager
*/
public class AquaInternalFrameManager extends DefaultDesktopManager
{
// Variables
/* The frame which is currently selected/activated.
* We store this value to enforce Mac's single-selection model.
*/
JInternalFrame fCurrentFrame;
JInternalFrame fInitialFrame;
/* The list of frames, sorted by order of creation.
* This list is necessary because by default the order of
* child frames in the JDesktopPane changes during frame
* activation (the activated frame is moved to index 0).
* We preserve the creation order so that "next" and "previous"
* frame actions make sense.
*/
Vector