UNPKG

5.58 kBJavaScriptView Raw
1"use strict";
2// *****************************************************************************
3// Copyright (C) 2017 TypeFox and others.
4//
5// This program and the accompanying materials are made available under the
6// terms of the Eclipse Public License v. 2.0 which is available at
7// http://www.eclipse.org/legal/epl-2.0.
8//
9// This Source Code may also be made available under the following Secondary
10// Licenses when the conditions for such availability set forth in the Eclipse
11// Public License v. 2.0 are satisfied: GNU General Public License, version 2
12// with the GNU Classpath Exception which is available at
13// https://www.gnu.org/software/classpath/license.html.
14//
15// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
16// *****************************************************************************
17var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21 return c > 3 && r && Object.defineProperty(target, key, r), r;
22};
23var __metadata = (this && this.__metadata) || function (k, v) {
24 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25};
26Object.defineProperty(exports, "__esModule", { value: true });
27exports.ElectronWindowService = void 0;
28const electronRemote = require("../../../electron-shared/@electron/remote");
29const inversify_1 = require("inversify");
30const electron = require("../../../electron-shared/electron");
31const default_window_service_1 = require("../../browser/window/default-window-service");
32const electron_main_window_service_1 = require("../../electron-common/electron-main-window-service");
33const electron_window_preferences_1 = require("./electron-window-preferences");
34const electron_messages_1 = require("../../electron-common/messaging/electron-messages");
35let ElectronWindowService = class ElectronWindowService extends default_window_service_1.DefaultWindowService {
36 constructor() {
37 super(...arguments);
38 /**
39 * Lock to prevent multiple parallel executions of the `beforeunload` listener.
40 */
41 this.isUnloading = false;
42 /**
43 * Close the window right away when `true`, else check if we can unload.
44 */
45 this.closeOnUnload = false;
46 }
47 openNewWindow(url, { external } = {}) {
48 this.delegate.openNewWindow(url, { external });
49 return undefined;
50 }
51 openNewDefaultWindow() {
52 this.delegate.openNewDefaultWindow();
53 }
54 init() {
55 // Update the default zoom level on startup when the preferences event is fired.
56 this.electronWindowPreferences.onPreferenceChanged(e => {
57 if (e.preferenceName === 'window.zoomLevel') {
58 this.updateWindowZoomLevel();
59 }
60 });
61 }
62 registerUnloadListeners() {
63 electron.ipcRenderer.on(electron_messages_1.CLOSE_REQUESTED_SIGNAL, (_event, closeRequestEvent) => this.handleCloseRequestedEvent(closeRequestEvent));
64 window.addEventListener('unload', () => this.onUnloadEmitter.fire());
65 }
66 /**
67 * Run when ElectronMain detects a `close` event and emits a `close-requested` event.
68 * Should send an event to `electron.ipcRenderer` on the event's `confirmChannel` if it is safe to exit
69 * after running FrontendApplication `onWillStop` handlers or on the `cancelChannel` if it is not safe to exit.
70 */
71 async handleCloseRequestedEvent(event) {
72 const safeToClose = await this.isSafeToShutDown(event.reason);
73 if (safeToClose) {
74 console.debug(`Shutting down because of ${electron_messages_1.StopReason[event.reason]} request.`);
75 electron.ipcRenderer.send(event.confirmChannel);
76 }
77 else {
78 electron.ipcRenderer.send(event.cancelChannel);
79 }
80 }
81 /**
82 * Updates the window zoom level based on the preference value.
83 */
84 updateWindowZoomLevel() {
85 const preferredZoomLevel = this.electronWindowPreferences['window.zoomLevel'];
86 const webContents = electronRemote.getCurrentWindow().webContents;
87 if (webContents.getZoomLevel() !== preferredZoomLevel) {
88 webContents.setZoomLevel(preferredZoomLevel);
89 }
90 }
91 reload() {
92 electron.ipcRenderer.send(electron_messages_1.RELOAD_REQUESTED_SIGNAL);
93 }
94};
95__decorate([
96 (0, inversify_1.inject)(electron_main_window_service_1.ElectronMainWindowService),
97 __metadata("design:type", Object)
98], ElectronWindowService.prototype, "delegate", void 0);
99__decorate([
100 (0, inversify_1.inject)(electron_window_preferences_1.ElectronWindowPreferences),
101 __metadata("design:type", Object)
102], ElectronWindowService.prototype, "electronWindowPreferences", void 0);
103__decorate([
104 (0, inversify_1.postConstruct)(),
105 __metadata("design:type", Function),
106 __metadata("design:paramtypes", []),
107 __metadata("design:returntype", void 0)
108], ElectronWindowService.prototype, "init", null);
109ElectronWindowService = __decorate([
110 (0, inversify_1.injectable)()
111], ElectronWindowService);
112exports.ElectronWindowService = ElectronWindowService;
113//# sourceMappingURL=electron-window-service.js.map
\No newline at end of file