Project leak

This commit is contained in:
Alexey Kudravtsev
2010-07-05 14:08:13 +04:00
parent 91dfa9eb89
commit 39ed536745
12 changed files with 126 additions and 124 deletions
@@ -17,12 +17,14 @@
package com.intellij.ide.ui;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.components.ExportableApplicationComponent;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.util.xmlb.Accessor;
import com.intellij.util.xmlb.SerializationFilter;
@@ -99,10 +101,24 @@ public class UISettings implements PersistentStateComponent<UISettings>, Exporta
setSystemFontFaceAndSize();
}
/**
*
* @deprecated use {@link UISettings#addUISettingsListener(com.intellij.ide.ui.UISettingsListener, Disposable disposable)} instead
*/
public void addUISettingsListener(UISettingsListener listener){
myListenerList.add(UISettingsListener.class,listener);
}
public void addUISettingsListener(@NotNull final UISettingsListener listener, @NotNull Disposable parentDisposable){
myListenerList.add(UISettingsListener.class,listener);
Disposer.register(parentDisposable, new Disposable() {
@Override
public void dispose() {
removeUISettingsListener(listener);
}
});
}
/**
* Notifies all registered listeners that UI settings has been changed.
*/
@@ -198,7 +214,7 @@ public class UISettings implements PersistentStateComponent<UISettings>, Exporta
// find any other suitable font withing "preferred" fonts first.
boolean fontIsValid = isValidFont(new Font(FONT_FACE, Font.PLAIN, FONT_SIZE));
if(!fontIsValid){
@NonNls final String[] preferredFonts = new String[]{"dialog", "Arial", "Tahoma"};
@NonNls final String[] preferredFonts = {"dialog", "Arial", "Tahoma"};
for (String preferredFont : preferredFonts) {
if (isValidFont(new Font(preferredFont, Font.PLAIN, FONT_SIZE))) {
FONT_FACE = preferredFont;
@@ -274,7 +290,7 @@ public class UISettings implements PersistentStateComponent<UISettings>, Exporta
public static boolean isRemoteDesktopConnected() {
if(System.getProperty("os.name").contains("Windows")) {
final Map map = (Map)Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints");
return map!= null ? RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT.equals(map.get(RenderingHints.KEY_TEXT_ANTIALIASING)) : false;
return map != null && RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT.equals(map.get(RenderingHints.KEY_TEXT_ANTIALIASING));
}
return false;
}
@@ -17,7 +17,6 @@ package com.intellij.openapi.fileEditor.impl;
import com.intellij.ide.ui.UISettings;
import com.intellij.ide.ui.UISettingsListener;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.AbstractProjectComponent;
import com.intellij.openapi.diagnostic.Logger;
@@ -27,7 +26,6 @@ import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.project.DumbAwareRunnable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.JDOMExternalizable;
import com.intellij.openapi.util.Pair;
@@ -67,12 +65,7 @@ public final class EditorHistoryManager extends AbstractProjectComponent impleme
fileEditorManager.addFileEditorManagerListener(editorManagerListener, project);
project.getMessageBus().connect().subscribe(FileEditorManagerListener.Before.FILE_EDITOR_MANAGER, new MyEditorManagerBeforeListener());
uiSettings.addUISettingsListener(myUISettingsListener);
Disposer.register(project, new Disposable() {
public void dispose() {
uiSettings.removeUISettingsListener(myUISettingsListener);
}
});
uiSettings.addUISettingsListener(myUISettingsListener, project);
}
public void projectOpened(){
@@ -50,7 +50,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
@@ -119,7 +118,7 @@ final class EditorTabbedContainer implements Disposable, CloseAction.CloseTarget
public void uiSettingsChanged(UISettings source) {
updateTabBorder();
}
});
}, this);
Disposer.register(project, this);
}
@@ -997,12 +997,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec
* Extends/cuts number of opened tabs. Also updates location of tabs.
*/
final MyUISettingsListener myUISettingsListener = new MyUISettingsListener();
UISettings.getInstance().addUISettingsListener(myUISettingsListener);
Disposer.register(myProject, new Disposable() {
public void dispose() {
UISettings.getInstance().removeUISettingsListener(myUISettingsListener);
}
});
UISettings.getInstance().addUISettingsListener(myUISettingsListener, myProject);
StartupManager.getInstance(myProject).registerPostStartupActivity(new DumbAwareRunnable() {
public void run() {
@@ -19,6 +19,7 @@ import com.intellij.ide.ui.UISettings;
import com.intellij.ide.ui.UISettingsListener;
import com.intellij.openapi.MnemonicHelper;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.wm.ex.WindowManagerEx;
import com.intellij.util.Alarm;
@@ -53,7 +54,8 @@ public final class FloatingDecorator extends JDialog{
private final Alarm myFrameTicker; // Determines moments of rendering of next frame
private final MyAnimator myAnimator; // Renders alpha ratio
private int myCurrentFrame; // current frame in transparency animation
private float myStartRatio, myEndRatio; // start and end alpha ratio for transparency animation
private float myStartRatio;
private float myEndRatio; // start and end alpha ratio for transparency animation
FloatingDecorator(final IdeFrameImpl owner,final WindowInfoImpl info,final InternalDecorator internalDecorator){
@@ -118,14 +120,13 @@ public final class FloatingDecorator extends JDialog{
}
paint(getGraphics()); // This prevents annoying flick
//
setFocusableWindowState(true);
uiSettings.addUISettingsListener(myUISettingsListener);
uiSettings.addUISettingsListener(myUISettingsListener, myDelayAlarm);
}
public final void dispose(){
UISettings.getInstance().removeUISettingsListener(myUISettingsListener);
Disposer.dispose(myDelayAlarm);
super.dispose();
}
@@ -21,16 +21,15 @@ import com.intellij.ide.impl.ProjectUtil;
import com.intellij.ide.ui.UISettings;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.MnemonicHelper;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationInfo;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.ex.ApplicationInfoEx;
import com.intellij.openapi.application.ex.ApplicationManagerEx;
import com.intellij.openapi.keymap.KeymapManager;
import com.intellij.openapi.project.DumbAwareRunnable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
@@ -76,10 +75,10 @@ public class IdeFrameImpl extends JFrame implements IdeFrame, DataProvider {
private IdeRootPane myRootPane;
private final BalloonLayout myBalloonLayout;
public IdeFrameImpl(ApplicationInfoEx applicationInfoEx, ActionManager actionManager, UISettings uiSettings, DataManager dataManager,
KeymapManager keymapManager, final Application application, final String[] commandLineArgs) {
public IdeFrameImpl(ApplicationInfoEx applicationInfoEx, ActionManagerEx actionManager, UISettings uiSettings, DataManager dataManager,
final Application application, final String[] commandLineArgs) {
super(applicationInfoEx.getFullApplicationName());
myRootPane = new IdeRootPane(actionManager, uiSettings, dataManager, keymapManager, application, commandLineArgs);
myRootPane = new IdeRootPane(actionManager, uiSettings, dataManager, application, commandLineArgs);
setRootPane(myRootPane);
AppUIUtil.updateFrameIcon(this);
@@ -100,7 +99,7 @@ public class IdeFrameImpl extends JFrame implements IdeFrame, DataProvider {
}
private boolean isThereActiveFrame() {
private static boolean isThereActiveFrame() {
Frame[] all = Frame.getFrames();
for (Frame each : all) {
if (each.isActive()) {
@@ -135,7 +134,7 @@ public class IdeFrameImpl extends JFrame implements IdeFrame, DataProvider {
* !!!!! CAUTION !!!!!
*/
public final void setDefaultFocusableComponent(final JComponent component) {
myLayoutFocusTraversalPolicy.setOverridenDefaultComponent(component);
LayoutFocusTraversalPolicyExt.setOverridenDefaultComponent(component);
}
/**
@@ -20,13 +20,15 @@ import com.intellij.ide.impl.DataManagerImpl;
import com.intellij.ide.ui.UISettings;
import com.intellij.ide.ui.UISettingsListener;
import com.intellij.ide.ui.customization.CustomActionsSchema;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
import com.intellij.openapi.actionSystem.impl.ActionMenu;
import com.intellij.openapi.actionSystem.impl.MenuItemPresentationFactory;
import com.intellij.openapi.actionSystem.impl.WeakTimerListener;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.keymap.KeymapManager;
import com.intellij.openapi.util.Disposer;
import javax.swing.*;
import java.awt.*;
@@ -44,13 +46,12 @@ public class IdeMenuBar extends JMenuBar{
private ArrayList<AnAction> myNewVisibleActions;
private final MenuItemPresentationFactory myPresentationFactory;
private final DataManager myDataManager;
private final ActionManager myActionManager;
private UISettingsListener myUISettingsListener;
private final ActionManagerEx myActionManager;
private final Disposable myDisposable = Disposer.newDisposable();
public IdeMenuBar(ActionManager actionManager, DataManager dataManager, KeymapManager keymapManager){
public IdeMenuBar(ActionManagerEx actionManager, DataManager dataManager){
myActionManager = actionManager;
myTimerListener=new MyTimerListener();
//(DefaultActionGroup)actionManager.getAction(IdeActions.GROUP_MAIN_MENU);
myVisibleActions = new ArrayList<AnAction>();
myNewVisibleActions = new ArrayList<AnAction>();
myPresentationFactory = new MenuItemPresentationFactory();
@@ -64,22 +65,22 @@ public class IdeMenuBar extends JMenuBar{
super.addNotify();
updateMenuActions();
// Add updater for menus
final ActionManagerEx actionManager=(ActionManagerEx)myActionManager;
actionManager.addTimerListener(1000,new WeakTimerListener(actionManager,myTimerListener));
myUISettingsListener = new UISettingsListener() {
myActionManager.addTimerListener(1000,new WeakTimerListener(myActionManager,myTimerListener));
UISettingsListener UISettingsListener = new UISettingsListener() {
public void uiSettingsChanged(final UISettings source) {
updateMnemonicsVisibility();
myPresentationFactory.reset();
}
};
UISettings.getInstance().addUISettingsListener(myUISettingsListener);
UISettings.getInstance().addUISettingsListener(UISettingsListener, myDisposable);
Disposer.register(ApplicationManager.getApplication(), myDisposable);
}
/**
* Invoked when enclosed frame is being disposed.
*/
public void removeNotify(){
UISettings.getInstance().removeUISettingsListener(myUISettingsListener);
Disposer.dispose(myDisposable);
super.removeNotify();
}
@@ -92,7 +93,7 @@ public class IdeMenuBar extends JMenuBar{
if (!myNewVisibleActions.equals(myVisibleActions)) {
// should rebuild UI
final boolean changeBarVisibility = myNewVisibleActions.size() == 0 || myVisibleActions.size() == 0;
final boolean changeBarVisibility = myNewVisibleActions.isEmpty() || myVisibleActions.isEmpty();
final ArrayList<AnAction> temp = myVisibleActions;
myVisibleActions = myNewVisibleActions;
@@ -172,7 +173,7 @@ public class IdeMenuBar extends JMenuBar{
}
public void run(){
if(!IdeMenuBar.this.isShowing()){
if(!isShowing()){
return;
}
@@ -26,11 +26,12 @@ import com.intellij.ide.ui.UISettings;
import com.intellij.ide.ui.UISettingsListener;
import com.intellij.ide.ui.customization.CustomActionsSchema;
import com.intellij.notification.impl.IdeNotificationArea;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.keymap.KeymapManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Disposer;
@@ -84,9 +85,10 @@ public class IdeRootPane extends JRootPane implements UISettingsListener {
private final Application myApplication;
private MemoryUsagePanel myMemoryWidget;
private StatusBarCustomComponentFactory[] myStatusBarCustomComponentFactories;
private final StatusBarCustomComponentFactory[] myStatusBarCustomComponentFactories;
private final Disposable myDisposable= Disposer.newDisposable();
IdeRootPane(ActionManager actionManager, UISettings uiSettings, DataManager dataManager, KeymapManager keymapManager,
IdeRootPane(ActionManagerEx actionManager, UISettings uiSettings, DataManager dataManager,
final Application application, final String[] commandLineArgs){
myActionManager = actionManager;
myUISettings = uiSettings;
@@ -95,6 +97,7 @@ public class IdeRootPane extends JRootPane implements UISettingsListener {
myContentPane.add(myNorthPanel, BorderLayout.NORTH);
myStatusBarCustomComponentFactories = application.getExtensions(StatusBarCustomComponentFactory.EP_NAME);
myApplication = application;
createStatusBar();
updateStatusBarVisibility();
@@ -102,7 +105,7 @@ public class IdeRootPane extends JRootPane implements UISettingsListener {
myContentPane.add(myStatusBar, BorderLayout.SOUTH);
myUISettingsListener=new MyUISettingsListenerImpl();
setJMenuBar(new IdeMenuBar(myActionManager, dataManager, keymapManager));
setJMenuBar(new IdeMenuBar(actionManager, dataManager));
final Ref<Boolean> willOpenProject = new Ref<Boolean>(Boolean.FALSE);
final AppLifecycleListener lifecyclePublisher = application.getMessageBus().syncPublisher(AppLifecycleListener.TOPIC);
@@ -120,7 +123,7 @@ public class IdeRootPane extends JRootPane implements UISettingsListener {
myGlassPaneInitialized = true;
myGlassPane.setVisible(false);
myApplication = application;
Disposer.register(application, myDisposable);
}
@@ -134,14 +137,14 @@ public class IdeRootPane extends JRootPane implements UISettingsListener {
*/
public final void addNotify(){
super.addNotify();
myUISettings.addUISettingsListener(myUISettingsListener);
myUISettings.addUISettingsListener(myUISettingsListener, myDisposable);
}
/**
* Invoked when enclosed frame is being disposed.
*/
public final void removeNotify(){
myUISettings.removeUISettingsListener(myUISettingsListener);
Disposer.dispose(myDisposable);
super.removeNotify();
}
@@ -213,7 +216,7 @@ public class IdeRootPane extends JRootPane implements UISettingsListener {
}
private void createStatusBar() {
myUISettings.addUISettingsListener(this);
myUISettings.addUISettingsListener(this, myApplication);
myStatusBar = new IdeStatusBarImpl();
@@ -223,7 +226,7 @@ public class IdeRootPane extends JRootPane implements UISettingsListener {
myStatusBar.addWidget(new IdeMessagePanel(MessagePool.getInstance()), "before Memory");
if (myStatusBarCustomComponentFactories != null) {
for (final StatusBarCustomComponentFactory componentFactory : myStatusBarCustomComponentFactories) {
for (final StatusBarCustomComponentFactory<JComponent> componentFactory : myStatusBarCustomComponentFactories) {
final JComponent c = componentFactory.createComponent(myStatusBar);
myStatusBar.addWidget(new CustomStatusBarWidget() {
public JComponent getComponent() {
@@ -17,16 +17,20 @@ package com.intellij.openapi.wm.impl;
import com.intellij.ide.ui.UISettings;
import com.intellij.ide.ui.UISettingsListener;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.keymap.Keymap;
import com.intellij.openapi.keymap.KeymapManagerListener;
import com.intellij.openapi.keymap.ex.KeymapManagerEx;
import com.intellij.openapi.keymap.ex.WeakKeymapManagerListener;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.wm.ToolWindowAnchor;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
@@ -35,7 +39,6 @@ import java.util.List;
final class Stripe extends JPanel{
private final int myAnchor;
private final ArrayList<StripeButton> myButtons = new ArrayList<StripeButton>();
private final MyKeymapManagerListener myKeymapManagerListener;
private final WeakKeymapManagerListener myWeakKeymapManagerListener;
private final MyUISettingsListener myUISettingsListener;
@@ -47,14 +50,14 @@ final class Stripe extends JPanel{
private LayoutData myLastLayoutData;
private boolean myFinishingDrop;
static final int DROP_DISTANCE_SENSIVITY = 20;
private final Disposable myDisposable = Disposer.newDisposable();
Stripe(final int anchor, ToolWindowManagerImpl manager){
super(new GridBagLayout());
//setBackground(new Color(247, 243, 239));
myManager = manager;
myAnchor = anchor;
myKeymapManagerListener=new MyKeymapManagerListener();
myWeakKeymapManagerListener=new WeakKeymapManagerListener(KeymapManagerEx.getInstanceEx(),myKeymapManagerListener);
myWeakKeymapManagerListener=new WeakKeymapManagerListener(KeymapManagerEx.getInstanceEx(), new MyKeymapManagerListener());
myUISettingsListener=new MyUISettingsListener();
}
@@ -66,7 +69,7 @@ final class Stripe extends JPanel{
updateText();
updateState();
KeymapManagerEx.getInstanceEx().addKeymapManagerListener(myWeakKeymapManagerListener);
UISettings.getInstance().addUISettingsListener(myUISettingsListener);
UISettings.getInstance().addUISettingsListener(myUISettingsListener,myDisposable);
}
/**
@@ -74,11 +77,11 @@ final class Stripe extends JPanel{
*/
public void removeNotify(){
KeymapManagerEx.getInstanceEx().removeKeymapManagerListener(myWeakKeymapManagerListener);
UISettings.getInstance().removeUISettingsListener(myUISettingsListener);
Disposer.dispose(myDisposable);
super.removeNotify();
}
void addButton(final StripeButton button,final Comparator comparator){
void addButton(final StripeButton button,final Comparator<StripeButton> comparator){
myPrefSize = null;
myButtons.add(button);
Collections.sort(myButtons,comparator);
@@ -21,7 +21,6 @@ import com.intellij.ide.ui.LafManagerListener;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.KeyboardShortcut;
import com.intellij.openapi.actionSystem.Shortcut;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.components.ProjectComponent;
@@ -114,16 +113,14 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements
@NonNls private static final String EXTENDED_STATE_ATTR = "extended-state";
private final Application myApp;
private final Set<String> myRestoredToolWindowIds = new HashSet<String>();
private final FileEditorManager myFileEditorManager;
private final Set<String> myRestoredToolWindowIds = new java.util.HashSet<String>();
private FileEditorManager myFileEditorManager;
private Map<String, Balloon> myWindow2Balloon = new HashMap<String, Balloon>();
private final Map<String, Balloon> myWindow2Balloon = new HashMap<String, Balloon>();
private KeyState myCurrentState = KeyState.waiting;
private Alarm myWaiterForSecondPress = new Alarm();
private Runnable mySecondPressRunnable = new Runnable() {
private final Alarm myWaiterForSecondPress = new Alarm();
private final Runnable mySecondPressRunnable = new Runnable() {
public void run() {
if (myCurrentState != KeyState.hold) {
resetHoldState();
@@ -138,8 +135,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements
/**
* invoked by reflection
*/
public ToolWindowManagerImpl(final Project project, WindowManagerEx windowManagerEx, final Application app, final FileEditorManager fem) {
myApp = app;
public ToolWindowManagerImpl(final Project project, WindowManagerEx windowManagerEx, final FileEditorManager fem) {
myProject = project;
myWindowManager = windowManagerEx;
myFileEditorManager = fem;
@@ -1513,7 +1509,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements
* @see com.intellij.openapi.wm.impl.ToolWindowsPane#createAddButtonCmd
*/
private void appendAddButtonCmd(final StripeButton button, final WindowInfoImpl info, final List<FinalizableCommand> commandsList) {
final Comparator comparator = myLayout.comparator(info.getAnchor());
final Comparator<StripeButton> comparator = myLayout.comparator(info.getAnchor());
final CommandProcessor commandProcessor = myWindowManager.getCommandProcessor();
final FinalizableCommand command = myToolWindowsPane.createAddButtonCmd(button, info, comparator, commandProcessor);
commandsList.add(command);
@@ -17,9 +17,11 @@ package com.intellij.openapi.wm.impl;
import com.intellij.ide.ui.UISettings;
import com.intellij.ide.ui.UISettingsListener;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.ui.Splitter;
import com.intellij.openapi.ui.ThreeComponentsSplitter;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.wm.ToolWindow;
@@ -78,6 +80,7 @@ final class ToolWindowsPane extends JLayeredPane {
private final ToolWindowManagerImpl myManager;
private boolean myStripesOverlayed;
private final Disposable myDisposable = Disposer.newDisposable();
ToolWindowsPane(final IdeFrameImpl frame, ToolWindowManagerImpl manager){
myManager = manager;
@@ -206,14 +209,14 @@ final class ToolWindowsPane extends JLayeredPane {
*/
public final void addNotify(){
super.addNotify();
UISettings.getInstance().addUISettingsListener(myUISettingsListener);
UISettings.getInstance().addUISettingsListener(myUISettingsListener,myDisposable);
}
/**
* Invoked when enclosed frame is being disposed.
*/
public final void removeNotify(){
UISettings.getInstance().removeUISettingsListener(myUISettingsListener);
Disposer.dispose(myDisposable);
super.removeNotify();
}
@@ -225,7 +228,7 @@ final class ToolWindowsPane extends JLayeredPane {
* @param comparator which is used to sort buttons within the stripe.
* @param finishCallBack invoked when the command is completed.
*/
final FinalizableCommand createAddButtonCmd(final StripeButton button,final WindowInfoImpl info,final Comparator comparator,final Runnable finishCallBack){
final FinalizableCommand createAddButtonCmd(final StripeButton button,final WindowInfoImpl info,final Comparator<StripeButton> comparator,final Runnable finishCallBack){
final WindowInfoImpl copiedInfo=info.copy();
myId2Button.put(copiedInfo.getId(),button);
myButton2Info.put(button,copiedInfo);
@@ -297,7 +300,7 @@ final class ToolWindowsPane extends JLayeredPane {
return new RemoveDockedComponentCmd(info,dirtyMode,finishCallBack);
}
else {
return new RemoveSplitAndDockedComponentCmd(info, sideInfo, dirtyMode, finishCallBack);
return new RemoveSplitAndDockedComponentCmd(info, dirtyMode, finishCallBack);
}
}else if(info.isSliding()){
return new RemoveSlidingComponentCmd(decorator,info,dirtyMode,finishCallBack);
@@ -531,11 +534,11 @@ final class ToolWindowsPane extends JLayeredPane {
}
static interface Resizer {
interface Resizer {
void setSize(int size);
abstract static class Splitter implements Resizer {
abstract class Splitter implements Resizer {
ThreeComponentsSplitter mySplitter;
Splitter(ThreeComponentsSplitter splitter) {
@@ -563,7 +566,7 @@ final class ToolWindowsPane extends JLayeredPane {
}
}
abstract static class LayeredPane implements Resizer {
abstract class LayeredPane implements Resizer {
Component myComponent;
protected LayeredPane(Component component) {
@@ -783,9 +786,9 @@ final class ToolWindowsPane extends JLayeredPane {
private final class AddToolStripeButtonCmd extends FinalizableCommand{
private final StripeButton myButton;
private final WindowInfoImpl myInfo;
private final Comparator myComparator;
private final Comparator<StripeButton> myComparator;
public AddToolStripeButtonCmd(final StripeButton button,final WindowInfoImpl info,final Comparator comparator,final Runnable finishCallBack){
public AddToolStripeButtonCmd(final StripeButton button,final WindowInfoImpl info,final Comparator<StripeButton> comparator,final Runnable finishCallBack){
super(finishCallBack);
myButton=button;
myInfo=info;
@@ -871,13 +874,13 @@ final class ToolWindowsPane extends JLayeredPane {
private final class RemoveSplitAndDockedComponentCmd extends FinalizableCommand {
private final WindowInfoImpl myInfo;
private final WindowInfoImpl mySideInfo;
private final boolean myDirtyMode;
private RemoveSplitAndDockedComponentCmd(final WindowInfoImpl info, final WindowInfoImpl sideInfo, boolean dirtyMode, final Runnable finishCallBack) {
private RemoveSplitAndDockedComponentCmd(final WindowInfoImpl info,
boolean dirtyMode,
final Runnable finishCallBack) {
super(finishCallBack);
myInfo = info;
mySideInfo = sideInfo;
myDirtyMode = dirtyMode;
}
@@ -1034,12 +1037,12 @@ final class ToolWindowsPane extends JLayeredPane {
* These images are used to perform animated showing and hiding of components.
* They are the member for performance reason.
*/
private SoftReference myBottomImageRef;
private SoftReference myTopImageRef;
private SoftReference<BufferedImage> myBottomImageRef;
private SoftReference<BufferedImage> myTopImageRef;
public MyLayeredPane(final JComponent splitter) {
myBottomImageRef=new SoftReference(null);
myTopImageRef=new SoftReference(null);
myBottomImageRef=new SoftReference<BufferedImage>(null);
myTopImageRef=new SoftReference<BufferedImage>(null);
setOpaque(true);
setBackground(Color.gray);
add(splitter,JLayeredPane.DEFAULT_LAYER);
@@ -1053,7 +1056,7 @@ final class ToolWindowsPane extends JLayeredPane {
*/
public final Image getBottomImage(){
LOG.assertTrue(UISettings.getInstance().ANIMATE_WINDOWS);
BufferedImage image=(BufferedImage)myBottomImageRef.get();
BufferedImage image= myBottomImageRef.get();
if(
image==null ||
image.getWidth(null) < getWidth() || image.getHeight(null) < getHeight()
@@ -1068,7 +1071,7 @@ final class ToolWindowsPane extends JLayeredPane {
// is MUCH faster.
image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
}
myBottomImageRef=new SoftReference(image);
myBottomImageRef=new SoftReference<BufferedImage>(image);
}
return image;
}
@@ -1079,7 +1082,7 @@ final class ToolWindowsPane extends JLayeredPane {
*/
public final Image getTopImage(){
LOG.assertTrue(UISettings.getInstance().ANIMATE_WINDOWS);
BufferedImage image=(BufferedImage)myTopImageRef.get();
BufferedImage image= myTopImageRef.get();
if(
image==null ||
image.getWidth(null) < getWidth() || image.getHeight(null) < getHeight()
@@ -1094,7 +1097,7 @@ final class ToolWindowsPane extends JLayeredPane {
// is MUCH faster.
image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
}
myTopImageRef=new SoftReference(image);
myTopImageRef=new SoftReference<BufferedImage>(image);
}
return image;
}
@@ -1112,31 +1115,30 @@ final class ToolWindowsPane extends JLayeredPane {
// Resize component at the DEFAULT layer. It should be only on component in that layer
Component[] components=getComponentsInLayer(JLayeredPane.DEFAULT_LAYER.intValue());
LOG.assertTrue(components.length<=1);
for(int i=0;i<components.length;i++){
final Component component=components[i];
component.setBounds(0,0,getWidth(),getHeight());
for (final Component component : components) {
component.setBounds(0, 0, getWidth(), getHeight());
}
// Resize components at the PALETTE layer
components=getComponentsInLayer(JLayeredPane.PALETTE_LAYER.intValue());
for(int i=0;i<components.length;i++){
final Component component=components[i];
for (final Component component : components) {
if (!(component instanceof InternalDecorator)) {
continue;
}
final WindowInfoImpl info=myDecorator2Info.get(component);
final WindowInfoImpl info = myDecorator2Info.get(component);
// In normal situation info is not null. But sometimes Swing sends resize
// event to removed component. See SCR #19566.
if(info == null){
if (info == null) {
continue;
}
final float weight;
if(ToolWindowAnchor.TOP==info.getAnchor()||ToolWindowAnchor.BOTTOM==info.getAnchor()){
weight=(float)component.getHeight()/(float)getHeight();
}else{
weight=(float)component.getWidth()/(float)getWidth();
if (ToolWindowAnchor.TOP == info.getAnchor() || ToolWindowAnchor.BOTTOM == info.getAnchor()) {
weight = (float)component.getHeight() / (float)getHeight();
}
setBoundsInPaletteLayer(component,info.getAnchor(),weight);
else {
weight = (float)component.getWidth() / (float)getWidth();
}
setBoundsInPaletteLayer(component, info.getAnchor(), weight);
}
validate();
repaint();
@@ -20,13 +20,12 @@ import com.intellij.ide.DataManager;
import com.intellij.ide.IdeEventQueue;
import com.intellij.ide.impl.DataManagerImpl;
import com.intellij.ide.ui.UISettings;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.ex.ActionManagerEx;
import com.intellij.openapi.application.ApplicationInfo;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ex.ApplicationInfoEx;
import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.keymap.KeymapManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.util.Disposer;
@@ -118,9 +117,8 @@ public final class WindowManagerImpl extends WindowManagerEx implements Applicat
private final WindowAdapter myActivationListener;
private final ApplicationInfoEx myApplicationInfoEx;
private final DataManager myDataManager;
private final ActionManager myActionManager;
private final ActionManagerEx myActionManager;
private final UISettings myUiSettings;
private final KeymapManager myKeymapManager;
/**
* invoked by reflection
@@ -128,18 +126,15 @@ public final class WindowManagerImpl extends WindowManagerEx implements Applicat
* @param applicationInfoEx
* @param actionManager
* @param uiSettings
* @param keymapManager
*/
public WindowManagerImpl(DataManager dataManager,
ApplicationInfoEx applicationInfoEx,
ActionManager actionManager,
UISettings uiSettings,
KeymapManager keymapManager) {
ApplicationInfoEx applicationInfoEx,
ActionManagerEx actionManager,
UISettings uiSettings) {
myApplicationInfoEx = applicationInfoEx;
myDataManager = dataManager;
myActionManager = actionManager;
myUiSettings = uiSettings;
myKeymapManager = keymapManager;
if (myDataManager instanceof DataManagerImpl) {
((DataManagerImpl)myDataManager).setWindowManager(this);
}
@@ -180,7 +175,7 @@ public final class WindowManagerImpl extends WindowManagerEx implements Applicat
public void showFrame(final String[] args) {
IdeEventQueue.getInstance().setWindowManager(this);
final IdeFrameImpl frame = new IdeFrameImpl(myApplicationInfoEx, myActionManager, myUiSettings, myDataManager, myKeymapManager,
final IdeFrameImpl frame = new IdeFrameImpl(myApplicationInfoEx, myActionManager, myUiSettings, myDataManager,
ApplicationManager.getApplication(), args);
myProject2Frame.put(null, frame);
if (myFrameBounds != null) {
@@ -270,7 +265,7 @@ public final class WindowManagerImpl extends WindowManagerEx implements Applicat
setAlphaMode(window, ratio);
}
private void setAlphaMode(Window window, float ratio) {
private static void setAlphaMode(Window window, float ratio) {
try {
if (SystemInfo.isMacOSLeopard) {
if (window instanceof JWindow) {
@@ -407,7 +402,7 @@ public final class WindowManagerImpl extends WindowManagerEx implements Applicat
return frame;
}
private IdeFrameImpl tryToFindTheOnlyFrame() {
private static IdeFrameImpl tryToFindTheOnlyFrame() {
IdeFrameImpl candidate = null;
final Frame[] all = Frame.getFrames();
for (Frame each : all) {
@@ -432,16 +427,15 @@ public final class WindowManagerImpl extends WindowManagerEx implements Applicat
public IdeFrame getIdeFrame(final Project project) {
if (project != null) {
return getFrame(project);
} else {
final Window window = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
final Component parent = UIUtil.findUltimateParent(window);
if (parent instanceof IdeFrame) return (IdeFrame)parent;
}
final Window window = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
final Component parent = UIUtil.findUltimateParent(window);
if (parent instanceof IdeFrame) return (IdeFrame)parent;
final Frame[] frames = Frame.getFrames();
for (Frame each : frames) {
if (each instanceof IdeFrame) {
return (IdeFrame)each;
}
final Frame[] frames = Frame.getFrames();
for (Frame each : frames) {
if (each instanceof IdeFrame) {
return (IdeFrame)each;
}
}
@@ -459,8 +453,8 @@ public final class WindowManagerImpl extends WindowManagerEx implements Applicat
frame.setProject(project);
}
else {
frame = new IdeFrameImpl((ApplicationInfoEx)ApplicationInfo.getInstance(), ActionManager.getInstance(), UISettings.getInstance(),
DataManager.getInstance(), KeymapManager.getInstance(), ApplicationManager.getApplication(), ArrayUtil.EMPTY_STRING_ARRAY);
frame = new IdeFrameImpl((ApplicationInfoEx)ApplicationInfo.getInstance(), ActionManagerEx.getInstanceEx(), UISettings.getInstance(),
DataManager.getInstance(), ApplicationManager.getApplication(), ArrayUtil.EMPTY_STRING_ARRAY);
if (myFrameBounds != null) {
frame.setBounds(myFrameBounds);
}