mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-10-07 10:38:30 +00:00
Avoid deleting the workspace when it's still in use.
- From now on, NSFW service disposes after last reference is removed. No more 10sec delay. - Moved the temp workspace deletion to a startup task. - Can set initial task for the window from electron-main. - Removed the `browser-app`. Closes #39 Signed-off-by: Akos Kitta <a.kitta@arduino.cc>
This commit is contained in:
@@ -1,10 +1,14 @@
|
||||
import * as remote from '@theia/core/electron-shared/@electron/remote';
|
||||
import { ipcRenderer } from '@theia/core/electron-shared/electron';
|
||||
import {
|
||||
ConnectionStatus,
|
||||
ConnectionStatusService,
|
||||
} from '@theia/core/lib/browser/connection-status-service';
|
||||
import { nls } from '@theia/core/lib/common';
|
||||
import { Deferred } from '@theia/core/lib/common/promise-util';
|
||||
import { NewWindowOptions } from '@theia/core/lib/common/window';
|
||||
import { ElectronWindowService as TheiaElectronWindowService } from '@theia/core/lib/electron-browser/window/electron-window-service';
|
||||
import { RELOAD_REQUESTED_SIGNAL } from '@theia/core/lib/electron-common/messaging/electron-messages';
|
||||
import {
|
||||
inject,
|
||||
injectable,
|
||||
@@ -12,6 +16,7 @@ import {
|
||||
} from '@theia/core/shared/inversify';
|
||||
import { WindowServiceExt } from '../../../browser/theia/core/window-service-ext';
|
||||
import { ElectronMainWindowServiceExt } from '../../../electron-common/electron-main-window-service-ext';
|
||||
import { StartupTask } from '../../../electron-common/startup-task';
|
||||
|
||||
@injectable()
|
||||
export class ElectronWindowService
|
||||
@@ -60,14 +65,30 @@ export class ElectronWindowService
|
||||
return response === 0; // 'Yes', close the window.
|
||||
}
|
||||
|
||||
private _firstWindow: boolean | undefined;
|
||||
private _firstWindow: Deferred<boolean> | undefined;
|
||||
async isFirstWindow(): Promise<boolean> {
|
||||
if (this._firstWindow === undefined) {
|
||||
this._firstWindow = new Deferred<boolean>();
|
||||
const windowId = remote.getCurrentWindow().id; // This is expensive and synchronous so we check it once per FE.
|
||||
this._firstWindow = await this.mainWindowServiceExt.isFirstWindow(
|
||||
windowId
|
||||
);
|
||||
this.mainWindowServiceExt
|
||||
.isFirstWindow(windowId)
|
||||
.then((firstWindow) => this._firstWindow?.resolve(firstWindow));
|
||||
}
|
||||
return this._firstWindow.promise;
|
||||
}
|
||||
|
||||
// Overridden because the default Theia implementation destroys the additional properties of the `options` arg, such as `tasks`.
|
||||
override openNewWindow(url: string, options?: NewWindowOptions): undefined {
|
||||
return this.delegate.openNewWindow(url, options);
|
||||
}
|
||||
|
||||
// Overridden to support optional task owner params and make `tsc` happy.
|
||||
override reload(options?: StartupTask.Owner): void {
|
||||
if (options?.tasks && options.tasks.length) {
|
||||
const { tasks } = options;
|
||||
ipcRenderer.send(RELOAD_REQUESTED_SIGNAL, { tasks });
|
||||
} else {
|
||||
ipcRenderer.send(RELOAD_REQUESTED_SIGNAL);
|
||||
}
|
||||
return this._firstWindow;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user