@theia/core 1.70.0-next.7 → 1.70.0-next.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/README.md +3 -3
  2. package/lib/browser/about-dialog.d.ts.map +1 -1
  3. package/lib/browser/about-dialog.js +3 -1
  4. package/lib/browser/about-dialog.js.map +1 -1
  5. package/lib/browser/catalog.json +83 -7
  6. package/lib/browser/common-frontend-contribution.d.ts +0 -2
  7. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  8. package/lib/browser/common-frontend-contribution.js +39 -15
  9. package/lib/browser/common-frontend-contribution.js.map +1 -1
  10. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  11. package/lib/browser/frontend-application-module.js +1 -0
  12. package/lib/browser/frontend-application-module.js.map +1 -1
  13. package/lib/browser/hover-service.d.ts.map +1 -1
  14. package/lib/browser/hover-service.js +5 -3
  15. package/lib/browser/hover-service.js.map +1 -1
  16. package/lib/browser/markdown-rendering/markdown-renderer.d.ts +1 -1
  17. package/lib/browser/markdown-rendering/markdown-renderer.d.ts.map +1 -1
  18. package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
  19. package/lib/browser/menu/browser-menu-plugin.js +9 -1
  20. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  21. package/lib/browser/quick-input/quick-input-service.spec.js +53 -9
  22. package/lib/browser/quick-input/quick-input-service.spec.js.map +1 -1
  23. package/lib/browser/saveable-service.d.ts +24 -1
  24. package/lib/browser/saveable-service.d.ts.map +1 -1
  25. package/lib/browser/saveable-service.js +34 -3
  26. package/lib/browser/saveable-service.js.map +1 -1
  27. package/lib/browser/tree/fuzzy-search.d.ts +1 -60
  28. package/lib/browser/tree/fuzzy-search.d.ts.map +1 -1
  29. package/lib/browser/tree/fuzzy-search.js +3 -58
  30. package/lib/browser/tree/fuzzy-search.js.map +1 -1
  31. package/lib/browser/tree/tree-view-welcome-widget.d.ts.map +1 -1
  32. package/lib/browser/tree/tree-view-welcome-widget.js +1 -2
  33. package/lib/browser/tree/tree-view-welcome-widget.js.map +1 -1
  34. package/lib/browser/widgets/select-component.d.ts +1 -0
  35. package/lib/browser/widgets/select-component.d.ts.map +1 -1
  36. package/lib/browser/widgets/select-component.js +30 -0
  37. package/lib/browser/widgets/select-component.js.map +1 -1
  38. package/lib/browser/window/default-window-service.d.ts +2 -1
  39. package/lib/browser/window/default-window-service.d.ts.map +1 -1
  40. package/lib/browser/window/default-window-service.js +5 -1
  41. package/lib/browser/window/default-window-service.js.map +1 -1
  42. package/lib/browser/window/test/mock-window-service.d.ts +2 -1
  43. package/lib/browser/window/test/mock-window-service.d.ts.map +1 -1
  44. package/lib/browser/window/test/mock-window-service.js +2 -1
  45. package/lib/browser/window/test/mock-window-service.js.map +1 -1
  46. package/lib/browser/window/window-service.d.ts +8 -1
  47. package/lib/browser/window/window-service.d.ts.map +1 -1
  48. package/lib/common/fuzzy-match-utils.d.ts +27 -0
  49. package/lib/common/fuzzy-match-utils.d.ts.map +1 -0
  50. package/lib/common/fuzzy-match-utils.js +96 -0
  51. package/lib/common/fuzzy-match-utils.js.map +1 -0
  52. package/lib/common/fuzzy-match-utils.spec.d.ts +2 -0
  53. package/lib/common/fuzzy-match-utils.spec.d.ts.map +1 -0
  54. package/lib/common/fuzzy-match-utils.spec.js +109 -0
  55. package/lib/common/fuzzy-match-utils.spec.js.map +1 -0
  56. package/lib/common/fuzzy-search.d.ts +63 -0
  57. package/lib/common/fuzzy-search.d.ts.map +1 -0
  58. package/lib/common/fuzzy-search.js +101 -0
  59. package/lib/common/fuzzy-search.js.map +1 -0
  60. package/lib/common/fuzzy-search.spec.d.ts.map +1 -0
  61. package/lib/{browser/tree → common}/fuzzy-search.spec.js +20 -1
  62. package/lib/common/fuzzy-search.spec.js.map +1 -0
  63. package/lib/common/logger-sanitizer.d.ts +9 -0
  64. package/lib/common/logger-sanitizer.d.ts.map +1 -1
  65. package/lib/common/logger-sanitizer.js +26 -3
  66. package/lib/common/logger-sanitizer.js.map +1 -1
  67. package/lib/common/logger-sanitizer.spec.js +41 -0
  68. package/lib/common/logger-sanitizer.spec.js.map +1 -1
  69. package/lib/common/preferences/injectable-preference-proxy.d.ts +5 -3
  70. package/lib/common/preferences/injectable-preference-proxy.d.ts.map +1 -1
  71. package/lib/common/preferences/injectable-preference-proxy.js +9 -6
  72. package/lib/common/preferences/injectable-preference-proxy.js.map +1 -1
  73. package/lib/common/preferences/preference-configurations.d.ts +2 -2
  74. package/lib/common/preferences/preference-configurations.d.ts.map +1 -1
  75. package/lib/common/preferences/preference-configurations.js +1 -1
  76. package/lib/common/preferences/preference-configurations.js.map +1 -1
  77. package/lib/common/preferences/preference-provider-impl.d.ts +4 -3
  78. package/lib/common/preferences/preference-provider-impl.d.ts.map +1 -1
  79. package/lib/common/preferences/preference-provider-impl.js +9 -6
  80. package/lib/common/preferences/preference-provider-impl.js.map +1 -1
  81. package/lib/common/preferences/preference-proxy.d.ts +4 -2
  82. package/lib/common/preferences/preference-proxy.d.ts.map +1 -1
  83. package/lib/common/preferences/preference-proxy.js +4 -5
  84. package/lib/common/preferences/preference-proxy.js.map +1 -1
  85. package/lib/common/preferences/preference-service.d.ts +4 -3
  86. package/lib/common/preferences/preference-service.d.ts.map +1 -1
  87. package/lib/common/preferences/preference-service.js +13 -10
  88. package/lib/common/preferences/preference-service.js.map +1 -1
  89. package/lib/common/quick-pick-service.d.ts +18 -2
  90. package/lib/common/quick-pick-service.d.ts.map +1 -1
  91. package/lib/common/quick-pick-service.js +53 -8
  92. package/lib/common/quick-pick-service.js.map +1 -1
  93. package/lib/common/uri.js +1 -1
  94. package/lib/common/uri.js.map +1 -1
  95. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  96. package/lib/electron-browser/menu/electron-main-menu-factory.js +4 -6
  97. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  98. package/lib/electron-browser/menu/electron-menu-contribution.js +3 -3
  99. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  100. package/lib/electron-browser/messaging/electron-local-ws-connection-source.d.ts +2 -0
  101. package/lib/electron-browser/messaging/electron-local-ws-connection-source.d.ts.map +1 -1
  102. package/lib/electron-browser/messaging/electron-local-ws-connection-source.js +5 -3
  103. package/lib/electron-browser/messaging/electron-local-ws-connection-source.js.map +1 -1
  104. package/lib/electron-browser/preload.js +2 -2
  105. package/lib/electron-browser/preload.js.map +1 -1
  106. package/lib/electron-browser/window/electron-secondary-window-service.d.ts +4 -0
  107. package/lib/electron-browser/window/electron-secondary-window-service.d.ts.map +1 -1
  108. package/lib/electron-browser/window/electron-secondary-window-service.js +32 -0
  109. package/lib/electron-browser/window/electron-secondary-window-service.js.map +1 -1
  110. package/lib/electron-browser/window/electron-window-module.d.ts +1 -0
  111. package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
  112. package/lib/electron-browser/window/electron-window-module.js +4 -0
  113. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  114. package/lib/electron-browser/window/electron-window-service.d.ts +3 -2
  115. package/lib/electron-browser/window/electron-window-service.d.ts.map +1 -1
  116. package/lib/electron-browser/window/electron-window-service.js +7 -4
  117. package/lib/electron-browser/window/electron-window-service.js.map +1 -1
  118. package/lib/electron-browser/window/window-zoom-action-bar.d.ts +21 -0
  119. package/lib/electron-browser/window/window-zoom-action-bar.d.ts.map +1 -0
  120. package/lib/electron-browser/window/window-zoom-action-bar.js +71 -0
  121. package/lib/electron-browser/window/window-zoom-action-bar.js.map +1 -0
  122. package/lib/electron-browser/window/window-zoom-status-bar-item.d.ts +14 -0
  123. package/lib/electron-browser/window/window-zoom-status-bar-item.d.ts.map +1 -0
  124. package/lib/electron-browser/window/window-zoom-status-bar-item.js +87 -0
  125. package/lib/electron-browser/window/window-zoom-status-bar-item.js.map +1 -0
  126. package/lib/electron-common/electron-api.d.ts +1 -1
  127. package/lib/electron-common/electron-api.d.ts.map +1 -1
  128. package/lib/electron-common/electron-main-window-service.d.ts +2 -1
  129. package/lib/electron-common/electron-main-window-service.d.ts.map +1 -1
  130. package/lib/electron-common/electron-window-preferences.d.ts +5 -2
  131. package/lib/electron-common/electron-window-preferences.d.ts.map +1 -1
  132. package/lib/electron-common/electron-window-preferences.js +16 -10
  133. package/lib/electron-common/electron-window-preferences.js.map +1 -1
  134. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  135. package/lib/electron-main/electron-api-main.js +14 -2
  136. package/lib/electron-main/electron-api-main.js.map +1 -1
  137. package/lib/electron-main/electron-main-application.d.ts +1 -0
  138. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  139. package/lib/electron-main/electron-main-application.js +6 -0
  140. package/lib/electron-main/electron-main-application.js.map +1 -1
  141. package/lib/electron-main/electron-main-window-service-impl.d.ts +2 -1
  142. package/lib/electron-main/electron-main-window-service-impl.d.ts.map +1 -1
  143. package/lib/electron-main/electron-main-window-service-impl.js +6 -2
  144. package/lib/electron-main/electron-main-window-service-impl.js.map +1 -1
  145. package/package.json +7 -7
  146. package/src/browser/about-dialog.tsx +3 -1
  147. package/src/browser/common-frontend-contribution.ts +36 -17
  148. package/src/browser/frontend-application-module.ts +2 -1
  149. package/src/browser/hover-service.ts +5 -3
  150. package/src/browser/markdown-rendering/markdown-renderer.ts +1 -1
  151. package/src/browser/menu/browser-menu-plugin.ts +9 -1
  152. package/src/browser/quick-input/quick-input-service.spec.ts +58 -9
  153. package/src/browser/saveable-service.ts +56 -4
  154. package/src/browser/style/hover-service.css +1 -0
  155. package/src/browser/style/index.css +1 -1
  156. package/src/browser/tree/fuzzy-search.ts +2 -120
  157. package/src/browser/tree/tree-view-welcome-widget.tsx +1 -2
  158. package/src/browser/widgets/select-component.tsx +39 -2
  159. package/src/browser/window/default-window-service.ts +6 -1
  160. package/src/browser/window/test/mock-window-service.ts +2 -1
  161. package/src/browser/window/window-service.ts +9 -1
  162. package/src/common/fuzzy-match-utils.spec.ts +141 -0
  163. package/src/common/fuzzy-match-utils.ts +78 -0
  164. package/src/{browser/tree → common}/fuzzy-search.spec.ts +23 -1
  165. package/src/common/fuzzy-search.ts +158 -0
  166. package/src/common/i18n/nls.metadata.json +25379 -24577
  167. package/src/common/logger-sanitizer.spec.ts +54 -1
  168. package/src/common/logger-sanitizer.ts +38 -3
  169. package/src/common/preferences/injectable-preference-proxy.ts +6 -3
  170. package/src/common/preferences/preference-configurations.ts +2 -2
  171. package/src/common/preferences/preference-provider-impl.ts +6 -3
  172. package/src/common/preferences/preference-proxy.ts +6 -4
  173. package/src/common/preferences/preference-service.ts +6 -3
  174. package/src/common/quick-pick-service.ts +65 -11
  175. package/src/common/uri.ts +1 -1
  176. package/src/electron-browser/menu/electron-main-menu-factory.ts +4 -6
  177. package/src/electron-browser/menu/electron-menu-contribution.ts +4 -4
  178. package/src/electron-browser/messaging/electron-local-ws-connection-source.ts +4 -2
  179. package/src/electron-browser/preload.ts +2 -2
  180. package/src/electron-browser/style/window-zoom-action-bar.css +57 -0
  181. package/src/electron-browser/window/electron-secondary-window-service.ts +32 -1
  182. package/src/electron-browser/window/electron-window-module.ts +4 -0
  183. package/src/electron-browser/window/electron-window-service.ts +10 -7
  184. package/src/electron-browser/window/window-zoom-action-bar.tsx +115 -0
  185. package/src/electron-browser/window/window-zoom-status-bar-item.ts +81 -0
  186. package/src/electron-common/electron-api.ts +1 -1
  187. package/src/electron-common/electron-main-window-service.ts +2 -1
  188. package/src/electron-common/electron-window-preferences.ts +19 -11
  189. package/src/electron-main/electron-api-main.ts +12 -2
  190. package/src/electron-main/electron-main-application.ts +7 -0
  191. package/src/electron-main/electron-main-window-service-impl.ts +7 -2
  192. package/lib/browser/tree/fuzzy-search.spec.d.ts.map +0 -1
  193. package/lib/browser/tree/fuzzy-search.spec.js.map +0 -1
  194. /package/lib/{browser/tree → common}/fuzzy-search.spec.d.ts +0 -0
