From 38adb5741b241081dd3f30de2f9afdd708cc9fa5 Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Tue, 29 Oct 2024 16:19:58 -0400 Subject: [PATCH] fix: app close issue in phoenix --- src/gui/src/helpers.js | 2 ++ src/gui/src/services/ExecService.js | 6 ++++++ .../src/puter-shell/providers/PuterAppCommandProvider.js | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/src/gui/src/helpers.js b/src/gui/src/helpers.js index 99309769f..7c6a010fb 100644 --- a/src/gui/src/helpers.js +++ b/src/gui/src/helpers.js @@ -2522,6 +2522,8 @@ window.report_app_launched = (instance_id, { uses_sdk = true }) => { }; // Run any callbacks to say that the app has closed +// ref(./services/ExecService.js): this is called from ExecService.js on +// close if the app does not use puter.js window.report_app_closed = (instance_id, status_code) => { const el_window = window.window_for_app_instance(instance_id); diff --git a/src/gui/src/services/ExecService.js b/src/gui/src/services/ExecService.js index 69ecd1708..bb2317514 100644 --- a/src/gui/src/services/ExecService.js +++ b/src/gui/src/services/ExecService.js @@ -79,6 +79,12 @@ export class ExecService extends Service { // We also have to report an extra close event because the real one was sent already window.report_app_closed(child_process.uuid); } + + process.references.iframe.contentWindow.postMessage({ + msg: 'appClosed', + appInstanceID: connection.forward.uuid, + statusCode: 0, + }); }); return { diff --git a/src/phoenix/src/puter-shell/providers/PuterAppCommandProvider.js b/src/phoenix/src/puter-shell/providers/PuterAppCommandProvider.js index ff8889754..a07839756 100644 --- a/src/phoenix/src/puter-shell/providers/PuterAppCommandProvider.js +++ b/src/phoenix/src/puter-shell/providers/PuterAppCommandProvider.js @@ -18,6 +18,7 @@ */ import { Exit } from '../coreutils/coreutil_lib/exit.js'; import { signals } from '../../ansi-shell/signals.js'; +import { TeePromise } from '../../promise.js'; const BUILT_IN_APPS = [ 'explorer', @@ -72,6 +73,10 @@ export class PuterAppCommandProvider { ctx.shell.addEventListener('signal.window-resize', resize_listener); // Wait for app to close. + // console.log('waiting for app to close (phoenix)', window, { + // child_appid: child.targetAppInstanceID, + // phoen_appid: puter.appInstanceID, + // }); const app_close_promise = new Promise((resolve, reject) => { child.on('close', (data) => { if ((data.statusCode ?? 0) != 0) {