Skip to content

Commit b0f0dcb

Browse files
authored
window - fix fullscreen detection (microsoft#202714)
Only use `detectFullScreen` in web as it seems to return bad results on desktop.
1 parent 25282a9 commit b0f0dcb

File tree

12 files changed

+25
-25
lines changed

12 files changed

+25
-25
lines changed

src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindows.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export interface IAuxiliaryWindowsMainService {
1717

1818
readonly onDidMaximizeWindow: Event<IAuxiliaryWindow>;
1919
readonly onDidUnmaximizeWindow: Event<IAuxiliaryWindow>;
20-
readonly onDidChangeFullScreen: Event<IAuxiliaryWindow>;
20+
readonly onDidChangeFullScreen: Event<{ window: IAuxiliaryWindow; fullscreen: boolean }>;
2121
readonly onDidTriggerSystemContextMenu: Event<{ readonly window: IAuxiliaryWindow; readonly x: number; readonly y: number }>;
2222

2323
createWindow(): BrowserWindowConstructorOptions;

src/vs/platform/auxiliaryWindow/electron-main/auxiliaryWindowsMainService.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export class AuxiliaryWindowsMainService extends Disposable implements IAuxiliar
2424
private readonly _onDidUnmaximizeWindow = this._register(new Emitter<IAuxiliaryWindow>());
2525
readonly onDidUnmaximizeWindow = this._onDidUnmaximizeWindow.event;
2626

27-
private readonly _onDidChangeFullScreen = this._register(new Emitter<IAuxiliaryWindow>());
27+
private readonly _onDidChangeFullScreen = this._register(new Emitter<{ window: IAuxiliaryWindow; fullscreen: boolean }>());
2828
readonly onDidChangeFullScreen = this._onDidChangeFullScreen.event;
2929

3030
private readonly _onDidTriggerSystemContextMenu = this._register(new Emitter<{ window: IAuxiliaryWindow; x: number; y: number }>());
@@ -88,8 +88,8 @@ export class AuxiliaryWindowsMainService extends Disposable implements IAuxiliar
8888

8989
disposables.add(auxiliaryWindow.onDidMaximize(() => this._onDidMaximizeWindow.fire(auxiliaryWindow)));
9090
disposables.add(auxiliaryWindow.onDidUnmaximize(() => this._onDidUnmaximizeWindow.fire(auxiliaryWindow)));
91-
disposables.add(auxiliaryWindow.onDidEnterFullScreen(() => this._onDidChangeFullScreen.fire(auxiliaryWindow)));
92-
disposables.add(auxiliaryWindow.onDidLeaveFullScreen(() => this._onDidChangeFullScreen.fire(auxiliaryWindow)));
91+
disposables.add(auxiliaryWindow.onDidEnterFullScreen(() => this._onDidChangeFullScreen.fire({ window: auxiliaryWindow, fullscreen: true })));
92+
disposables.add(auxiliaryWindow.onDidLeaveFullScreen(() => this._onDidChangeFullScreen.fire({ window: auxiliaryWindow, fullscreen: false })));
9393
disposables.add(auxiliaryWindow.onDidTriggerSystemContextMenu(({ x, y }) => this._onDidTriggerSystemContextMenu.fire({ window: auxiliaryWindow, x, y })));
9494

9595
Event.once(auxiliaryWindow.onDidClose)(() => disposables.dispose());

src/vs/platform/native/common/native.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export interface ICommonNativeHostService {
5353
readonly onDidFocusMainWindow: Event<number>;
5454
readonly onDidBlurMainWindow: Event<number>;
5555

56-
readonly onDidChangeWindowFullScreen: Event<number>;
56+
readonly onDidChangeWindowFullScreen: Event<{ windowId: number; fullscreen: boolean }>;
5757

5858
readonly onDidFocusMainOrAuxiliaryWindow: Event<number>;
5959
readonly onDidBlurMainOrAuxiliaryWindow: Event<number>;

src/vs/platform/native/electron-main/nativeHostMainService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ export class NativeHostMainService extends Disposable implements INativeHostMain
9494
);
9595

9696
readonly onDidChangeWindowFullScreen = Event.any(
97-
Event.map(this.windowsMainService.onDidChangeFullScreen, window => window.id),
98-
Event.map(this.auxiliaryWindowsMainService.onDidChangeFullScreen, window => window.id)
97+
Event.map(this.windowsMainService.onDidChangeFullScreen, e => ({ windowId: e.window.id, fullscreen: e.fullscreen })),
98+
Event.map(this.auxiliaryWindowsMainService.onDidChangeFullScreen, e => ({ windowId: e.window.id, fullscreen: e.fullscreen }))
9999
);
100100

101101
readonly onDidBlurMainWindow = Event.filter(Event.fromNodeEventEmitter(app, 'browser-window-blur', (event, window: BrowserWindow) => window.id), windowId => !!this.windowsMainService.getWindowById(windowId));

src/vs/platform/windows/electron-main/windows.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export interface IWindowsMainService {
3232
readonly onDidSignalReadyWindow: Event<ICodeWindow>;
3333
readonly onDidMaximizeWindow: Event<ICodeWindow>;
3434
readonly onDidUnmaximizeWindow: Event<ICodeWindow>;
35-
readonly onDidChangeFullScreen: Event<ICodeWindow>;
35+
readonly onDidChangeFullScreen: Event<{ window: ICodeWindow; fullscreen: boolean }>;
3636
readonly onDidTriggerSystemContextMenu: Event<{ readonly window: ICodeWindow; readonly x: number; readonly y: number }>;
3737
readonly onDidDestroyWindow: Event<ICodeWindow>;
3838

src/vs/platform/windows/electron-main/windowsMainService.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic
198198
private readonly _onDidUnmaximizeWindow = this._register(new Emitter<ICodeWindow>());
199199
readonly onDidUnmaximizeWindow = this._onDidUnmaximizeWindow.event;
200200

201-
private readonly _onDidChangeFullScreen = this._register(new Emitter<ICodeWindow>());
201+
private readonly _onDidChangeFullScreen = this._register(new Emitter<{ window: ICodeWindow; fullscreen: boolean }>());
202202
readonly onDidChangeFullScreen = this._onDidChangeFullScreen.event;
203203

204204
private readonly _onDidTriggerSystemContextMenu = this._register(new Emitter<{ window: ICodeWindow; x: number; y: number }>());
@@ -1500,8 +1500,8 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic
15001500
disposables.add(Event.once(createdWindow.onDidDestroy)(() => this.onWindowDestroyed(createdWindow)));
15011501
disposables.add(createdWindow.onDidMaximize(() => this._onDidMaximizeWindow.fire(createdWindow)));
15021502
disposables.add(createdWindow.onDidUnmaximize(() => this._onDidUnmaximizeWindow.fire(createdWindow)));
1503-
disposables.add(createdWindow.onDidEnterFullScreen(() => this._onDidChangeFullScreen.fire(createdWindow)));
1504-
disposables.add(createdWindow.onDidLeaveFullScreen(() => this._onDidChangeFullScreen.fire(createdWindow)));
1503+
disposables.add(createdWindow.onDidEnterFullScreen(() => this._onDidChangeFullScreen.fire({ window: createdWindow, fullscreen: true })));
1504+
disposables.add(createdWindow.onDidLeaveFullScreen(() => this._onDidChangeFullScreen.fire({ window: createdWindow, fullscreen: false })));
15051505
disposables.add(createdWindow.onDidTriggerSystemContextMenu(({ x, y }) => this._onDidTriggerSystemContextMenu.fire({ window: createdWindow, x, y })));
15061506

15071507
const webContents = assertIsDefined(createdWindow.win?.webContents);

src/vs/workbench/browser/parts/editor/auxiliaryEditorPart.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { onDidChangeFullscreen, onDidChangeZoomLevel } from 'vs/base/browser/browser';
7-
import { detectFullscreen, hide, show } from 'vs/base/browser/dom';
6+
import { isFullscreen, onDidChangeFullscreen, onDidChangeZoomLevel } from 'vs/base/browser/browser';
7+
import { hide, show } from 'vs/base/browser/dom';
88
import { Emitter, Event } from 'vs/base/common/event';
99
import { DisposableStore } from 'vs/base/common/lifecycle';
1010
import { isNative } from 'vs/base/common/platform';
@@ -134,7 +134,7 @@ export class AuxiliaryEditorPart {
134134
// Make sure to hide the custom title when we enter
135135
// fullscren mode and show it when we lave it.
136136

137-
const fullscreen = detectFullscreen(auxiliaryWindow.window);
137+
const fullscreen = isFullscreen(auxiliaryWindow.window);
138138
const oldTitlebarPartVisible = titlebarPartVisible;
139139
titlebarPartVisible = !fullscreen;
140140
if (titlebarPart && oldTitlebarPartVisible !== titlebarPartVisible) {

src/vs/workbench/browser/window.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { isSafari, setFullscreen } from 'vs/base/browser/browser';
7-
import { addDisposableListener, detectFullscreen, EventHelper, EventType, getActiveWindow, getWindow, getWindowById, getWindows, getWindowsCount, windowOpenNoOpener, windowOpenPopup, windowOpenWithSuccess } from 'vs/base/browser/dom';
7+
import { addDisposableListener, EventHelper, EventType, getActiveWindow, getWindow, getWindowById, getWindows, getWindowsCount, windowOpenNoOpener, windowOpenPopup, windowOpenWithSuccess } from 'vs/base/browser/dom';
88
import { DomEmitter } from 'vs/base/browser/event';
99
import { HidDeviceData, requestHidDevice, requestSerialPort, requestUsbDevice, SerialPortData, UsbDeviceData } from 'vs/base/browser/deviceAccess';
1010
import { timeout } from 'vs/base/common/async';
@@ -136,11 +136,11 @@ export abstract class BaseWindow extends Disposable {
136136
//#endregion
137137

138138
private registerFullScreenListeners(targetWindowId: number): void {
139-
this._register(this.hostService.onDidChangeFullScreen(windowId => {
139+
this._register(this.hostService.onDidChangeFullScreen(({ windowId, fullscreen }) => {
140140
if (windowId === targetWindowId) {
141141
const targetWindow = getWindowById(targetWindowId);
142142
if (targetWindow) {
143-
setFullscreen(!!detectFullscreen(targetWindow.window), targetWindow.window);
143+
setFullscreen(fullscreen, targetWindow.window);
144144
}
145145
}
146146
}));

src/vs/workbench/services/host/browser/browserHostService.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { whenEditorClosed } from 'vs/workbench/browser/editor';
1515
import { IWorkspace, IWorkspaceProvider } from 'vs/workbench/browser/web.api';
1616
import { IFileService } from 'vs/platform/files/common/files';
1717
import { ILabelService, Verbosity } from 'vs/platform/label/common/label';
18-
import { EventType, ModifierKeyEmitter, addDisposableListener, addDisposableThrottledListener, disposableWindowInterval, getActiveDocument, getWindowId, onDidRegisterWindow, trackFocus } from 'vs/base/browser/dom';
18+
import { EventType, ModifierKeyEmitter, addDisposableListener, addDisposableThrottledListener, detectFullscreen, disposableWindowInterval, getActiveDocument, getWindowId, onDidRegisterWindow, trackFocus } from 'vs/base/browser/dom';
1919
import { Disposable } from 'vs/base/common/lifecycle';
2020
import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService';
2121
import { memoize } from 'vs/base/common/decorators';
@@ -206,20 +206,20 @@ export class BrowserHostService extends Disposable implements IHostService {
206206
}
207207

208208
@memoize
209-
get onDidChangeFullScreen(): Event<number> {
210-
const emitter = this._register(new Emitter<number>());
209+
get onDidChangeFullScreen(): Event<{ windowId: number; fullscreen: boolean }> {
210+
const emitter = this._register(new Emitter<{ windowId: number; fullscreen: boolean }>());
211211

212212
this._register(Event.runAndSubscribe(onDidRegisterWindow, ({ window, disposables }) => {
213213
const windowId = getWindowId(window);
214214
const viewport = isIOS && window.visualViewport ? window.visualViewport /** Visual viewport */ : window /** Layout viewport */;
215215

216216
// Fullscreen (Browser)
217217
for (const event of [EventType.FULLSCREEN_CHANGE, EventType.WK_FULLSCREEN_CHANGE]) {
218-
disposables.add(addDisposableListener(window.document, event, () => emitter.fire(windowId)));
218+
disposables.add(addDisposableListener(window.document, event, () => emitter.fire({ windowId, fullscreen: !!detectFullscreen(window) })));
219219
}
220220

221221
// Fullscreen (Native)
222-
disposables.add(addDisposableThrottledListener(viewport, EventType.RESIZE, () => emitter.fire(windowId), undefined, isMacintosh ? 2000 /* adjust for macOS animation */ : 800 /* can be throttled */));
222+
disposables.add(addDisposableThrottledListener(viewport, EventType.RESIZE, () => emitter.fire({ windowId, fullscreen: !!detectFullscreen(window) }), undefined, isMacintosh ? 2000 /* adjust for macOS animation */ : 800 /* can be throttled */));
223223
}, { window: mainWindow, disposables: this._store }));
224224

225225
return emitter.event;

src/vs/workbench/services/host/browser/host.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export interface IHostService {
6969
* Emitted when the window with the given identifier changes
7070
* its fullscreen state.
7171
*/
72-
readonly onDidChangeFullScreen: Event<number>;
72+
readonly onDidChangeFullScreen: Event<{ windowId: number; fullscreen: boolean }>;
7373

7474
/**
7575
* Opens an empty window. The optional parameter allows to define if

0 commit comments

Comments
 (0)