package jalview.gui;
import java.awt.Container;
-import java.awt.Rectangle;
import java.beans.PropertyVetoException;
import java.util.Vector;
import javax.swing.DefaultDesktopManager;
+import javax.swing.DesktopManager;
import javax.swing.JInternalFrame;
-import com.apple.laf.AquaInternalFramePaneUI;
-
/**
* Based on AquaInternalFrameManager
*
* around to the bottom of the window stack (as the original implementation
* does)
*
- * @see com.sun.java.swing.plaf.windows.WindowsDesktopManager
+ * see com.sun.java.swing.plaf.windows.WindowsDesktopManager
*/
public class AquaInternalFrameManager extends DefaultDesktopManager
{
JInternalFrame fInitialFrame;
- AquaInternalFramePaneUI fCurrentPaneUI;
-
/* 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
*/
Vector<JInternalFrame> fChildFrames = new Vector<>(1);
+ /**
+ * keep a reference to the original LAF manager so we can iconise/de-iconise
+ * correctly
+ */
+ private DesktopManager ourManager;
+
+ public AquaInternalFrameManager(DesktopManager desktopManager)
+ {
+ ourManager = desktopManager;
+ }
+
@Override
public void closeFrame(final JInternalFrame f)
{
// reshape does delta checks for us
f.reshape(desktopIcon.getX(), desktopIcon.getY(), f.getWidth(),
f.getHeight());
- super.deiconifyFrame(f);
+ ourManager.deiconifyFrame(f);
}
void addIcon(final Container c,
final JInternalFrame.JDesktopIcon desktopIcon)
{
c.add(desktopIcon);
- }
+ }
/**
* Removes the frame from its parent and adds its desktopIcon to the parent.
@Override
public void iconifyFrame(final JInternalFrame f)
{
- // Same as super except doesn't deactivate it
- JInternalFrame.JDesktopIcon desktopIcon;
- Container c;
-
- desktopIcon = f.getDesktopIcon();
- // Position depends on *current* position of frame, unlike super which
- // reuses the first position
- final Rectangle r = getBoundsForIconOf(f);
- desktopIcon.setBounds(r.x, r.y, r.width, r.height);
-
- c = f.getParent();
- if (c == null)
- {
- return;
- }
-
- c.remove(f);
- addIcon(c, desktopIcon);
- c.repaint(f.getX(), f.getY(), f.getWidth(), f.getHeight());
+ ourManager.iconifyFrame(f);
}
// WindowsDesktopManager code
try
{
if (f != null)
- {
- super.activateFrame(f);
- }
+ {
+ super.activateFrame(f);
+ }
// If this is the first activation, add to child list.
if (fChildFrames.indexOf(f) == -1)
activateFrame(fInitialFrame);
}
return;
- }
+ }
final int count = fChildFrames.size();
if (count <= 1)
final JInternalFrame f = fChildFrames.elementAt(nextIndex);
activateFrame(f);
fCurrentFrame = f;
- }
+ }
/**
* Activate the next child JInternalFrame, as determined by the frames'
public void activateNextFrame()
{
switchFrame(true);
- }
+ }
/**
* same as above but will activate a frame if none have been selected
{
fInitialFrame = f;
switchFrame(true);
- }
+ }
/**
* Activate the previous child JInternalFrame, as determined by the frames'
public void activatePreviousFrame()
{
switchFrame(false);
- }
+ }
}
\ No newline at end of file