autoscroll from sources: ensure selection updated on changing the state (IDEA-200258)

This commit is contained in:
Anna.Kozlova
2018-10-18 11:12:33 +02:00
parent beee1cd822
commit 4edb933d9d
@@ -20,8 +20,10 @@ import com.intellij.icons.AllIcons;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.ToggleAction;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
import com.intellij.openapi.project.DumbAware;
@@ -76,13 +78,24 @@ public abstract class AutoScrollFromSourceHandler implements Disposable {
connection.subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerListener() {
@Override
public void selectionChanged(@NotNull FileEditorManagerEvent event) {
final FileEditor editor = event.getNewEditor();
if (editor != null && myComponent.isShowing() && isAutoScrollEnabled()) {
myAlarm.cancelAllRequests();
myAlarm.addRequest(() -> selectElementFromEditor(editor), getAlarmDelay(), getModalityState());
}
selectInAlarm(event.getNewEditor());
}
});
updateCurrentSelection();
}
private void selectInAlarm(final FileEditor editor) {
if (editor != null && myComponent.isShowing() && isAutoScrollEnabled()) {
myAlarm.cancelAllRequests();
myAlarm.addRequest(() -> selectElementFromEditor(editor), getAlarmDelay(), getModalityState());
}
}
private void updateCurrentSelection() {
FileEditor selectedEditor = FileEditorManager.getInstance(myProject).getSelectedEditor();
if (selectedEditor != null) {
ApplicationManager.getApplication().invokeLater(() -> selectInAlarm(selectedEditor), ModalityState.NON_MODAL, myProject.getDisposed());
}
}
@Override
@@ -111,6 +124,7 @@ public abstract class AutoScrollFromSourceHandler implements Disposable {
@Override
public void setSelected(@NotNull final AnActionEvent event, final boolean flag) {
setAutoScrollEnabled(flag);
updateCurrentSelection();
}
}
}