Skip to content

Commit

Permalink
Reimplement window.menuBarVisibility preference
Browse files Browse the repository at this point in the history
  - Uses same menu widget for compact and visible settings
  - Cleans up event handling in browser and Electron
      MainMenuContributions and MainMenuFactories
  • Loading branch information
Colin Grant committed Jan 18, 2022
1 parent bc21e49 commit c1391a0
Show file tree
Hide file tree
Showing 16 changed files with 463 additions and 335 deletions.
2 changes: 1 addition & 1 deletion examples/api-tests/src/menus.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ describe('Menus', function () {
const container = window.theia.container;
const shell = container.get(ApplicationShell);
const menuBarContribution = container.get(BrowserMenuBarContribution);
const menuBar = /** @type {import('@theia/core/lib/browser/menu/browser-menu-plugin').MenuBarWidget} */ (menuBarContribution.menuBar);
const menuBar = /** @type {import('@theia/core/lib/browser/menu/browser-menu-plugin').MenuBarWidget} */ (menuBarContribution.browserMenu);
const pluginService = container.get(HostedPluginSupport);
const menus = container.get(MenuModelRegistry);
const commands = container.get(CommandRegistry);
Expand Down
86 changes: 8 additions & 78 deletions packages/core/src/browser/common-frontend-contribution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import debounce = require('lodash.debounce');
import { injectable, inject, optional } from 'inversify';
import { MAIN_MENU_BAR, SETTINGS_MENU, MenuContribution, MenuModelRegistry, ACCOUNTS_MENU } from '../common/menu';
import { SETTINGS_MENU, MenuContribution, MenuModelRegistry, ACCOUNTS_MENU } from '../common/menu';
import { KeybindingContribution, KeybindingRegistry } from './keybinding';
import { FrontendApplication, FrontendApplicationContribution, OnWillStopAction } from './frontend-application';
import { CommandContribution, CommandRegistry, Command } from '../common/command';
Expand Down Expand Up @@ -59,44 +59,11 @@ import { ConfirmDialog, confirmExit, Dialog } from './dialogs';
import { WindowService } from './window/window-service';
import { FrontendApplicationConfigProvider } from './frontend-application-config-provider';
import { DecorationStyle } from './decoration-style';
import { CommonMenus } from './menu/main-menus';
import { SHOW_MENU_BAR as REAL_SHOW_MENU_BAR } from './menu/browser-menu-plugin';

export namespace CommonMenus {

export const FILE = [...MAIN_MENU_BAR, '1_file'];
export const FILE_NEW = [...FILE, '1_new'];
export const FILE_OPEN = [...FILE, '2_open'];
export const FILE_SAVE = [...FILE, '3_save'];
export const FILE_AUTOSAVE = [...FILE, '4_autosave'];
export const FILE_SETTINGS = [...FILE, '5_settings'];
export const FILE_SETTINGS_SUBMENU = [...FILE_SETTINGS, '1_settings_submenu'];
export const FILE_SETTINGS_SUBMENU_OPEN = [...FILE_SETTINGS_SUBMENU, '1_settings_submenu_open'];
export const FILE_SETTINGS_SUBMENU_THEME = [...FILE_SETTINGS_SUBMENU, '2_settings_submenu_theme'];
export const FILE_CLOSE = [...FILE, '6_close'];

export const EDIT = [...MAIN_MENU_BAR, '2_edit'];
export const EDIT_UNDO = [...EDIT, '1_undo'];
export const EDIT_CLIPBOARD = [...EDIT, '2_clipboard'];
export const EDIT_FIND = [...EDIT, '3_find'];

export const VIEW = [...MAIN_MENU_BAR, '4_view'];
export const VIEW_PRIMARY = [...VIEW, '0_primary'];
export const VIEW_APPEARANCE = [...VIEW, '1_appearance'];
export const VIEW_APPEARANCE_SUBMENU = [...VIEW_APPEARANCE, '1_appearance_submenu'];
export const VIEW_APPEARANCE_SUBMENU_SCREEN = [...VIEW_APPEARANCE_SUBMENU, '2_appearance_submenu_screen'];
export const VIEW_APPEARANCE_SUBMENU_BAR = [...VIEW_APPEARANCE_SUBMENU, '3_appearance_submenu_bar'];
export const VIEW_EDITOR_SUBMENU = [...VIEW_APPEARANCE, '2_editor_submenu'];
export const VIEW_EDITOR_SUBMENU_SPLIT = [...VIEW_EDITOR_SUBMENU, '1_editor_submenu_split'];
export const VIEW_EDITOR_SUBMENU_ORTHO = [...VIEW_EDITOR_SUBMENU, '2_editor_submenu_ortho'];
export const VIEW_VIEWS = [...VIEW, '2_views'];
export const VIEW_LAYOUT = [...VIEW, '3_layout'];
export const VIEW_TOGGLE = [...VIEW, '4_toggle'];

export const SETTINGS_OPEN = [...SETTINGS_MENU, '1_settings_open'];
export const SETTINGS__THEME = [...SETTINGS_MENU, '2_settings_theme'];
// last menu item
export const HELP = [...MAIN_MENU_BAR, '9_help'];

}
/** @deprecated @since 1.22 import from @theia/core/lib/browser/menu/main-menus */
export { CommonMenus };

export namespace CommonCommands {

Expand Down Expand Up @@ -251,12 +218,6 @@ export namespace CommonCommands {
category: VIEW_CATEGORY,
label: 'Open View...'
});
export const SHOW_MENU_BAR = Command.toDefaultLocalizedCommand({
id: 'window.menuBarVisibility',
category: VIEW_CATEGORY,
label: 'Show Menu Bar'
});

export const SAVE = Command.toDefaultLocalizedCommand({
id: 'core.save',
category: FILE_CATEGORY,
Expand Down Expand Up @@ -305,6 +266,9 @@ export namespace CommonCommands {
id: 'workbench.action.configureLanguage',
label: 'Configure Display Language'
});

/** @deprecated @since 1.22 import from @theia/core/lib/browser/menu/browser-menu-plugin instead */
export const SHOW_MENU_BAR = REAL_SHOW_MENU_BAR;
}

export const supportCut = browser.isNative || document.queryCommandSupported('cut');
Expand Down Expand Up @@ -464,22 +428,6 @@ export class CommonFrontendContribution implements FrontendApplicationContributi
this.updateThemeFromPreference(e.preferenceName);
break;
}
case 'window.menuBarVisibility': {
const { newValue } = e;
const mainMenuId = 'main-menu';
if (newValue === 'compact') {
this.shell.leftPanelHandler.addTopMenu({
id: mainMenuId,
iconClass: 'codicon codicon-menu',
title: nls.localizeByDefault('Application Menu'),
menuPath: ['menubar'],
order: 0,
});
} else {
app.shell.leftPanelHandler.removeTopMenu(mainMenuId);
}
break;
}
case 'workbench.sash.hoverDelay':
case 'workbench.sash.size': {
this.setSashProperties();
Expand Down Expand Up @@ -631,11 +579,6 @@ export class CommonFrontendContribution implements FrontendApplicationContributi
label: CommonCommands.COPY_PATH.label,
order: '1',
});
registry.registerMenuAction(CommonMenus.VIEW_APPEARANCE_SUBMENU_BAR, {
commandId: CommonCommands.SHOW_MENU_BAR.id,
label: nls.localizeByDefault('Toggle Menu Bar'),
order: '0'
});
registry.registerMenuAction(CommonMenus.HELP, {
commandId: CommonCommands.ABOUT_COMMAND.id,
label: CommonCommands.ABOUT_COMMAND.label,
Expand Down Expand Up @@ -840,19 +783,6 @@ export class CommonFrontendContribution implements FrontendApplicationContributi
isVisible: title => Boolean(title?.owner && this.shell.canToggleMaximized(title?.owner)),
execute: title => title?.owner && this.shell.toggleMaximized(title?.owner),
}));
commandRegistry.registerCommand(CommonCommands.SHOW_MENU_BAR, {
isEnabled: () => !isOSX,
isVisible: () => !isOSX,
execute: () => {
const menuBarVisibility = 'window.menuBarVisibility';
const visibility = this.preferences[menuBarVisibility];
if (visibility !== 'compact') {
this.preferenceService.updateValue(menuBarVisibility, 'compact');
} else {
this.preferenceService.updateValue(menuBarVisibility, 'classic');
}
}
});

