IntelliJ IDEA プラグインを作成しており、「autoscrollfromsource」機能をトリガーせずにプロジェクト ペインからファイルに移動しようとしています (オンになっていても)。
autoscrollfromsource を一時的に無効にしようとしました (そして後で再度有効にしました) が、この試みは成功しませんでした。
以下のコードでは、ファイルのロードに少し時間がかかるように見えますが、その時までに autoscrollfromsource は既に再度有効になっています。
private void navigateWithoutAutoscrollFromSource(final ProjectViewImpl projectView, BasePsiNode<? extends PsiElement> node) {
boolean wasAutoScrollFromSource = projectView.isAutoscrollFromSource(PROJECT_PANE);
if (wasAutoScrollFromSource) {
projectView.setAutoscrollFromSource(false, PROJECT_PANE);
}
// this navigation here should NOT trigger autoscrollfromsource!!
node.navigate(true);
if (wasAutoScrollFromSource) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
projectView.setAutoscrollFromSource(true, PROJECT_PANE);
}
});
}
}
autoscrollfromsource をトリガーせずにノードに移動するより良い方法はありますか?
プロのヒントをありがとう:)
更新 1
OpenFileDescriptor
ここで、コードを openapi クラスまでトレースします。
public void navigate(boolean requestFocus) {
if (!canNavigate()) {
throw new IllegalStateException("Navigation is not possible with null project");
}
if (!myFile.isDirectory() && navigateInEditor(myProject, requestFocus)) return;
navigateInProjectView();
}
navigate
基本的に、ソースからの自動スクロールをトリガーせずに、このメソッドを実行できるようにしたいと考えています。