@theia/core 1.50.1 → 1.51.0
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.
- package/README.md +6 -6
- package/i18n/nls.cs.json +0 -7
- package/i18n/nls.de.json +0 -7
- package/i18n/nls.es.json +0 -7
- package/i18n/nls.fr.json +0 -7
- package/i18n/nls.hu.json +0 -7
- package/i18n/nls.it.json +0 -7
- package/i18n/nls.ja.json +0 -7
- package/i18n/nls.json +0 -7
- package/i18n/nls.pl.json +0 -7
- package/i18n/nls.pt-br.json +0 -7
- package/i18n/nls.pt-pt.json +0 -7
- package/i18n/nls.ru.json +0 -7
- package/i18n/nls.zh-cn.json +0 -7
- package/lib/browser/authentication-service.d.ts +6 -3
- package/lib/browser/authentication-service.d.ts.map +1 -1
- package/lib/browser/authentication-service.js +11 -1
- package/lib/browser/authentication-service.js.map +1 -1
- package/lib/browser/browser.d.ts +6 -1
- package/lib/browser/browser.d.ts.map +1 -1
- package/lib/browser/browser.js +7 -2
- package/lib/browser/browser.js.map +1 -1
- package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
- package/lib/browser/common-frontend-contribution.js +6 -5
- package/lib/browser/common-frontend-contribution.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js +3 -3
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/http-open-handler.d.ts +1 -0
- package/lib/browser/http-open-handler.d.ts.map +1 -1
- package/lib/browser/http-open-handler.js +5 -3
- package/lib/browser/http-open-handler.js.map +1 -1
- package/lib/browser/menu/browser-menu-plugin.d.ts +2 -1
- package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
- package/lib/browser/menu/browser-menu-plugin.js +22 -19
- package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
- package/lib/browser/messaging/service-connection-provider.d.ts +15 -1
- package/lib/browser/messaging/service-connection-provider.d.ts.map +1 -1
- package/lib/browser/messaging/service-connection-provider.js +15 -1
- package/lib/browser/messaging/service-connection-provider.js.map +1 -1
- package/lib/browser/saveable.d.ts +14 -1
- package/lib/browser/saveable.d.ts.map +1 -1
- package/lib/browser/saveable.js +10 -1
- package/lib/browser/saveable.js.map +1 -1
- package/lib/browser/shell/additional-views-menu-widget.d.ts +2 -2
- package/lib/browser/shell/additional-views-menu-widget.d.ts.map +1 -1
- package/lib/browser/shell/additional-views-menu-widget.js +8 -4
- package/lib/browser/shell/additional-views-menu-widget.js.map +1 -1
- package/lib/browser/shell/application-shell.d.ts +7 -2
- package/lib/browser/shell/application-shell.d.ts.map +1 -1
- package/lib/browser/shell/application-shell.js +9 -0
- package/lib/browser/shell/application-shell.js.map +1 -1
- package/lib/browser/shell/side-panel-handler.d.ts.map +1 -1
- package/lib/browser/shell/side-panel-handler.js +2 -1
- package/lib/browser/shell/side-panel-handler.js.map +1 -1
- package/lib/browser/shell/sidebar-menu-widget.d.ts +14 -1
- package/lib/browser/shell/sidebar-menu-widget.d.ts.map +1 -1
- package/lib/browser/shell/sidebar-menu-widget.js +51 -13
- package/lib/browser/shell/sidebar-menu-widget.js.map +1 -1
- package/lib/browser/shell/tab-bars.d.ts +5 -4
- package/lib/browser/shell/tab-bars.d.ts.map +1 -1
- package/lib/browser/shell/tab-bars.js +40 -51
- package/lib/browser/shell/tab-bars.js.map +1 -1
- package/lib/browser/shell/theia-dock-panel.d.ts +7 -1
- package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
- package/lib/browser/shell/theia-dock-panel.js +5 -1
- package/lib/browser/shell/theia-dock-panel.js.map +1 -1
- package/lib/browser/widgets/react-renderer.d.ts.map +1 -1
- package/lib/browser/widgets/react-renderer.js +4 -1
- package/lib/browser/widgets/react-renderer.js.map +1 -1
- package/lib/browser-only/frontend-only-application-module.d.ts.map +1 -1
- package/lib/browser-only/frontend-only-application-module.js +1 -0
- package/lib/browser-only/frontend-only-application-module.js.map +1 -1
- package/lib/common/application-protocol.d.ts +1 -0
- package/lib/common/application-protocol.d.ts.map +1 -1
- package/lib/common/menu/menu-model-registry.d.ts +6 -0
- package/lib/common/menu/menu-model-registry.d.ts.map +1 -1
- package/lib/common/menu/menu-model-registry.js +31 -5
- package/lib/common/menu/menu-model-registry.js.map +1 -1
- package/lib/common/preferences/preference-schema.d.ts +1 -0
- package/lib/common/preferences/preference-schema.d.ts.map +1 -1
- package/lib/common/preferences/preference-schema.js.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.js +3 -0
- package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
- package/lib/electron-browser/preload.js +2 -2
- package/lib/electron-browser/preload.js.map +1 -1
- package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-window-module.js +11 -7
- package/lib/electron-browser/window/electron-window-module.js.map +1 -1
- package/lib/electron-browser/window/external-app-open-handler.d.ts +12 -0
- package/lib/electron-browser/window/external-app-open-handler.d.ts.map +1 -0
- package/lib/electron-browser/window/external-app-open-handler.js +42 -0
- package/lib/electron-browser/window/external-app-open-handler.js.map +1 -0
- package/lib/electron-common/electron-api.d.ts +4 -1
- package/lib/electron-common/electron-api.d.ts.map +1 -1
- package/lib/electron-common/electron-api.js.map +1 -1
- package/lib/electron-main/electron-main-application.d.ts +1 -2
- package/lib/electron-main/electron-main-application.d.ts.map +1 -1
- package/lib/electron-main/electron-main-application.js +62 -32
- package/lib/electron-main/electron-main-application.js.map +1 -1
- package/lib/electron-main/electron-main-constants.d.ts +1 -0
- package/lib/electron-main/electron-main-constants.d.ts.map +1 -1
- package/lib/node/application-server.d.ts +1 -0
- package/lib/node/application-server.d.ts.map +1 -1
- package/lib/node/application-server.js +3 -0
- package/lib/node/application-server.js.map +1 -1
- package/package.json +6 -6
- package/src/browser/authentication-service.ts +16 -4
- package/src/browser/browser.ts +6 -1
- package/src/browser/common-frontend-contribution.ts +9 -7
- package/src/browser/frontend-application-module.ts +6 -5
- package/src/browser/http-open-handler.ts +3 -1
- package/src/browser/menu/browser-menu-plugin.ts +27 -20
- package/src/browser/messaging/service-connection-provider.ts +15 -1
- package/src/browser/saveable.ts +17 -1
- package/src/browser/shell/additional-views-menu-widget.tsx +5 -5
- package/src/browser/shell/application-shell.ts +16 -3
- package/src/browser/shell/side-panel-handler.ts +2 -1
- package/src/browser/shell/sidebar-menu-widget.tsx +63 -20
- package/src/browser/shell/tab-bars.ts +39 -56
- package/src/browser/shell/theia-dock-panel.ts +13 -3
- package/src/browser/style/sidepanel.css +6 -3
- package/src/browser/style/tabs.css +1 -1
- package/src/browser/widgets/react-renderer.tsx +4 -1
- package/src/browser-only/frontend-only-application-module.ts +1 -0
- package/src/common/application-protocol.ts +1 -0
- package/src/common/menu/menu-model-registry.ts +36 -5
- package/src/common/preferences/preference-schema.ts +1 -0
- package/src/electron-browser/menu/electron-main-menu-factory.ts +3 -0
- package/src/electron-browser/preload.ts +2 -2
- package/src/electron-browser/window/electron-window-module.ts +11 -7
- package/src/electron-browser/window/external-app-open-handler.ts +42 -0
- package/src/electron-common/electron-api.ts +5 -1
- package/src/electron-main/electron-main-application.ts +70 -35
- package/src/electron-main/electron-main-constants.ts +4 -3
- package/src/node/application-server.ts +4 -0
|
@@ -75,6 +75,7 @@ export interface PreferenceSchemaProperty extends PreferenceItem {
|
|
|
75
75
|
description?: string;
|
|
76
76
|
markdownDescription?: string;
|
|
77
77
|
scope?: 'application' | 'machine' | 'window' | 'resource' | 'language-overridable' | 'machine-overridable' | PreferenceScope;
|
|
78
|
+
tags?: string[];
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
export interface PreferenceDataProperty extends PreferenceItem {
|
|
@@ -101,6 +101,9 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory {
|
|
|
101
101
|
this.keybindingRegistry.onKeybindingsChanged(() => {
|
|
102
102
|
this.setMenuBar();
|
|
103
103
|
});
|
|
104
|
+
this.menuProvider.onDidChange(() => {
|
|
105
|
+
this.setMenuBar();
|
|
106
|
+
});
|
|
104
107
|
}
|
|
105
108
|
|
|
106
109
|
async setMenuBar(): Promise<void> {
|
|
@@ -79,8 +79,8 @@ const api: TheiaCoreAPI = {
|
|
|
79
79
|
showItemInFolder: fsPath => {
|
|
80
80
|
ipcRenderer.send(CHANNEL_SHOW_ITEM_IN_FOLDER, fsPath);
|
|
81
81
|
},
|
|
82
|
-
openWithSystemApp:
|
|
83
|
-
ipcRenderer.send(CHANNEL_OPEN_WITH_SYSTEM_APP,
|
|
82
|
+
openWithSystemApp: location => {
|
|
83
|
+
ipcRenderer.send(CHANNEL_OPEN_WITH_SYSTEM_APP, location);
|
|
84
84
|
},
|
|
85
85
|
attachSecurityToken: (endpoint: string) => ipcRenderer.invoke(CHANNEL_ATTACH_SECURITY_TOKEN, endpoint),
|
|
86
86
|
|
|
@@ -15,18 +15,20 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import { ContainerModule } from 'inversify';
|
|
18
|
-
import {
|
|
19
|
-
import { ElectronWindowService } from './electron-window-service';
|
|
20
|
-
import { FrontendApplicationContribution } from '../../browser/frontend-application-contribution';
|
|
21
|
-
import { ElectronClipboardService } from '../electron-clipboard-service';
|
|
18
|
+
import { OpenHandler } from '../../browser';
|
|
22
19
|
import { ClipboardService } from '../../browser/clipboard-service';
|
|
20
|
+
import { FrontendApplicationContribution } from '../../browser/frontend-application-contribution';
|
|
21
|
+
import { FrontendApplicationStateService } from '../../browser/frontend-application-state';
|
|
22
|
+
import { SecondaryWindowService } from '../../browser/window/secondary-window-service';
|
|
23
|
+
import { WindowService } from '../../browser/window/window-service';
|
|
23
24
|
import { ElectronMainWindowService, electronMainWindowServicePath } from '../../electron-common/electron-main-window-service';
|
|
25
|
+
import { ElectronClipboardService } from '../electron-clipboard-service';
|
|
24
26
|
import { ElectronIpcConnectionProvider } from '../messaging/electron-ipc-connection-source';
|
|
25
|
-
import { bindWindowPreferences } from './electron-window-preferences';
|
|
26
|
-
import { FrontendApplicationStateService } from '../../browser/frontend-application-state';
|
|
27
27
|
import { ElectronFrontendApplicationStateService } from './electron-frontend-application-state';
|
|
28
28
|
import { ElectronSecondaryWindowService } from './electron-secondary-window-service';
|
|
29
|
-
import {
|
|
29
|
+
import { bindWindowPreferences } from './electron-window-preferences';
|
|
30
|
+
import { ElectronWindowService } from './electron-window-service';
|
|
31
|
+
import { ExternalAppOpenHandler } from './external-app-open-handler';
|
|
30
32
|
|
|
31
33
|
export default new ContainerModule((bind, unbind, isBound, rebind) => {
|
|
32
34
|
bind(ElectronMainWindowService).toDynamicValue(context =>
|
|
@@ -38,4 +40,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
|
|
|
38
40
|
bind(ClipboardService).to(ElectronClipboardService).inSingletonScope();
|
|
39
41
|
rebind(FrontendApplicationStateService).to(ElectronFrontendApplicationStateService).inSingletonScope();
|
|
40
42
|
bind(SecondaryWindowService).to(ElectronSecondaryWindowService).inSingletonScope();
|
|
43
|
+
bind(ExternalAppOpenHandler).toSelf().inSingletonScope();
|
|
44
|
+
bind(OpenHandler).toService(ExternalAppOpenHandler);
|
|
41
45
|
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 TypeFox 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 { injectable } from 'inversify';
|
|
18
|
+
import { OpenHandler } from '../../browser/opener-service';
|
|
19
|
+
import URI from '../../common/uri';
|
|
20
|
+
import { HttpOpenHandler } from '../../browser/http-open-handler';
|
|
21
|
+
|
|
22
|
+
export interface ExternalAppOpenHandlerOptions {
|
|
23
|
+
openExternalApp?: boolean
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@injectable()
|
|
27
|
+
export class ExternalAppOpenHandler implements OpenHandler {
|
|
28
|
+
|
|
29
|
+
static readonly PRIORITY: number = HttpOpenHandler.PRIORITY + 100;
|
|
30
|
+
readonly id = 'external-app';
|
|
31
|
+
|
|
32
|
+
canHandle(uri: URI, options?: ExternalAppOpenHandlerOptions): number {
|
|
33
|
+
return (options && options.openExternalApp) ? ExternalAppOpenHandler.PRIORITY : -1;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async open(uri: URI): Promise<undefined> {
|
|
37
|
+
// For files 'file:' scheme, system accepts only the path.
|
|
38
|
+
// For other protocols e.g. 'vscode:' we use the full URI to propagate target app information.
|
|
39
|
+
window.electronTheiaCore.openWithSystemApp(uri.scheme === 'file' ? uri.path.fsPath() : uri.toString(true));
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -56,7 +56,11 @@ export interface TheiaCoreAPI {
|
|
|
56
56
|
focusWindow(name?: string): void;
|
|
57
57
|
|
|
58
58
|
showItemInFolder(fsPath: string): void;
|
|
59
|
-
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @param location The location to open with the system app. This can be a file path or a URL.
|
|
62
|
+
*/
|
|
63
|
+
openWithSystemApp(location: string): void;
|
|
60
64
|
|
|
61
65
|
getTitleBarStyleAtStartup(): Promise<string>;
|
|
62
66
|
setTitleBarStyle(style: string): void;
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import { inject, injectable, named } from 'inversify';
|
|
18
|
-
import { screen, app, BrowserWindow, WebContents, Event as ElectronEvent, BrowserWindowConstructorOptions, nativeImage,
|
|
18
|
+
import { screen, app, BrowserWindow, WebContents, Event as ElectronEvent, BrowserWindowConstructorOptions, nativeImage,
|
|
19
|
+
nativeTheme, shell, dialog } from '../../electron-shared/electron';
|
|
19
20
|
import * as path from 'path';
|
|
20
21
|
import { Argv } from 'yargs';
|
|
21
22
|
import { AddressInfo } from 'net';
|
|
@@ -31,7 +32,7 @@ import { ContributionProvider } from '../common/contribution-provider';
|
|
|
31
32
|
import { ElectronSecurityTokenService } from './electron-security-token-service';
|
|
32
33
|
import { ElectronSecurityToken } from '../electron-common/electron-token';
|
|
33
34
|
import Storage = require('electron-store');
|
|
34
|
-
import { CancellationTokenSource, Disposable, DisposableCollection, isOSX, isWindows } from '../common';
|
|
35
|
+
import { CancellationTokenSource, Disposable, DisposableCollection, Path, isOSX, isWindows } from '../common';
|
|
35
36
|
import { DEFAULT_WINDOW_HASH, WindowSearchParams } from '../common/window';
|
|
36
37
|
import { TheiaBrowserWindowOptions, TheiaElectronWindow, TheiaElectronWindowFactory } from './theia-electron-window';
|
|
37
38
|
import { ElectronMainApplicationGlobals } from './electron-main-constants';
|
|
@@ -410,7 +411,6 @@ export class ElectronMainApplication {
|
|
|
410
411
|
electronWindow.window.on('unmaximize', () => TheiaRendererAPI.sendWindowEvent(electronWindow.window.webContents, 'unmaximize'));
|
|
411
412
|
electronWindow.window.on('focus', () => TheiaRendererAPI.sendWindowEvent(electronWindow.window.webContents, 'focus'));
|
|
412
413
|
this.attachSaveWindowState(electronWindow.window);
|
|
413
|
-
this.configureNativeSecondaryWindowCreation(electronWindow.window);
|
|
414
414
|
|
|
415
415
|
return electronWindow.window;
|
|
416
416
|
}
|
|
@@ -488,31 +488,6 @@ export class ElectronMainApplication {
|
|
|
488
488
|
return window;
|
|
489
489
|
}
|
|
490
490
|
|
|
491
|
-
/** Configures native window creation, i.e. using window.open or links with target "_blank" in the frontend. */
|
|
492
|
-
protected configureNativeSecondaryWindowCreation(electronWindow: BrowserWindow): void {
|
|
493
|
-
electronWindow.webContents.setWindowOpenHandler(() => {
|
|
494
|
-
const { minWidth, minHeight } = this.getDefaultOptions();
|
|
495
|
-
const options: BrowserWindowConstructorOptions = {
|
|
496
|
-
...this.getDefaultTheiaSecondaryWindowBounds(),
|
|
497
|
-
// We always need the native window frame for now because the secondary window does not have Theia's title bar by default.
|
|
498
|
-
// In 'custom' title bar mode this would leave the window without any window controls (close, min, max)
|
|
499
|
-
// TODO set to this.useNativeWindowFrame when secondary windows support a custom title bar.
|
|
500
|
-
frame: true,
|
|
501
|
-
minWidth,
|
|
502
|
-
minHeight
|
|
503
|
-
};
|
|
504
|
-
if (!this.useNativeWindowFrame) {
|
|
505
|
-
// If the main window does not have a native window frame, do not show an icon in the secondary window's native title bar.
|
|
506
|
-
// The data url is a 1x1 transparent png
|
|
507
|
-
options.icon = nativeImage.createFromDataURL('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQI12P4DwQACfsD/WMmxY8AAAAASUVORK5CYII=');
|
|
508
|
-
}
|
|
509
|
-
return {
|
|
510
|
-
action: 'allow',
|
|
511
|
-
overrideBrowserWindowOptions: options,
|
|
512
|
-
};
|
|
513
|
-
});
|
|
514
|
-
}
|
|
515
|
-
|
|
516
491
|
/**
|
|
517
492
|
* "Gently" close all windows, application will not stop if a `beforeunload` handler returns `false`.
|
|
518
493
|
*/
|
|
@@ -714,6 +689,7 @@ export class ElectronMainApplication {
|
|
|
714
689
|
app.on('will-quit', this.onWillQuit.bind(this));
|
|
715
690
|
app.on('second-instance', this.onSecondInstance.bind(this));
|
|
716
691
|
app.on('window-all-closed', this.onWindowAllClosed.bind(this));
|
|
692
|
+
app.on('web-contents-created', this.onWebContentsCreated.bind(this));
|
|
717
693
|
}
|
|
718
694
|
|
|
719
695
|
protected onWillQuit(event: ElectronEvent): void {
|
|
@@ -721,14 +697,73 @@ export class ElectronMainApplication {
|
|
|
721
697
|
}
|
|
722
698
|
|
|
723
699
|
protected async onSecondInstance(event: ElectronEvent, argv: string[], cwd: string): Promise<void> {
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
700
|
+
createYargs(this.processArgv.getProcessArgvWithoutBin(argv), process.cwd())
|
|
701
|
+
.help(false)
|
|
702
|
+
.command('$0 [file]', false,
|
|
703
|
+
cmd => cmd
|
|
704
|
+
.positional('file', { type: 'string' }),
|
|
705
|
+
async args => {
|
|
706
|
+
this.handleMainCommand({
|
|
707
|
+
file: args.file,
|
|
708
|
+
cwd: process.cwd(),
|
|
709
|
+
secondInstance: true
|
|
710
|
+
});
|
|
711
|
+
},
|
|
712
|
+
).parse();
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
protected onWebContentsCreated(event: ElectronEvent, webContents: WebContents): void {
|
|
716
|
+
// Block any in-page navigation except loading the secondary window contents
|
|
717
|
+
webContents.on('will-navigate', evt => {
|
|
718
|
+
if (new URI(evt.url).path.fsPath() !== new Path(this.globals.THEIA_SECONDARY_WINDOW_HTML_PATH).fsPath()) {
|
|
719
|
+
evt.preventDefault();
|
|
729
720
|
}
|
|
730
|
-
|
|
731
|
-
|
|
721
|
+
});
|
|
722
|
+
|
|
723
|
+
webContents.setWindowOpenHandler(details => {
|
|
724
|
+
// if it's a secondary window, allow it to open
|
|
725
|
+
if (new URI(details.url).path.fsPath() === new Path(this.globals.THEIA_SECONDARY_WINDOW_HTML_PATH).fsPath()) {
|
|
726
|
+
const { minWidth, minHeight } = this.getDefaultOptions();
|
|
727
|
+
const options: BrowserWindowConstructorOptions = {
|
|
728
|
+
...this.getDefaultTheiaSecondaryWindowBounds(),
|
|
729
|
+
// We always need the native window frame for now because the secondary window does not have Theia's title bar by default.
|
|
730
|
+
// In 'custom' title bar mode this would leave the window without any window controls (close, min, max)
|
|
731
|
+
// TODO set to this.useNativeWindowFrame when secondary windows support a custom title bar.
|
|
732
|
+
frame: true,
|
|
733
|
+
minWidth,
|
|
734
|
+
minHeight
|
|
735
|
+
};
|
|
736
|
+
if (!this.useNativeWindowFrame) {
|
|
737
|
+
// If the main window does not have a native window frame, do not show an icon in the secondary window's native title bar.
|
|
738
|
+
// The data url is a 1x1 transparent png
|
|
739
|
+
options.icon = nativeImage.createFromDataURL(
|
|
740
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQI12P4DwQACfsD/WMmxY8AAAAASUVORK5CYII=');
|
|
741
|
+
}
|
|
742
|
+
return {
|
|
743
|
+
action: 'allow',
|
|
744
|
+
overrideBrowserWindowOptions: options,
|
|
745
|
+
};
|
|
746
|
+
} else {
|
|
747
|
+
const uri: URI = new URI(details.url);
|
|
748
|
+
let okToOpen = uri.scheme === 'https' || uri.scheme === 'http';
|
|
749
|
+
if (!okToOpen) {
|
|
750
|
+
const button = dialog.showMessageBoxSync(BrowserWindow.fromWebContents(webContents)!, {
|
|
751
|
+
message: `Open link\n\n${details.url}\n\nin the system handler?`,
|
|
752
|
+
type: 'question',
|
|
753
|
+
title: 'Open Link',
|
|
754
|
+
buttons: ['OK', 'Cancel'],
|
|
755
|
+
defaultId: 1,
|
|
756
|
+
cancelId: 1
|
|
757
|
+
});
|
|
758
|
+
okToOpen = button === 0;
|
|
759
|
+
}
|
|
760
|
+
if (okToOpen) {
|
|
761
|
+
shell.openExternal(details.url, {});
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
return { action: 'deny' };
|
|
765
|
+
}
|
|
766
|
+
});
|
|
732
767
|
}
|
|
733
768
|
|
|
734
769
|
protected onWindowAllClosed(event: ElectronEvent): void {
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
export const ElectronMainApplicationGlobals = Symbol('ElectronMainApplicationGlobals');
|
|
18
18
|
export interface ElectronMainApplicationGlobals {
|
|
19
|
-
readonly THEIA_APP_PROJECT_PATH: string
|
|
20
|
-
readonly THEIA_BACKEND_MAIN_PATH: string
|
|
21
|
-
readonly THEIA_FRONTEND_HTML_PATH: string
|
|
19
|
+
readonly THEIA_APP_PROJECT_PATH: string;
|
|
20
|
+
readonly THEIA_BACKEND_MAIN_PATH: string;
|
|
21
|
+
readonly THEIA_FRONTEND_HTML_PATH: string;
|
|
22
|
+
readonly THEIA_SECONDARY_WINDOW_HTML_PATH: string
|
|
22
23
|
}
|
|
@@ -49,6 +49,10 @@ export class ApplicationServerImpl implements ApplicationServer {
|
|
|
49
49
|
return Promise.resolve(this.applicationPackage.projectPath);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
getApplicationPlatform(): Promise<string> {
|
|
53
|
+
return Promise.resolve(`${process.platform}-${process.arch}`);
|
|
54
|
+
}
|
|
55
|
+
|
|
52
56
|
async getBackendOS(): Promise<OS.Type> {
|
|
53
57
|
return OS.type();
|
|
54
58
|
}
|