@@ -0,0 +1,115 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+ import { createRoot } from 'react-dom/client';
17
+ import * as React from '../../../shared/react';
18
+ import { ACTION_ITEM, codicon, CommonCommands, KeybindingRegistry } from '../../browser';
19
+ import { Command, CommandRegistry, nls } from '../../common';
20
+ import { PREF_WINDOW_ZOOM_LEVEL, ZoomLevel } from '../../electron-common/electron-window-preferences';
21
+ import { ElectronCommands } from '../menu/electron-menu-contribution';
22
+
23
+ export interface WindowZoomActionBarProps {
24
+ container: HTMLElement
25
+ zoomLevel: number;
26
+ commandRegistry: CommandRegistry;
27
+ keybindingRegistry: KeybindingRegistry;
28
+ }
29
+
30
+ export class WindowZoomActionBar extends React.Component<WindowZoomActionBarProps> {
31
+
32
+ protected getTitleWithKeybinding(command: Command): string {
33
+ const bindings = this.props.keybindingRegistry.getKeybindingsForCommand(command.id);
34
+ // Only consider the first active keybinding.
35
+ if (bindings.length) {
36
+ const binding = bindings.find(b => this.props.keybindingRegistry.isEnabledInScope(b, this.props.container));
37
+ if (binding) {
38
+ const accelerator = this.props.keybindingRegistry.acceleratorFor(binding, '+', true);
39
+ return `${command.label} (${accelerator})`;
40
+ }
41
+ }
42
+ return command.label!;
43
+ }
44
+
45
+ protected renderActionButton(command: Command, iconName?: string, commandArgs: unknown[] = []): React.ReactNode {
46
+ return (
47
+ <div
48
+ className={`${ACTION_ITEM} window-zoom-button`}
49
+ role='button'
50
+ tabIndex={0}
51
+ aria-label={command.label}
52
+ title={this.getTitleWithKeybinding(command)}
53
+ onClick={() => this.props.commandRegistry.executeCommand(command.id, ...commandArgs)}
54
+ onKeyDown={e => {
55
+ if (e.key === 'Enter' || e.key === ' ') {
56
+ e.preventDefault();
57
+ this.props.commandRegistry.executeCommand(command.id, ...commandArgs);
58
+ }
59
+ }}
60
+ >
61
+ {iconName ? <div className={codicon(iconName)}></div> : <div>{command.label}</div>}
62
+ </div>
63
+ );
64
+ }
65
+
66
+ protected renderZoomDisplay(): React.ReactNode {
67
+ const percentage = Math.round(100 * Math.pow(ZoomLevel.ZOOM_BASE, this.props.zoomLevel));
68
+ const zoomLevelText = nls.localizeByDefault('Zoom Level: {0} ({1}%)', this.props.zoomLevel.toString(), percentage.toString());
69
+ return (
70
+ <div
71
+ className='window-zoom-display'
72
+ role='status'
73
+ aria-live='polite'
74
+ aria-atomic='true'
75
+ aria-label={zoomLevelText}
76
+ title={zoomLevelText}
77
+ >
78
+ <div>{this.props.zoomLevel}</div>
79
+ </div>
80
+ );
81
+ }
82
+
83
+ override render(): React.ReactNode {
84
+ return (
85
+ <>
86
+ {this.renderActionButton(ElectronCommands.ZOOM_OUT, 'remove')}
87
+ {this.renderZoomDisplay()}
88
+ {this.renderActionButton(ElectronCommands.ZOOM_IN, 'plus')}
89
+ {this.renderActionButton(ElectronCommands.RESET_ZOOM)}
90
+ {this.renderActionButton(CommonCommands.OPEN_PREFERENCES, 'settings-gear', [PREF_WINDOW_ZOOM_LEVEL])}
91
+ </>
92
+ );
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Helper function to render the WindowZoomActionBar React component into a DOM container element.
98
+ * This function can be called from a TypeScript file without JSX.
99
+ */
100
+ export function renderWindowZoomActionBar(
101
+ container: HTMLElement,
102
+ zoomLevel: number,
103
+ commandRegistry: CommandRegistry,
104
+ keybindingRegistry: KeybindingRegistry,
105
+ ): void {
106
+ const root = createRoot(container);
107
+ root.render(
108
+ <WindowZoomActionBar
109
+ container={container}
110
+ zoomLevel={zoomLevel}
111
+ commandRegistry={commandRegistry}
112
+ keybindingRegistry={keybindingRegistry}
113
+ />
114
+ );
115
+ }
@@ -0,0 +1,81 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { inject, injectable } from 'inversify';
18
+ import { FrontendApplicationContribution, KeybindingRegistry, StatusBar, StatusBarAlignment } from '../../browser';
19
+ import { CommandRegistry, nls, PreferenceService } from '../../common';
20
+ import { PREF_WINDOW_ZOOM_LEVEL } from '../../electron-common/electron-window-preferences';
21
+ import { renderWindowZoomActionBar } from './window-zoom-action-bar';
22
+
23
+ @injectable()
24
+ export class WindowZoomStatusBarItem implements FrontendApplicationContribution {
25
+
26
+ static readonly ID = 'window-zoom-status';
27
+
28
+ @inject(StatusBar)
29
+ protected readonly statusBar: StatusBar;
30
+
31
+ @inject(PreferenceService)
32
+ protected readonly preferenceService: PreferenceService;
33
+
34
+ @inject(CommandRegistry)
35
+ protected readonly commandRegistry: CommandRegistry;
36
+
37
+ @inject(KeybindingRegistry)
38
+ protected readonly keybindingRegistry: KeybindingRegistry;
39
+
40
+ onStart(): void {
41
+ this.preferenceService.ready.then(() => {
42
+ this.updateZoomStatusBarItem();
43
+
44
+ this.preferenceService.onPreferenceChanged(e => {
45
+ if (e.preferenceName === PREF_WINDOW_ZOOM_LEVEL) {
46
+ this.updateZoomStatusBarItem();
47
+ }
48
+ });
49
+ });
50
+ }
51
+
52
+ protected updateZoomStatusBarItem(): void {
53
+ const zoomLevel = this.getZoomLevel();
54
+
55
+ if (zoomLevel === 0) {
56
+ // Hide the status bar item when zoom is at default level
57
+ this.statusBar.removeElement(WindowZoomStatusBarItem.ID);
58
+ } else {
59
+ this.statusBar.setElement(WindowZoomStatusBarItem.ID, {
60
+ name: nls.localizeByDefault('Window Zoom'),
61
+ text: zoomLevel > 0 ? '$(codicon-zoom-in)' : '$(codicon-zoom-out)',
62
+ alignment: StatusBarAlignment.RIGHT,
63
+ priority: 110,
64
+ tooltip: () => this.createTooltip(zoomLevel),
65
+ backgroundColor: 'var(--theia-statusBarItem-prominentBackground)',
66
+ color: 'var(--theia-statusBarItem-prominentForeground)'
67
+ });
68
+ }
69
+ }
70
+
71
+ protected getZoomLevel(): number {
72
+ return this.preferenceService.get(PREF_WINDOW_ZOOM_LEVEL, 0);
73
+ }
74
+
75
+ protected createTooltip(zoomLevel: number): HTMLElement {
76
+ const container = document.createElement('div');
77
+ container.className = 'window-zoom-action-bar';
78
+ renderWindowZoomActionBar(container, zoomLevel, this.commandRegistry, this.keybindingRegistry);
79
+ return container;
80
+ }
81
+ }
@@ -85,7 +85,7 @@ export interface TheiaCoreAPI {
85
85
  toggleDevTools(): void;
86
86
  openDevToolsForWindow(windowName: string): void;
87
87
  getZoomLevel(): Promise<number>;
88
- setZoomLevel(desired: number): void;
88
+ setZoomLevel(desired: number, windowName?: string): void;
89
89
 
90
90
  isFullScreenable(): boolean; // TODO: this should really be async, since it blocks the renderer process
91
91
  isFullScreen(): boolean; // TODO: this should really be async, since it blocks the renderer process
@@ -20,5 +20,6 @@ export const electronMainWindowServicePath = '/services/electron-window';
20
20
  export const ElectronMainWindowService = Symbol('ElectronMainWindowService');
21
21
  export interface ElectronMainWindowService {
22
22
  openNewWindow(url: string, options?: NewWindowOptions): undefined;
23
- openNewDefaultWindow(params?: WindowSearchParams): void;
23
+ openNewDefaultWindow(params?: WindowSearchParams): Promise<number>;
24
+ closeWindow(windowId: number): void;
24
25
  }
@@ -27,20 +27,28 @@ export namespace ZoomLevel {
27
27
  export const MAX = 9;
28
28
  // amount to increment or decrement the window zoom level.
29
29
  export const VARIATION = 0.5;
30
+ // Chromium's base for zoom factor calculation: zoomFactor = pow(ZOOM_BASE, zoomLevel)
31
+ // See https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/common/page/page_zoom.cc
32
+ export const ZOOM_BASE = 1.2;
30
33
  }
31
34
 
35
+ export const PREF_WINDOW_ZOOM_LEVEL = 'window.zoomLevel';
36
+ export const PREF_WINDOW_TITLE_BAR_STYLE = 'window.titleBarStyle';
37
+
32
38
  export const electronWindowPreferencesSchema: PreferenceSchema = {
33
39
  properties: {
34
- 'window.zoomLevel': {
35
- 'type': 'number',
36
- 'default': ZoomLevel.DEFAULT,
37
- 'minimum': ZoomLevel.MIN,
38
- 'maximum': ZoomLevel.MAX,
39
- 'scope': PreferenceScope.User,
40
- // eslint-disable-next-line max-len
41
- 'description': nls.localizeByDefault("Adjust the default zoom level for all windows. Each increment above `0` (e.g. `1`) or below (e.g. `-1`) represents zooming `20%` larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity. See {0} for configuring if the 'Zoom In' and 'Zoom Out' commands apply the zoom level to all windows or only the active window.")
40
+ [PREF_WINDOW_ZOOM_LEVEL]: {
41
+ type: 'number',
42
+ default: ZoomLevel.DEFAULT,
43
+ minimum: ZoomLevel.MIN,
44
+ maximum: ZoomLevel.MAX,
45
+ scope: PreferenceScope.User,
46
+ markdownDescription: nls.localize('theia/core/window/zoomLevelPref',
47
+ 'Adjust the default zoom level for all windows.\
48
+ Each increment of `0.5` above `0` (e.g. `0.5`) or below (e.g. `-0.5`) represents zooming approximately `10%` larger or smaller.\
49
+ You can also enter other decimal values to adjust the zoom level with a finer granularity.')
42
50
  },
43
- 'window.titleBarStyle': {
51
+ [PREF_WINDOW_TITLE_BAR_STYLE]: {
44
52
  type: 'string',
45
53
  enum: ['native', 'custom'],
46
54
  default: isWindows ? 'custom' : 'native',
@@ -52,8 +60,8 @@ export const electronWindowPreferencesSchema: PreferenceSchema = {
52
60
  };
53
61
 
54
62
  export class ElectronWindowConfiguration {
55
- 'window.zoomLevel': number;
56
- 'window.titleBarStyle': 'native' | 'custom';
63
+ [PREF_WINDOW_ZOOM_LEVEL]: number;
64
+ [PREF_WINDOW_TITLE_BAR_STYLE]: 'native' | 'custom';
57
65
  }
58
66
 
59
67
  export const ElectronWindowPreferenceContribution = Symbol('ElectronWindowPreferenceContribution');
@@ -217,8 +217,18 @@ export class TheiaMainApi implements ElectronMainApplicationContribution {
217
217
  }
218
218
  });
219
219
 
220
- ipcMain.on(CHANNEL_SET_ZOOM_LEVEL, (event, zoomLevel: number) => {
221
- event.sender.setZoomLevel(zoomLevel);
220
+ ipcMain.on(CHANNEL_SET_ZOOM_LEVEL, (event, zoomLevel: number, windowName: string | undefined) => {
221
+ let electronWindow;
222
+ if (windowName) {
223
+ electronWindow = BrowserWindow.getAllWindows().find(win => win.webContents.mainFrame.name === windowName);
224
+ } else {
225
+ electronWindow = BrowserWindow.fromWebContents(event.sender);
226
+ }
227
+ if (electronWindow) {
228
+ electronWindow.webContents.setZoomLevel(zoomLevel);
229
+ } else {
230
+ console.warn(`There is no known window '${windowName}'. Thus, the zoom level could not be set.`);
231
+ }
222
232
  });
223
233
 
224
234
  ipcMain.handle(CHANNEL_GET_ZOOM_LEVEL, event => event.sender.getZoomLevel());
@@ -502,6 +502,13 @@ export class ElectronMainApplication {
502
502
  };
503
503
  }
504
504
 
505
+ closeWindowById(webContentsId: number): void {
506
+ const window = this.windows.get(webContentsId);
507
+ if (window) {
508
+ window.close(StopReason.Close);
509
+ }
510
+ }
511
+
505
512
  async openDefaultWindow(params?: WindowSearchParams): Promise<BrowserWindow> {
506
513
  const options = this.getDefaultTheiaWindowOptions();
507
514
  const [uri, electronWindow] = await Promise.all([this.createWindowUri(params), this.reuseOrCreateWindow(options)]);
@@ -37,8 +37,13 @@ export class ElectronMainWindowServiceImpl implements ElectronMainWindowService
37
37
  return undefined;
38
38
  }
39
39
 
40
- openNewDefaultWindow(params?: WindowSearchParams): void {
41
- this.app.openDefaultWindow(params);
40
+ async openNewDefaultWindow(params?: WindowSearchParams): Promise<number> {
41
+ const electronWindow = await this.app.openDefaultWindow(params);
42
+ return electronWindow.webContents.id;
43
+ }
44
+
45
+ closeWindow(windowId: number): void {
46
+ this.app.closeWindowById(windowId);
42
47
  }
43
48
 
44
49
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"fuzzy-search.spec.d.ts","sourceRoot":"","sources":["../../../src/browser/tree/fuzzy-search.spec.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fuzzy-search.spec.js","sourceRoot":"","sources":["../../../src/browser/tree/fuzzy-search.spec.ts"],"names":[],"mappings":"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"}