提交 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
import { parseArgs } from 'vs/platform/environment/node/argv';
import product from 'vs/platform/node/product';
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 {
width?: number;
......@@ -120,7 +120,7 @@ export enum ReadyState {
interface IConfiguration {
window: {
menuBarVisibility: 'visible' | 'toggle' | 'hidden';
menuBarVisibility: MenuBarVisibility;
};
}
......@@ -149,7 +149,7 @@ export class VSCodeWindow implements IVSCodeWindow {
private _extensionDevelopmentPath: string;
private _isExtensionTestHost: boolean;
private windowState: IWindowState;
private currentMenuBarVisibility: 'visible' | 'toggle' | 'hidden';
private currentMenuBarVisibility: MenuBarVisibility;
private currentWindowMode: WindowMode;
private whenReadyCallbacks: TValueCallback<VSCodeWindow>[];
......@@ -677,30 +677,37 @@ export class VSCodeWindow implements IVSCodeWindow {
this.win.setFullScreen(willBeFullScreen);
// 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');
if (!windowConfig || !windowConfig.menuBarVisibility) {
return fallback;
return 'default';
}
let menuBarVisibility = windowConfig.menuBarVisibility;
if (['visible', 'toggle', 'hidden'].indexOf(menuBarVisibility) < 0) {
menuBarVisibility = fallback;
menuBarVisibility = 'default';
}
return menuBarVisibility;
}
public setMenuBarVisibility(visibility: 'visible' | 'toggle' | 'hidden', notify: boolean = true): void {
public setMenuBarVisibility(visibility: MenuBarVisibility, notify: boolean = true): void {
if (platform.isMacintosh) {
return; // ignore for macOS platform
}
const isFullscreen = this.win.isFullScreen();
switch (visibility) {
case ('default'):
this.win.setMenuBarVisibility(!isFullscreen);
this.win.setAutoHideMenuBar(isFullscreen);
break;
case ('visible'):
this.win.setMenuBarVisibility(true);
this.win.setAutoHideMenuBar(false);
......
......@@ -84,6 +84,8 @@ export interface IWindowService {
unmaximizeWindow(): TPromise<void>;
}
export type MenuBarVisibility = 'default' | 'visible' | 'toggle' | 'hidden';
export interface IWindowSettings {
openFilesInNewWindow: 'on' | 'off' | 'default';
openFoldersInNewWindow: 'on' | 'off' | 'default';
......@@ -92,6 +94,6 @@ export interface IWindowSettings {
zoomLevel: number;
titleBarStyle: 'native' | 'custom';
autoDetectHighContrast: boolean;
menuBarVisibility: 'visible' | 'toggle' | 'hidden';
menuBarVisibility: MenuBarVisibility;
newWindowDimensions: 'default' | 'inherit' | 'maximized' | 'fullscreen';
}
\ No newline at end of file
......@@ -9,7 +9,7 @@ import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { Action } from 'vs/base/common/actions';
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 nls = require('vs/nls');
import product from 'vs/platform/node/product';
......@@ -183,16 +183,16 @@ export class ToggleMenuBarAction extends Action {
}
public run(): TPromise<any> {
let currentVisibilityValue = this.configurationService.lookup<'visible' | 'toggle' | 'hidden'>(ToggleMenuBarAction.menuBarVisibilityKey).value;
if (typeof (currentVisibilityValue) !== 'string') {
currentVisibilityValue = 'visible';
let currentVisibilityValue = this.configurationService.lookup<MenuBarVisibility>(ToggleMenuBarAction.menuBarVisibilityKey).value;
if (typeof currentVisibilityValue !== 'string') {
currentVisibilityValue = 'default';
}
let newVisibilityValue: string;
if (currentVisibilityValue === 'visible') {
if (currentVisibilityValue === 'visible' || currentVisibilityValue === 'default') {
newVisibilityValue = 'toggle';
} else {
newVisibilityValue = 'visible';
newVisibilityValue = 'default';
}
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
if (platform.isWindows || platform.isLinux) {
properties['window.menuBarVisibility'] = {
'type': 'string',
'enum': ['visible', 'toggle', 'hidden'],
'default': 'visible',
'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.")
'enum': ['default', 'visible', 'toggle', 'hidden'],
'default': 'default',
'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.
先完成此消息的编辑!
想要评论请 注册