commandRegistry.registerCommand(CommonCommands.SAVE, {
execute: () => this.shell.save({ formatType: FormatType.ON })
Expand Down
6 changes: 4 additions & 2 deletions packages/core/src/browser/core-preferences.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import { FrontendApplicationConfigProvider } from './frontend-application-config
import { isOSX } from '../common/os';
import { nls } from '../common/nls';

export const MENU_BAR_VISIBILITY = 'window.menuBarVisibility';

export const corePreferenceSchema: PreferenceSchema = {
'type': 'object',
properties: {
Expand Down Expand Up @@ -60,7 +62,7 @@ export const corePreferenceSchema: PreferenceSchema = {
default: 'code',
markdownDescription: nls.localizeByDefault('Controls the dispatching logic for key presses to use either `code` (recommended) or `keyCode`.')
},
'window.menuBarVisibility': {
[MENU_BAR_VISIBILITY]: {
type: 'string',
enum: ['classic', 'visible', 'hidden', 'compact'],
markdownEnumDescriptions: [
Expand Down Expand Up @@ -157,7 +159,7 @@ export interface CoreConfiguration {
'breadcrumbs.enabled': boolean;
'files.encoding': string
'keyboard.dispatch': 'code' | 'keyCode';
'window.menuBarVisibility': 'classic' | 'visible' | 'hidden' | 'compact';
[MENU_BAR_VISIBILITY]: 'classic' | 'visible' | 'hidden' | 'compact';
'workbench.list.openMode': 'singleClick' | 'doubleClick';
'workbench.commandPalette.history': number;
'workbench.editor.highlightModifiedTabs': boolean;
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/browser/menu/browser-menu-module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@ import { FrontendApplicationContribution } from '../frontend-application';
import { ContextMenuRenderer } from '../context-menu-renderer';
import { BrowserMenuBarContribution, BrowserMainMenuFactory } from './browser-menu-plugin';
import { BrowserContextMenuRenderer } from './browser-context-menu-renderer';
import { CommandContribution, MenuContribution } from '../../common';

export default new ContainerModule(bind => {
bind(BrowserMainMenuFactory).toSelf().inSingletonScope();
bind(ContextMenuRenderer).to(BrowserContextMenuRenderer).inSingletonScope();
bind(BrowserMenuBarContribution).toSelf().inSingletonScope();
bind(FrontendApplicationContribution).toService(BrowserMenuBarContribution);
[FrontendApplicationContribution, CommandContribution, MenuContribution].forEach(descriptor => bind(descriptor).toService(BrowserMenuBarContribution));
});
Loading

0 comments on commit c1391a0

Please sign in to comment.