提交 9b4d8076 编写于 作者: B Benjamin Pasero 提交者: GitHub

Merge pull request #19349 from Microsoft/ben/menubar

introduce 'default' for menu bar visibility
...@@ -18,7 +18,7 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur ...@@ -18,7 +18,7 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
import { parseArgs } from 'vs/platform/environment/node/argv'; import { parseArgs } from 'vs/platform/environment/node/argv';
import product from 'vs/platform/node/product'; import product from 'vs/platform/node/product';
import { getCommonHTTPHeaders } from 'vs/platform/environment/node/http'; import { getCommonHTTPHeaders } from 'vs/platform/environment/node/http';
import { IWindowSettings } from 'vs/platform/windows/common/windows'; import { IWindowSettings, MenuBarVisibility } from 'vs/platform/windows/common/windows';
export interface IWindowState { export interface IWindowState {
width?: number; width?: number;
...@@ -120,7 +120,7 @@ export enum ReadyState { ...@@ -120,7 +120,7 @@ export enum ReadyState {
interface IConfiguration { interface IConfiguration {
window: { window: {
menuBarVisibility: 'visible' | 'toggle' | 'hidden'; menuBarVisibility: MenuBarVisibility;
}; };
} }
...@@ -149,7 +149,7 @@ export class VSCodeWindow implements IVSCodeWindow { ...@@ -149,7 +149,7 @@ export class VSCodeWindow implements IVSCodeWindow {
private _extensionDevelopmentPath: string; private _extensionDevelopmentPath: string;
private _isExtensionTestHost: boolean; private _isExtensionTestHost: boolean;
private windowState: IWindowState; private windowState: IWindowState;
private currentMenuBarVisibility: 'visible' | 'toggle' | 'hidden'; private currentMenuBarVisibility: MenuBarVisibility;
private currentWindowMode: WindowMode; private currentWindowMode: WindowMode;
private whenReadyCallbacks: TValueCallback<VSCodeWindow>[]; private whenReadyCallbacks: TValueCallback<VSCodeWindow>[];
...@@ -677,30 +677,37 @@ export class VSCodeWindow implements IVSCodeWindow { ...@@ -677,30 +677,37 @@ export class VSCodeWindow implements IVSCodeWindow {
this.win.setFullScreen(willBeFullScreen); this.win.setFullScreen(willBeFullScreen);
// respect configured menu bar visibility or default to toggle if not set // respect configured menu bar visibility or default to toggle if not set
this.setMenuBarVisibility(this.getMenuBarVisibility(this.configurationService.getConfiguration<IConfiguration>(), willBeFullScreen ? 'toggle' : 'visible'), false); this.setMenuBarVisibility(this.currentMenuBarVisibility, false);
} }
private getMenuBarVisibility(configuration: IConfiguration, fallback: 'visible' | 'toggle' | 'hidden' = 'visible'): 'visible' | 'toggle' | 'hidden' { private getMenuBarVisibility(configuration: IConfiguration): MenuBarVisibility {
const windowConfig = this.configurationService.getConfiguration<IWindowSettings>('window'); const windowConfig = this.configurationService.getConfiguration<IWindowSettings>('window');
if (!windowConfig || !windowConfig.menuBarVisibility) { if (!windowConfig || !windowConfig.menuBarVisibility) {
return fallback; return 'default';
} }
let menuBarVisibility = windowConfig.menuBarVisibility; let menuBarVisibility = windowConfig.menuBarVisibility;
if (['visible', 'toggle', 'hidden'].indexOf(menuBarVisibility) < 0) { if (['visible', 'toggle', 'hidden'].indexOf(menuBarVisibility) < 0) {
menuBarVisibility = fallback; menuBarVisibility = 'default';
} }
return menuBarVisibility; return menuBarVisibility;
} }
public setMenuBarVisibility(visibility: 'visible' | 'toggle' | 'hidden', notify: boolean = true): void { public setMenuBarVisibility(visibility: MenuBarVisibility, notify: boolean = true): void {
if (platform.isMacintosh) { if (platform.isMacintosh) {
return; // ignore for macOS platform return; // ignore for macOS platform
} }
const isFullscreen = this.win.isFullScreen();
switch (visibility) { switch (visibility) {
case ('default'):
this.win.setMenuBarVisibility(!isFullscreen);
this.win.setAutoHideMenuBar(isFullscreen);
break;
case ('visible'): case ('visible'):
this.win.setMenuBarVisibility(true); this.win.setMenuBarVisibility(true);
this.win.setAutoHideMenuBar(false); this.win.setAutoHideMenuBar(false);
......
...@@ -84,6 +84,8 @@ export interface IWindowService { ...@@ -84,6 +84,8 @@ export interface IWindowService {
unmaximizeWindow(): TPromise<void>; unmaximizeWindow(): TPromise<void>;
} }
export type MenuBarVisibility = 'default' | 'visible' | 'toggle' | 'hidden';
export interface IWindowSettings { export interface IWindowSettings {
openFilesInNewWindow: 'on' | 'off' | 'default'; openFilesInNewWindow: 'on' | 'off' | 'default';
openFoldersInNewWindow: 'on' | 'off' | 'default'; openFoldersInNewWindow: 'on' | 'off' | 'default';
...@@ -92,6 +94,6 @@ export interface IWindowSettings { ...@@ -92,6 +94,6 @@ export interface IWindowSettings {
zoomLevel: number; zoomLevel: number;
titleBarStyle: 'native' | 'custom'; titleBarStyle: 'native' | 'custom';
autoDetectHighContrast: boolean; autoDetectHighContrast: boolean;
menuBarVisibility: 'visible' | 'toggle' | 'hidden'; menuBarVisibility: MenuBarVisibility;
newWindowDimensions: 'default' | 'inherit' | 'maximized' | 'fullscreen'; newWindowDimensions: 'default' | 'inherit' | 'maximized' | 'fullscreen';
} }
\ No newline at end of file
...@@ -9,7 +9,7 @@ import URI from 'vs/base/common/uri'; ...@@ -9,7 +9,7 @@ import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import { Action } from 'vs/base/common/actions'; import { Action } from 'vs/base/common/actions';
import { IWindowIPCService } from 'vs/workbench/services/window/electron-browser/windowService'; import { IWindowIPCService } from 'vs/workbench/services/window/electron-browser/windowService';
import { IWindowService, IWindowsService } from 'vs/platform/windows/common/windows'; import { IWindowService, IWindowsService, MenuBarVisibility } from 'vs/platform/windows/common/windows';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
import nls = require('vs/nls'); import nls = require('vs/nls');
import product from 'vs/platform/node/product'; import product from 'vs/platform/node/product';
...@@ -183,16 +183,16 @@ export class ToggleMenuBarAction extends Action { ...@@ -183,16 +183,16 @@ export class ToggleMenuBarAction extends Action {
} }
public run(): TPromise<any> { public run(): TPromise<any> {
let currentVisibilityValue = this.configurationService.lookup<'visible' | 'toggle' | 'hidden'>(ToggleMenuBarAction.menuBarVisibilityKey).value; let currentVisibilityValue = this.configurationService.lookup<MenuBarVisibility>(ToggleMenuBarAction.menuBarVisibilityKey).value;
if (typeof (currentVisibilityValue) !== 'string') { if (typeof currentVisibilityValue !== 'string') {
currentVisibilityValue = 'visible'; currentVisibilityValue = 'default';
} }
let newVisibilityValue: string; let newVisibilityValue: string;
if (currentVisibilityValue === 'visible') { if (currentVisibilityValue === 'visible' || currentVisibilityValue === 'default') {
newVisibilityValue = 'toggle'; newVisibilityValue = 'toggle';
} else { } else {
newVisibilityValue = 'visible'; newVisibilityValue = 'default';
} }
this.configurationEditingService.writeConfiguration(ConfigurationTarget.USER, { key: ToggleMenuBarAction.menuBarVisibilityKey, value: newVisibilityValue }).then(null, error => { this.configurationEditingService.writeConfiguration(ConfigurationTarget.USER, { key: ToggleMenuBarAction.menuBarVisibilityKey, value: newVisibilityValue }).then(null, error => {
......
...@@ -235,9 +235,9 @@ Note that there can still be cases where this setting is ignored (e.g. when usin ...@@ -235,9 +235,9 @@ Note that there can still be cases where this setting is ignored (e.g. when usin
if (platform.isWindows || platform.isLinux) { if (platform.isWindows || platform.isLinux) {
properties['window.menuBarVisibility'] = { properties['window.menuBarVisibility'] = {
'type': 'string', 'type': 'string',
'enum': ['visible', 'toggle', 'hidden'], 'enum': ['default', 'visible', 'toggle', 'hidden'],
'default': 'visible', 'default': 'default',
'description': nls.localize('menuBarVisibility', "Control the visibility of the menu bar. A setting of 'toggle' means that a single press of the alt key will show and hide the menu bar.") 'description': nls.localize('menuBarVisibility', "Control the visibility of the menu bar. A setting of 'toggle' means that the menu bar is hidden and a single press of the Alt key will show it. By default, the menu bar will be visible, unless the window is full screen.")
}; };
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册