MessageCatcher: Fix stack overflow when re-issuing a trapped message

This makes it possible to trap a message and then re-issue the same message within the action string without an infinite loop.
master
jeremy@jermolene.com 2021-09-20 16:46:26 +01:00
rodzic 0be39cfbc2
commit bdbb884be0
1 zmienionych plików z 7 dodań i 0 usunięć

Wyświetl plik

@ -36,9 +36,14 @@ MessageCatcherWidget.prototype.render = function(parent,nextSibling) {
// Helper to add an event handler
var addEventHandler = function(type,actions) {
if(type && actions) {
var isActionStringExecuting = false;
self.addEventListener(
type,
function(event) {
// Don't trap the event if it came from one of our action handlers
if(isActionStringExecuting) {
return true;
}
// Collect all the event properties into variables
var collectProps = function(obj,prefix) {
prefix = prefix || "";
@ -60,7 +65,9 @@ MessageCatcherWidget.prototype.render = function(parent,nextSibling) {
{
modifier: $tw.keyboardManager.getEventModifierKeyDescriptor(event)
});
isActionStringExecuting = true;
self.invokeActionString(actions,self,event,variables);
isActionStringExecuting = false;
return false;
}
);