Java 如何在Eclipse RCP应用程序中禁用快速访问文本字段

Java 如何在Eclipse RCP应用程序中禁用快速访问文本字段,java,eclipse,plugins,rcp,Java,Eclipse,Plugins,Rcp,今天,我将EclipseIDE从3.7更改为4.2,我的插件项目在UI的状态栏中有一个新功能,名为QuickAccess。但我不需要它,所以我如何才能禁用此功能,因为我的按钮栏的位置已更改 对于所有有相同问题的用户,此新功能似乎是硬编码的,无法禁用://转到帮助-->安装新软件 安装该插件并重新启动Eclipse。快速访问自动隐藏。 或者您可以选择隐藏窗口-->隐藏快速访问。刚刚在他的博客文章“”中报道: 现在已解决。 感谢勒内·布兰德施泰特: 如果RCP应用程序在其模型中不提供QuickA

今天,我将EclipseIDE从3.7更改为4.2,我的插件项目在UI的状态栏中有一个新功能,名为QuickAccess。但我不需要它,所以我如何才能禁用此功能,因为我的按钮栏的位置已更改

对于所有有相同问题的用户,此新功能似乎是硬编码的,无法禁用://

转到帮助-->安装新软件

安装该插件并重新启动Eclipse。快速访问自动隐藏。 或者您可以选择隐藏窗口-->隐藏快速访问。

刚刚在他的博客文章“”中报道:

现在已解决。
感谢勒内·布兰德施泰特:

如果RCP应用程序在其模型中不提供QuickAccess元素,则它将不可见。因此,默认设置为“无快速访问,足够简单?”:)

有关更多详细信息,请参阅

通过“
org.eclipse.ui.ide.application
”中的e4应用程序模型片段提供“
QuickAccess

这将从每个none“
org.eclipse.ui.ide.application
”中删除“
QuickAccess
”搜索字段


这显示了一种使用CSS隐藏它的方法。通过Eclipse4.3验证,您还可以将其隐藏并使其工作方式与Eclipse3.7中的工作方式类似:当用户按下ctrl+3时,将弹出快速访问功能(在Eclipse4.3中,ctrl+3快捷方式仍然可用)

可以添加到WorkbenchWindowVisor实现中的代码示例(适用于Eclipse4.3 rcp应用程序)


他们开始劝阻我这样做,我已经“偷看”了4.x版本,到目前为止没有一个版本让我高兴。我需要“黑客”3.x版本来改变一些RCP行为,而不是对4。。。快速访问不应该是硬编码的。请转到帮助-->安装新软件安装该插件并重新启动Eclipse。快速访问自动隐藏。或者,您可以选择隐藏窗口-->隐藏快速访问。默认情况下,最新的4.x版本(从4.4 M5开始)不应显示该“快速访问”功能。看见
private IHandlerActivation quickAccessHandlerActivation;

@Override
public void postWindowOpen() {
    hideQuickAccess();
}

private void hideQuickAccess() {
    IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    setQuickAccessVisible(window, false);

    final IHandlerService service = (IHandlerService) window.getService(IHandlerService.class);
    quickAccessHandlerActivation = service.activateHandler(QUICK_ACCESS_COMMAND_ID, new CustomQuickAccessHandler());
}

private void setQuickAccessVisible(IWorkbenchWindow window, boolean visible) {
    if (window instanceof WorkbenchWindow) {
        MTrimBar topTrim = ((WorkbenchWindow) window).getTopTrim();

        for (MTrimElement element : topTrim.getChildren()) {
            if (QUICK_ACCESS_ELEMENT_ID.equals(element.getElementId())) {
                element.setVisible(visible);
                if (visible) {
                    Composite control = (Composite) element.getWidget();
                    control.getChildren()[0].addFocusListener(new QuickAccessFocusListener());
                }
                break;
            }
        }
    }
}

private class QuickAccessFocusListener implements FocusListener {

    @Override
    public void focusGained(FocusEvent e) {
        //not interested
    }

    @Override
    public void focusLost(FocusEvent e) {
        ((Control) e.widget).removeFocusListener(this);
        hideQuickAccess();
    }

}

private class CustomQuickAccessHandler extends AbstractHandler {
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        final IHandlerService service = (IHandlerService) window.getService(IHandlerService.class);
        setQuickAccessVisible(window, true);
        if (quickAccessHandlerActivation != null) {
            service.deactivateHandler(quickAccessHandlerActivation);

            try {
                return service.executeCommand(QUICK_ACCESS_COMMAND_ID, null);
            } catch (NotDefinedException e) {

            } catch (NotEnabledException e) {

            } catch (NotHandledException e) {

            }
        }

        return null;
    }

}