【问题标题】:How can I disable Quick Access TextField in Eclipse RCP Application如何在 Eclipse RCP 应用程序中禁用快速访问文本字段
【发布时间】:2014-05-09 15:03:46
【问题描述】:

今天我将 Eclipse IDE 从 3.7 更改为 4.2,并且我的插件项目在 UI 的状态栏中有一个名为 QuickAccess 的新功能。但是我不需要,怎么禁用这个功能,因为我的按钮栏的位置变了……

【问题讨论】:

  • 在最新的 4.x 版本(从 4.4 M5 开始)默认情况下,“快速访问”功能不应该可见。见my answer below

标签: java eclipse plugins rcp


【解决方案1】:

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

【讨论】:

  • 他们已经开始劝阻我使用这个 IDE
  • 我已经“窥视”了 4.x 版本,但到目前为止没有让我感到高兴。我需要“破解” 3.x 版本来改变一些 RCP 行为,而不是对 4 做同样的事情......快速访问不应该是硬编码的。
  • 转到帮助 --> 安装新软件 raw.github.com/atlanto/eclipse-4.x-filler/master/… 安装该插件并重新启动 Eclipse。快速访问自动隐藏。否则您可以选择隐藏窗口 --> 隐藏快速访问。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      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了解更多详情

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

      【讨论】:

        【解决方案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;
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 2023-03-24
          • 1970-01-01
          • 2011-05-02
          • 2010-11-27
          • 2011-01-05
          • 1970-01-01
          • 1970-01-01
          • 2020-10-29
          • 1970-01-01
          相关资源
          最近更新 更多