diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index 3fb6d8b35fc..e201902ae24 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -858,6 +858,7 @@ export const EventType = { RESIZE: 'resize', SCROLL: 'scroll', FULLSCREEN_CHANGE: 'fullscreenchange', + WK_FULLSCREEN_CHANGE: 'webkitfullscreenchange', // Form SELECT: 'select', CHANGE: 'change', diff --git a/src/vs/workbench/browser/web.simpleservices.ts b/src/vs/workbench/browser/web.simpleservices.ts index f5bccc1b42d..193cb07fd31 100644 --- a/src/vs/workbench/browser/web.simpleservices.ts +++ b/src/vs/workbench/browser/web.simpleservices.ts @@ -760,6 +760,14 @@ export class SimpleWindowService extends Disposable implements IWindowService { browser.setFullscreen(false); } })); + + this._register(addDisposableListener(document, EventType.WK_FULLSCREEN_CHANGE, () => { + if (document.fullscreenElement || (document).webkitFullscreenElement || (document).webkitIsFullScreen) { + browser.setFullscreen(true); + } else { + browser.setFullscreen(false); + } + })); } isFocused(): Promise { @@ -832,10 +840,8 @@ export class SimpleWindowService extends Disposable implements IWindowService { try { if (!(document).webkitIsFullScreen) { (target).webkitRequestFullscreen(); // it's async, but doesn't return a real promise. - 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); } } catch { console.warn('Enter/Exit Full Screen failed');