mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-80056 Column selection mode improvement
avoid leaking Editor
This commit is contained in:
+30
-4
@@ -15,19 +15,24 @@
|
||||
*/
|
||||
package com.intellij.openapi.editor.impl;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.ex.AnActionListener;
|
||||
import com.intellij.openapi.components.ApplicationComponent;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.EditorFactory;
|
||||
import com.intellij.openapi.editor.EditorLastActionTracker;
|
||||
import com.intellij.openapi.editor.event.EditorEventMulticaster;
|
||||
import com.intellij.openapi.editor.event.EditorMouseEvent;
|
||||
import com.intellij.openapi.editor.event.EditorMouseListener;
|
||||
import com.intellij.openapi.editor.event.*;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class EditorLastActionTrackerImpl extends EditorLastActionTracker implements ApplicationComponent, AnActionListener, EditorMouseListener {
|
||||
public class EditorLastActionTrackerImpl extends EditorLastActionTracker implements ApplicationComponent,
|
||||
AnActionListener,
|
||||
EditorMouseListener {
|
||||
private static final Key<Boolean> DISPOSABLE_SET = Key.create("EditorLastActionTracker.dispose.handler.set");
|
||||
|
||||
private final ActionManager myActionManager;
|
||||
private final EditorEventMulticaster myEditorEventMulticaster;
|
||||
|
||||
@@ -67,6 +72,7 @@ public class EditorLastActionTrackerImpl extends EditorLastActionTracker impleme
|
||||
@Override
|
||||
public void beforeActionPerformed(AnAction action, DataContext dataContext, AnActionEvent event) {
|
||||
myCurrentEditor = CommonDataKeys.EDITOR.getData(dataContext);
|
||||
registerDisposeHandler(myCurrentEditor);
|
||||
if (myCurrentEditor != myLastEditor) {
|
||||
resetLastAction();
|
||||
}
|
||||
@@ -117,4 +123,24 @@ public class EditorLastActionTrackerImpl extends EditorLastActionTracker impleme
|
||||
myLastActionId = null;
|
||||
myLastEditor = null;
|
||||
}
|
||||
|
||||
private void registerDisposeHandler(final Editor editor) {
|
||||
if (!(editor instanceof EditorImpl)) {
|
||||
return;
|
||||
}
|
||||
EditorImpl editorImpl = (EditorImpl)editor;
|
||||
if (editorImpl.replace(DISPOSABLE_SET, null, Boolean.TRUE)) {
|
||||
Disposer.register(editorImpl.getDisposable(), new Disposable() {
|
||||
@Override
|
||||
public void dispose() {
|
||||
if (myCurrentEditor == editor) {
|
||||
myCurrentEditor = null;
|
||||
}
|
||||
if (myLastEditor == editor) {
|
||||
myLastEditor = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user