如何将按键重定向到基于Eclipse的应用程序中的另一个外壳?

问题描述

| 我正在努力使基于Eclipse的RCP应用程序中的EditorPart最大化,使其绝对全屏,不修剪,不菜单等。实际上,它是GEF编辑器。这有点骇人听闻,但确实可行:
GraphicalViewer viewer = (GraphicalViewer)getWorkbenchPart().getAdapter(GraphicalViewer.class);
        Control control = viewer.getControl();
        Composite oldParent = control.getParent();

        Shell shell = new Shell(SWT.APPLICATION_MODAL);
        shell.setFullScreen(true);
        shell.setMaximized(true);

        // Some code here to listen to Esc key to dispose Shell and return...

        shell.setLayout(new FillLayout());
        control.setParent(shell);
        shell.open();
基本上,它将GraphicalViewer控件的父级设置为新创建的最大化的Shell。按下Escape键会将控件返回到其原始父控件(为简洁起见,未显示代码)。 唯一不起作用的是接收为工作台声明并转发到EditorPart的全局按键(Del,Ctrl + Z,Ctrl + A)。我有什么办法可以挂接到这些文件中,或将它们从EditorPart重定向以将它们转发到GraphicalViewer? 提前致谢     

解决方法

简短的答案是您不能这样做。一旦您在工作台窗口之外重新查看该复合材料,它就完全崩溃了。系统未正确处理零件,因为未处理事件(例如激活,焦点,setBounds(*))。 唯一受支持的方法是使用一个仅包含编辑器区域的透视图打开一个新的Workbench窗口,并使用
org.eclipse.ui.application.IWorkbenchWindowConfigurer
扩展该窗口+透视组合的
org.eclipse.ui.application.WorkbenchWindowAdvisor.createWindowContents(Shell)
方法以隐藏所有不需要的修剪。 例如,在MyWorkbenchWindowAdvisor中:
public void createWindowContents(Shell shell) {
    if (isCreatingSpecialPerspective()) {
        final IWorkbenchWindowConfigurer config = getWindowConfigurer();
        config.setShowCoolBar(false);
        config.setShowFastViewBars(false);
        config.setShowMenuBar(false);
        config.setShowPerspectiveBar(false);
        config.setShowProgressIndicator(false);
        config.setShowStatusLine(false);
    }
    super.createWindowContents(shell);
}
另外,请访问http://code.google.com/p/eclipse-fullscreen/,其中包含有关运行具有全屏支持的RCP程序的EPL代码。     ,我的建议是尝试从另一个角度解决这个问题。定义您自己的键绑定方案,然后创建命令并使它们使用此方案,而不是侦听代码中的击键并对其执行操作。这意味着您不再需要侦听代码中的击键,而是通过这些击键执行的命令执行需要执行的任何操作。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...