From b79284afe8c615cde69e6b441d57882ea2ba641b Mon Sep 17 00:00:00 2001 From: Ian Wehrman Date: Fri, 3 May 2013 13:23:05 -0700 Subject: [PATCH] Allow mulitple modal dialogs to work together by maintaing a stack of keydownHandlers, only the top-most of which are enabled. --- src/widgets/Dialogs.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/widgets/Dialogs.js b/src/widgets/Dialogs.js index cfeececc72c..4e686c4c743 100644 --- a/src/widgets/Dialogs.js +++ b/src/widgets/Dialogs.js @@ -51,6 +51,8 @@ define(function (require, exports, module) { DIALOG_ID_EXT_CHANGED = "ext-changed-dialog", DIALOG_ID_EXT_DELETED = "ext-deleted-dialog", DIALOG_ID_LIVE_DEVELOPMENT = "live-development-error-dialog"; + + var keydownListeners = []; function _dismissDialog(dlg, buttonId) { dlg.data("buttonId", buttonId); @@ -177,6 +179,11 @@ define(function (require, exports, module) { // Remove keydown event handler window.document.body.removeEventListener("keydown", handleKeyDown, true); + keydownListeners.pop(); + if (keydownListeners.length > 0) { + var previousListener = keydownListeners[keydownListeners.length - 1]; + window.document.body.addEventListener("keydown", previousListener, true); + } KeyBindingManager.setEnabled(true); }).one("shown", function () { // Set focus to the default button @@ -187,6 +194,12 @@ define(function (require, exports, module) { } // Listen for dialog keyboard shortcuts + // if there is already a listener, remove it before adding the current listener + if (keydownListeners.length > 0) { + var previousListener = keydownListeners[keydownListeners.length - 1]; + window.document.body.removeEventListener("keydown", previousListener, true); + } + keydownListeners.push(handleKeyDown); window.document.body.addEventListener("keydown", handleKeyDown, true); KeyBindingManager.setEnabled(false); });