From 4edb933d9dcbb27fd1a25e4d0763dcad3dad46b4 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Fri, 12 Oct 2018 22:25:22 +0200 Subject: [PATCH] autoscroll from sources: ensure selection updated on changing the state (IDEA-200258) --- .../ui/AutoScrollFromSourceHandler.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ui/AutoScrollFromSourceHandler.java b/platform/platform-api/src/com/intellij/ui/AutoScrollFromSourceHandler.java index 1a2f711a9195..f59e47bb6f00 100644 --- a/platform/platform-api/src/com/intellij/ui/AutoScrollFromSourceHandler.java +++ b/platform/platform-api/src/com/intellij/ui/AutoScrollFromSourceHandler.java @@ -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(); } } }