diff --git a/platform/platform-api/src/com/intellij/ide/ui/UISettings.java b/platform/platform-api/src/com/intellij/ide/ui/UISettings.java index 29bfcdc7b342..ac0ab5c2635b 100644 --- a/platform/platform-api/src/com/intellij/ide/ui/UISettings.java +++ b/platform/platform-api/src/com/intellij/ide/ui/UISettings.java @@ -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, 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, 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, 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; } diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java index 4df6aefd91bc..c9126d1b3371 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorHistoryManager.java @@ -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(){ diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.java index 98e916b4c89a..d6dc383d19f9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.java @@ -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); } diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java index 7c982186ad2f..d3a690c854d6 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java @@ -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() { diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/FloatingDecorator.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/FloatingDecorator.java index d985ae1da2dc..f247c1a09f70 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/FloatingDecorator.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/FloatingDecorator.java @@ -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(); } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java index b82168df8c62..00d126b01961 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java @@ -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); } /** diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java index 78d0432625cd..e36de4e1b339 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeMenuBar.java @@ -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 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(); myNewVisibleActions = new ArrayList(); 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 temp = myVisibleActions; myVisibleActions = myNewVisibleActions; @@ -172,7 +173,7 @@ public class IdeMenuBar extends JMenuBar{ } public void run(){ - if(!IdeMenuBar.this.isShowing()){ + if(!isShowing()){ return; } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java index d6ff7e350323..0ff89fa00856 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java @@ -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 willOpenProject = new Ref(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 componentFactory : myStatusBarCustomComponentFactories) { final JComponent c = componentFactory.createComponent(myStatusBar); myStatusBar.addWidget(new CustomStatusBarWidget() { public JComponent getComponent() { diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/Stripe.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/Stripe.java index e7938e9cddb0..dcdc87cd49f7 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/Stripe.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/Stripe.java @@ -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 myButtons = new ArrayList(); - 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 comparator){ myPrefSize = null; myButtons.add(button); Collections.sort(myButtons,comparator); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java index 05cbbb9831d2..737880a23d03 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowManagerImpl.java @@ -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 myRestoredToolWindowIds = new HashSet(); + private final FileEditorManager myFileEditorManager; - private final Set myRestoredToolWindowIds = new java.util.HashSet(); - private FileEditorManager myFileEditorManager; - - private Map myWindow2Balloon = new HashMap(); + private final Map myWindow2Balloon = new HashMap(); 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 commandsList) { - final Comparator comparator = myLayout.comparator(info.getAnchor()); + final Comparator comparator = myLayout.comparator(info.getAnchor()); final CommandProcessor commandProcessor = myWindowManager.getCommandProcessor(); final FinalizableCommand command = myToolWindowsPane.createAddButtonCmd(button, info, comparator, commandProcessor); commandsList.add(command); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowsPane.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowsPane.java index 60da5a703fa1..573077aa150c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowsPane.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowsPane.java @@ -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 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 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 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 myBottomImageRef; + private SoftReference myTopImageRef; public MyLayeredPane(final JComponent splitter) { - myBottomImageRef=new SoftReference(null); - myTopImageRef=new SoftReference(null); + myBottomImageRef=new SoftReference(null); + myTopImageRef=new SoftReference(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(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(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