我怎样才能在Eclipse RCP应用程序禁用快速访问文本字段(How can I disable

2019-09-19 00:07发布

今天我改变了我的Eclipse IDE从3.7到4.2,我的插件项目在名为QuickAccess UI的状态栏的新功能。 但我不需要它,所以我怎么可以禁用此功能,因为我的按钮栏的位置发生了变化......

Answer 1:

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

安装该插件并重新启动Eclipse的。 快速访问自动隐藏。 否则,你有一个选项,隐藏窗口 - >隐藏快速访问。



Answer 2:

对于所有谁有同样的问题,似乎这一新功能是硬编码的,不能被禁用:/ https://bugs.eclipse.org/bugs/show_bug.cgi?id=362420



Answer 3:

这里有一个职位 ,显示了与方式CSS来隐藏它。 与Eclipse 4.3验证



Answer 4:

拉尔斯·沃格尔只是在他的博客报道“ 移植的Eclipse RCP 3.X应用到Eclipse 4.4 -现在没有QuickAccess箱 ”:

错误411821([ QuickAccess ]贡献SearchField通过片段或其它方式)现在来解决。
由于勒Brandstetter修改:

如果一个RCP应用程序不其模型提供QuickAccess元,比它是不可见的。 所以默认是没有QuickAcces,容易够吗? :)

见提交839ee2了解更多详情

提供“ QuickAccess通过”内部的E4应用模型片段“ org.eclipse.ui.ide.application ”。
这消除了“ QuickAccess从每一个无”“搜索字段org.eclipse.ui.ide.application ”。



Answer 5:

你也可以将其隐藏并使其发挥作用堪比如何使用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;
    }

}


文章来源: How can I disable Quick Access TextField in Eclipse RCP Application