mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Project leak
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
+1
-8
@@ -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(){
|
||||
|
||||
+1
-2
@@ -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);
|
||||
}
|
||||
|
||||
+1
-6
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user