Add callback for safe destroy window

This commit is contained in:
Oleg Korshul
2025-03-12 21:30:04 +03:00
parent 872e7fb1e9
commit f3f45d04dc
3 changed files with 45 additions and 0 deletions

View File

@ -3408,6 +3408,11 @@
if (null != this.pluginsManager)
this.pluginsManager.buttonClick(id, guid, windowId);
};
baseEditorsApi.prototype.asc_pluginButtonDockChanged = function(type, guid, windowId, callback)
{
if (null != this.pluginsManager)
this.pluginsManager.onPluginWindowDockChanged(type, guid, windowId, callback);
};
baseEditorsApi.prototype.asc_pluginEnableMouseEvents = function(isEnable)
{
@ -5571,6 +5576,7 @@
prot['asc_getInputLanguage'] = prot.asc_getInputLanguage;
prot['setPluginsOptions'] = prot.setPluginsOptions;
prot['asc_pluginButtonDockChanged'] = prot.asc_pluginButtonDockChanged;
// passwords
prot["asc_setCurrentPassword"] = prot.asc_setCurrentPassword;

View File

@ -2094,6 +2094,25 @@
{
this.sendEvent("asc_onError", error, level);
};
/**
* Callback from dockChangedEvents.
* @memberof Api
* @typeofeditors ["CDE", "CSE", "CPE", "PDF"]
* @param {string} windowID - The frame ID.
* @alias OnWindowDockChangedCallback
* @since 8.2.2
*/
Api.prototype["pluginMethod_OnWindowDockChangedCallback"] = function(windowID)
{
let key = window.g_asc_plugins.getCurrentPluginGuid() + "_" + windowID;
if (window.g_asc_plugins.dockCallbacks[key])
{
window.g_asc_plugins.dockCallbacks[key]();
delete window.g_asc_plugins.dockCallbacks[key];
}
};
})(window);

View File

@ -162,6 +162,8 @@
"onDocumentContentReady" : true
};
this.mainEvents = {};
this.dockCallbacks = {};
}
CPluginsManager.prototype =
@ -681,6 +683,24 @@
return needsGuids;
},
onPluginWindowDockChanged : function(type, guid, windowId, callback)
{
let runObject = this.runnedPluginsMap[guid];
if (!runObject)
return;
this.dockCallbacks[guid + "_" + windowId] = callback;
let pluginData = new CPluginData();
pluginData.setAttribute("guid", guid);
pluginData.setAttribute("type", "onWindowEvent");
pluginData.setAttribute("windowID", windowId);
pluginData.setAttribute("eventName", "onDockedChanged");
pluginData.setAttribute("eventData", type);
this.sendMessageToFrame(runObject.isConnector ? "" : runObject.frameId, pluginData);
},
getPluginOptions : function(guid)
{
let options = this.api.externalPluginsOptions;