diff --git a/src/gui/src/IPC.js b/src/gui/src/IPC.js index 54e1a858d..c9a2fd3be 100644 --- a/src/gui/src/IPC.js +++ b/src/gui/src/IPC.js @@ -257,6 +257,20 @@ const ipc_listener = async (event, handled) => { }, '*'); } //-------------------------------------------------------- + // getInstancesOpen + //-------------------------------------------------------- + else if(event.data.msg === 'getInstancesOpen'){ + // count open windows of this app + let instances_open = $('.window-app[data-app_uuid="'+app_uuid+'"]').length; + + // send number of open instances of this app + target_iframe.contentWindow.postMessage({ + original_msg_id: msg_id, + msg: 'instancesOpenSucceeded', + instancesOpen: instances_open, + }, '*'); + } + //-------------------------------------------------------- // socialShare //-------------------------------------------------------- else if(event.data.msg === 'socialShare' && event.data.url !== undefined){ diff --git a/src/puter-js/src/modules/UI.js b/src/puter-js/src/modules/UI.js index a32741fdc..d302de154 100644 --- a/src/puter-js/src/modules/UI.js +++ b/src/puter-js/src/modules/UI.js @@ -395,6 +395,12 @@ class UI extends EventListener { this.#callbackFunctions[e.data.original_msg_id](appDataItem); } } + // instancesOpenSucceeded + else if(e.data.msg === 'instancesOpenSucceeded'){ + if(e.data.original_msg_id && this.#callbackFunctions[e.data.original_msg_id]){ + this.#callbackFunctions[e.data.original_msg_id](e.data.instancesOpen); + } + } // readAppDataFileSucceeded else if(e.data.msg === 'readAppDataFileSucceeded'){ let appDataItem = new FSItem(e.data.item); @@ -657,6 +663,12 @@ class UI extends EventListener { }) } + instancesOpen = function(callback) { + return new Promise((resolve) => { + this.#postMessageWithCallback('getInstancesOpen', resolve, { }); + }) + } + socialShare = function(url, message, options, callback) { return new Promise((resolve) => { this.#postMessageWithCallback('socialShare', resolve, { url, message, options });