未验证 提交 43e23215 编写于 作者: S SteVen Batten 提交者: GitHub

fixes issues with menubar in fullscreen (#56414)

上级 ffa66057
......@@ -229,17 +229,23 @@ export class MenubarControl extends Disposable {
return;
}
const isVisible = this.isVisible;
const isOpen = this.isOpen;
const isFocused = this.isFocused;
this._focusState = value;
switch (value) {
case MenubarState.HIDDEN:
if (this.isVisible) {
if (isVisible) {
this.hideMenubar();
}
if (this.isOpen) {
if (isOpen) {
this.cleanupCustomMenu();
}
if (this.isFocused) {
if (isFocused) {
this.focusedMenu = null;
if (this.focusToReturn) {
......@@ -251,15 +257,15 @@ export class MenubarControl extends Disposable {
break;
case MenubarState.VISIBLE:
if (!this.isVisible) {
if (!isVisible) {
this.showMenubar();
}
if (this.isOpen) {
if (isOpen) {
this.cleanupCustomMenu();
}
if (this.isFocused) {
if (isFocused) {
if (this.focusedMenu) {
this.customMenus[this.focusedMenu.index].buttonElement.blur();
}
......@@ -274,11 +280,11 @@ export class MenubarControl extends Disposable {
break;
case MenubarState.FOCUSED:
if (!this.isVisible) {
if (!isVisible) {
this.showMenubar();
}
if (this.isOpen) {
if (isOpen) {
this.cleanupCustomMenu();
}
......@@ -287,7 +293,7 @@ export class MenubarControl extends Disposable {
}
break;
case MenubarState.OPEN:
if (!this.isVisible) {
if (!isVisible) {
this.showMenubar();
}
......@@ -338,7 +344,13 @@ export class MenubarControl extends Disposable {
}
private setUnfocusedState(): void {
this.focusState = this.currentMenubarVisibility === 'toggle' || this.currentMenubarVisibility === 'hidden' ? MenubarState.HIDDEN : MenubarState.VISIBLE;
if (this.currentMenubarVisibility === 'toggle' || this.currentMenubarVisibility === 'hidden') {
this.focusState = MenubarState.HIDDEN;
} else if (this.currentMenubarVisibility === 'default' && browser.isFullscreen()) {
this.focusState = MenubarState.HIDDEN;
} else {
this.focusState = MenubarState.VISIBLE;
}
}
private hideMenubar(): void {
......
......@@ -35,6 +35,7 @@ import { MenubarControl } from 'vs/workbench/browser/parts/titlebar/menubarContr
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { template, getBaseLabel } from 'vs/base/common/labels';
import { IUriDisplayService } from 'vs/platform/uriDisplay/common/uriDisplay';
import { Event } from 'vs/base/common/event';
export class TitlebarPart extends Part implements ITitleService {
......@@ -134,6 +135,10 @@ export class TitlebarPart extends Part implements ITitleService {
}
}
onMenubarVisibilityChange(): Event<boolean> {
return this.menubarPart.onVisibilityChange;
}
private onActiveEditorChange(): void {
// Dispose old listeners
......
......@@ -219,6 +219,7 @@ export class Workbench extends Disposable implements IPartService {
private sideBarHidden: boolean;
private statusBarHidden: boolean;
private activityBarHidden: boolean;
private menubarToggled: boolean;
private sideBarPosition: Position;
private panelPosition: Position;
private panelHidden: boolean;
......@@ -532,6 +533,16 @@ export class Workbench extends Disposable implements IPartService {
}
}
private onMenubarToggled(visible: boolean) {
if (visible !== this.menubarToggled) {
this.menubarToggled = visible;
if (this.menubarVisibility === 'toggle' || (browser.isFullscreen() && this.menubarVisibility === 'default')) {
this.layout();
}
}
}
private onEditorClosed(listenerDispose: IDisposable, resourcesToWaitFor: URI[], waitMarkerFile: URI): void {
// In wait mode, listen to changes to the editors and wait until the files
......@@ -1004,6 +1015,12 @@ export class Workbench extends Disposable implements IPartService {
// Notification Handlers
this.createNotificationsHandlers();
// Menubar visibility changes
if ((isWindows || isLinux) && this.getCustomTitleBarStyle() === 'custom') {
this.titlebarPart.onMenubarVisibilityChange()(e => this.onMenubarToggled(e));
}
// Add Workbench to DOM
this.container.appendChild(this.workbench);
}
......@@ -1160,7 +1177,19 @@ export class Workbench extends Disposable implements IPartService {
isVisible(part: Parts): boolean {
switch (part) {
case Parts.TITLEBAR_PART:
return this.getCustomTitleBarStyle() === 'custom' && (!browser.isFullscreen() || this.menubarVisibility === 'visible' || this.menubarVisibility === 'toggle');
if (this.getCustomTitleBarStyle() !== 'custom') {
return false;
} else if (!browser.isFullscreen()) {
return true;
} else if (isMacintosh) {
return false;
} else if (this.menubarVisibility === 'visible') {
return true;
} else if (this.menubarVisibility === 'toggle' || this.menubarVisibility === 'default') {
return this.menubarToggled;
}
return false;
case Parts.SIDEBAR_PART:
return !this.sideBarHidden;
case Parts.PANEL_PART:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册