2

我正在编写一个 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

我将代码跟踪到 openapi 类OpenFileDescriptor,在这里:

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方法,而不会从源代码触发自动滚动。

4

1 回答 1

2

如果navigate(false)还不够。您可以监听FileEditorManager事件,并阻止您打开的编辑器成为选定的编辑器。

于 2013-12-16T15:52:26.110 回答