0N/A/*
2362N/A * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/A
0N/Apackage com.sun.java.swing.plaf.windows;
0N/A
0N/Aimport javax.swing.DefaultDesktopManager;
0N/Aimport javax.swing.JInternalFrame;
0N/Aimport javax.swing.JLayeredPane;
0N/Aimport java.awt.Component;
0N/Aimport java.awt.Container;
0N/Aimport java.awt.Dimension;
0N/Aimport java.beans.PropertyVetoException;
0N/Aimport java.util.Vector;
0N/Aimport java.lang.ref.WeakReference;
0N/A
0N/A/**
0N/A * This class implements a DesktopManager which more closely follows
0N/A * the MDI model than the DefaultDesktopManager. Unlike the
0N/A * DefaultDesktopManager policy, MDI requires that the selected
0N/A * and activated child frames are the same, and that that frame
0N/A * always be the top-most window.
0N/A * <p>
0N/A * The maximized state is managed by the DesktopManager with MDI,
0N/A * instead of just being a property of the individual child frame.
0N/A * This means that if the currently selected window is maximized
0N/A * and another window is selected, that new window will be maximized.
0N/A *
0N/A * @see javax.swing.DefaultDesktopManager
0N/A * @author Thomas Ball
0N/A */
0N/Apublic class WindowsDesktopManager extends DefaultDesktopManager
0N/A implements java.io.Serializable, javax.swing.plaf.UIResource {
0N/A
0N/A /* The frame which is currently selected/activated.
0N/A * We store this value to enforce MDI's single-selection model.
0N/A */
0N/A private WeakReference<JInternalFrame> currentFrameRef;
0N/A
0N/A public void activateFrame(JInternalFrame f) {
0N/A JInternalFrame currentFrame = currentFrameRef != null ?
0N/A currentFrameRef.get() : null;
0N/A try {
0N/A super.activateFrame(f);
0N/A if (currentFrame != null && f != currentFrame) {
0N/A // If the current frame is maximized, transfer that
0N/A // attribute to the frame being activated.
0N/A if (currentFrame.isMaximum() &&
0N/A (f.getClientProperty("JInternalFrame.frameType") !=
0N/A "optionDialog") ) {
0N/A //Special case. If key binding was used to select next
0N/A //frame instead of minimizing the icon via the minimize
0N/A //icon.
0N/A if (!currentFrame.isIcon()) {
0N/A currentFrame.setMaximum(false);
0N/A if (f.isMaximizable()) {
0N/A if (!f.isMaximum()) {
0N/A f.setMaximum(true);
0N/A } else if (f.isMaximum() && f.isIcon()) {
0N/A f.setIcon(false);
0N/A } else {
0N/A f.setMaximum(false);
0N/A }
0N/A }
0N/A }
0N/A }
0N/A if (currentFrame.isSelected()) {
0N/A currentFrame.setSelected(false);
0N/A }
0N/A }
0N/A
0N/A if (!f.isSelected()) {
0N/A f.setSelected(true);
0N/A }
0N/A } catch (PropertyVetoException e) {}
0N/A if (f != currentFrame) {
614N/A currentFrameRef = new WeakReference<JInternalFrame>(f);
0N/A }
0N/A }
0N/A
0N/A}