From 3399d30c701a8f5569220fa6356a86e27f51345a Mon Sep 17 00:00:00 2001 From: Peng Lyu Date: Wed, 19 Jun 2019 18:54:54 -0700 Subject: [PATCH] Fullscreen change event. --- src/vs/base/browser/dom.ts | 1 + src/vs/workbench/browser/web.main.ts | 8 ++++++++ src/vs/workbench/browser/web.simpleservices.ts | 10 +++------- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index 265d69f85a2..3fb6d8b35fc 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 6f1954ba252..d33b249cc98 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 96d69910456..fd3d7c637cc 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); -- GitLab