diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index 265d69f85a261a531e2cd54f5c46a5e0ec29b0c5..3fb6d8b35fceada9a619c43b9402a895c0e8cacb 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -857,6 +857,7 @@ export const EventType = { ERROR: 'error', RESIZE: 'resize', SCROLL: 'scroll', + FULLSCREEN_CHANGE: 'fullscreenchange', // Form SELECT: 'select', CHANGE: 'change', diff --git a/src/vs/workbench/browser/web.main.ts b/src/vs/workbench/browser/web.main.ts index 6f1954ba2520aa573b769bd5e0b23bfe13736191..d33b249cc98f9ae12793b4f62937bfcbf6b24db4 100644 --- a/src/vs/workbench/browser/web.main.ts +++ b/src/vs/workbench/browser/web.main.ts @@ -36,6 +36,7 @@ import { SignService } from 'vs/platform/sign/browser/signService'; import { hash } from 'vs/base/common/hash'; import { IWorkbenchConstructionOptions } from 'vs/workbench/workbench.web.api'; import { ProductService } from 'vs/platform/product/browser/productService'; +import { setFullscreen } from 'vs/base/browser/browser'; class CodeRendererMain extends Disposable { @@ -63,6 +64,13 @@ class CodeRendererMain extends Disposable { // Layout this._register(addDisposableListener(window, EventType.RESIZE, () => this.workbench.layout())); + this._register(addDisposableListener(document, EventType.FULLSCREEN_CHANGE, () => { + if (document.fullscreenElement || (document).webkitFullscreenElement) { + setFullscreen(true); + } else { + setFullscreen(false); + } + })); // Resource Loading this._register(new WebResources(services.serviceCollection.get(IFileService))); diff --git a/src/vs/workbench/browser/web.simpleservices.ts b/src/vs/workbench/browser/web.simpleservices.ts index 96d6991045614a1d01ad17eea70ddddde01d31ec..fd3d7c637cc3a191589fc6fd9a7502931c5327c4 100644 --- a/src/vs/workbench/browser/web.simpleservices.ts +++ b/src/vs/workbench/browser/web.simpleservices.ts @@ -788,17 +788,13 @@ export class SimpleWindowService implements IWindowService { if ((document).fullscreen !== undefined) { if (!(document).fullscreen) { - return (target).requestFullscreen().then(() => { - browser.setFullscreen(true); - }).catch(() => { + return (target).requestFullscreen().catch(() => { // if it fails, chromium throws an exception with error undefined. // re https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullscreen console.warn('Toggle Full Screen failed'); }); } else { - return document.exitFullscreen().then(() => { - browser.setFullscreen(false); - }).catch(() => { + return document.exitFullscreen().catch(() => { console.warn('Exit Full Screen failed'); }); } @@ -809,7 +805,7 @@ export class SimpleWindowService implements IWindowService { try { if (!(document).webkitIsFullScreen) { (target).webkitRequestFullscreen(); // it's async, but doesn't return a real promise. - browser.setFullscreen(true); + browser.setFullscreen(true); // we have to set this proactively because Safari doesn't emit fullscreenchange event. } else { (document).webkitExitFullscreen(); // it's async, but doesn't return a real promise. browser.setFullscreen(false);