如何在Eclipse RCP应用程序中禁用快速访问TextField

时间:2012-07-02 14:54:33

标签: java eclipse plugins rcp

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

5 个答案:

答案 0 :(得分:4)

对于所有遇到相同问题的人来说,这个新功能似乎是硬编码的,无法停用:/ https://bugs.eclipse.org/bugs/show_bug.cgi?id=362420

答案 1 :(得分:3)

转到帮助 - >安装新软件 https://raw.github.com/atlanto/eclipse-4.x-filler/master/pdt_tools.eclipse-4.x-filler.update/

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

答案 2 :(得分:1)

Here's a post显示了一种用CSS隐藏它的方法。用Eclipse 4.3验证

答案 3 :(得分:0)

Lars Vogel刚刚在他的博客文章“Porting Eclipse 3.x RCP application to Eclipse 4.4 – now without QuickAccess box”中报道:

Bug 411821 ([QuickAccess] Contribute SearchField through a fragment or other means) 现在已经解决了 感谢RenéBrandstetter:

  

如果RCP应用程序未在其模型中提供QuickAccess元素,则不会显示该元素。所以默认是没有QuickAcces,这很容易吗? :)

有关详细信息,请参阅commit 839ee2

  

通过“QuickAccess”内的e4应用程序模型片段提供“org.eclipse.ui.ide.application”。
  这会从每个“QuickAccess”中删除“org.eclipse.ui.ide.application”搜索字段。

答案 4 :(得分:0)

你也可以隐藏它并使它的工作方式与它在Eclipse3.7中的工作方式相当:当用户按下ctrl + 3快速访问功能弹出时(在Eclipse4.3中,ctrl + 3快捷键仍然可用)。

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

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;
    }

}