Skip to content

Commit 09a7f2e

Browse files
authored
Merge pull request #739 from CodinGame/jtx/feat-allow-removing-fullscreen-menus
feat: add a way to override onDidChangeFullScreen
2 parents a1d1e25 + ea00ca0 commit 09a7f2e

File tree

1 file changed

+35
-2
lines changed

1 file changed

+35
-2
lines changed

src/service-override/host.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,14 @@ import type { BrowserLifecycleService } from 'vs/workbench/services/lifecycle/br
1717
import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle.service'
1818
import { BrowserHostColorSchemeService } from 'vs/workbench/services/themes/browser/browserHostColorSchemeService'
1919
import { IHostColorSchemeService } from 'vs/workbench/services/themes/common/hostColorSchemeService.service'
20+
import { Emitter, Event } from 'vs/base/common/event'
21+
import { getWindowId } from 'vs/base/browser/dom'
2022

2123
class CustomBrowserHostService extends BrowserHostService {
24+
private _onDidChangeFullScreen: Event<{ windowId: number; fullscreen: boolean }>
2225
constructor(
2326
private _toggleFullScreen: () => Promise<void> | undefined,
27+
_onDidChangeFullScreen: Event<boolean> | undefined,
2428
@ILayoutService layoutService: ILayoutService,
2529
@IConfigurationService configurationService: IConfigurationService,
2630
@IFileService fileService: IFileService,
@@ -46,6 +50,29 @@ class CustomBrowserHostService extends BrowserHostService {
4650
contextService,
4751
userDataProfilesService
4852
)
53+
54+
this._onDidChangeFullScreen = (() => {
55+
const mainWindowId = getWindowId(mainWindow)
56+
57+
const emitter = new Emitter<{ windowId: number; fullscreen: boolean }>()
58+
_onDidChangeFullScreen?.((fullscreen) => {
59+
emitter.fire({
60+
windowId: mainWindowId,
61+
fullscreen
62+
})
63+
})
64+
65+
super.onDidChangeFullScreen((event) => {
66+
// Forward the original fullscreen event only when there is no custom handler
67+
// or when the event is for a window other than the main one.
68+
// This prevents double-handling of fullscreen changes for the main window
69+
// when a custom handler is already managing it.
70+
if (_onDidChangeFullScreen == null || event.windowId !== mainWindowId) {
71+
emitter.fire(event)
72+
}
73+
})
74+
return emitter.event
75+
})()
4976
}
5077

5178
override async toggleFullScreen(targetWindow: Window): Promise<void> {
@@ -55,19 +82,25 @@ class CustomBrowserHostService extends BrowserHostService {
5582
await super.toggleFullScreen(targetWindow)
5683
}
5784
}
85+
86+
override get onDidChangeFullScreen() {
87+
return this._onDidChangeFullScreen
88+
}
5889
}
5990

6091
interface BrowserHostServiceOverrideParams {
6192
toggleFullScreen?: () => Promise<void>
93+
onDidChangeFullScreen?: Event<boolean>
6294
}
6395

6496
export default function getServiceOverride({
65-
toggleFullScreen
97+
toggleFullScreen,
98+
onDidChangeFullScreen
6699
}: BrowserHostServiceOverrideParams = {}): IEditorOverrideServices {
67100
return {
68101
[IHostService.toString()]: new SyncDescriptor(
69102
CustomBrowserHostService,
70-
[toggleFullScreen],
103+
[toggleFullScreen, onDidChangeFullScreen],
71104
true
72105
),
73106
[IHostColorSchemeService.toString()]: new SyncDescriptor(

0 commit comments

Comments
 (0)