To avoid memory leak from AWT implementation, unregister action with custom shortcut attached to root pane (IDEA-143990)

This commit is contained in:
Maxim.Mossienko
2015-08-17 17:04:32 +02:00
parent f4672e2777
commit b00e5ea35e
@@ -24,6 +24,7 @@ import com.intellij.find.FindSettings;
import com.intellij.find.actions.ShowUsagesAction;
import com.intellij.ide.util.scopeChooser.ScopeChooserCombo;
import com.intellij.lang.Language;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
@@ -647,7 +648,7 @@ public class FindDialog extends DialogWrapper {
pane.insertTab("Options", null, optionsPanel, null, 0);
pane.insertTab(PREVIEW_TITLE, null, myPreviewSplitter, null, RESULTS_PREVIEW_TAB_INDEX);
myContent = pane;
AnAction anAction = new AnAction() {
final AnAction anAction = new AnAction() {
@Override
public void actionPerformed(AnActionEvent e) {
int selectedIndex = myContent.getSelectedIndex();
@@ -656,7 +657,16 @@ public class FindDialog extends DialogWrapper {
};
final ShortcutSet shortcutSet = ActionManager.getInstance().getAction(IdeActions.ACTION_SWITCHER).getShortcutSet();
anAction.registerCustomShortcutSet(shortcutSet, getRootPane());
final JRootPane rootPane = getRootPane();
anAction.registerCustomShortcutSet(shortcutSet, rootPane);
Disposer.register(myDisposable, new Disposable() {
@Override
public void dispose() {
anAction.unregisterCustomShortcutSet(rootPane);
}
});
if (myPreviewResultsTabWasSelected) myContent.setSelectedIndex(RESULTS_PREVIEW_TAB_INDEX);
return pane.getComponent();