Cómo mostrar el menú principal en Mac OS cuando una vista separada se centra?

Kildary Klein:

Tengo una aplicación Eclipse RCP, usando Eclipse 3.8, y en Mac OS se muestra la barra de menú principal sólo cuando se centra la ventana principal. Cuando se cambia el foco a una ventana individual, desaparece la barra de menús.

Por lo tanto, entiendo que Mac muestra el menú en función de la ventana activa, si la ventana no proporciona una barra de menú, se muestra nada.

En Eclipse el comportamiento es el mismo.

Ventana principal se centró: https://i.stack.imgur.com/4aRMa.png

Ventana independiente enfocada: https://i.stack.imgur.com/easMD.png

¿Hay alguna manera de configurar el menú principal, independientemente de la visión centrada?

Mario marinado:

Hemos encontrado una manera de hacer esto, pero usted tiene que diversificarse una copia local de SWT.

En primer lugar, se obtuvo la barra de menú de la ventana activa mesa de trabajo:

Menu menuBar = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().getMenuBar();

Si se establece directamente en la cáscara, usando .setMenuBar( menuBar )no va a funcionar, porque comprueba el padre del menú y una lanza IllegalArgumentException. Lo que tenía que crear un nuevo método sobre Decorations, que es una copia del original setMenuBarmétodo, menos la verificación de los padres:

public void setAdoptedMenuBar( Menu menu ) {
    checkWidget();
    if (menuBar == menu) return;
    if (menu != null) {
        if (menu.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
        if ((menu.style & SWT.BAR) == 0) error (SWT.ERROR_MENU_NOT_BAR);
    }
    menuBar = menu;
}

También hemos tenido que añadir un nuevo método sobre Shell, para asegurarse de que utiliza el nuevo método sobre Decorations. Es una copia de Shell.setMenuBar, con un cambio en la segunda línea.

public void setAdoptedMenuBar( Menu menu ) {
    checkWidget();
    super.setAdoptedMenuBar( menu );
    if (display.getActiveShell () == this) {
        display.setMenuBar (menuBar);
    }
}

Tener esos cambios en su lugar, podemos configurar la barra de menú de la ventana activa mesa de trabajo en la cáscara, con el nuevo método.

También añadimos un oyente disponer a nuestro caparazón, para asegurarse de que desenganchar el menú de la cáscara, para evitar su disposición:

 shell.addDisposeListener( event -> shell.setMenuBar( null ) );

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=362029&siteId=1
Recomendado
Clasificación