From db2a919d41eed58361e58dc9a44a8db72dc96ea3 Mon Sep 17 00:00:00 2001 From: abose Date: Tue, 7 Jan 2025 09:15:39 +0530 Subject: [PATCH] fix: focus issues with multiple popups --- .../RecentProjects/main.js | 2 -- src/widgets/PopUpManager.js | 19 ++++++++++--------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/extensionsIntegrated/RecentProjects/main.js b/src/extensionsIntegrated/RecentProjects/main.js index af318fed3c..e728bfe472 100644 --- a/src/extensionsIntegrated/RecentProjects/main.js +++ b/src/extensionsIntegrated/RecentProjects/main.js @@ -343,8 +343,6 @@ define(function (require, exports, module) { $("#titlebar .nav").off("click", closeDropdown); $dropdown = null; - MainViewManager.focusActivePane(); - $(window).off("keydown", keydownHook); searchStr = ""; } diff --git a/src/widgets/PopUpManager.js b/src/widgets/PopUpManager.js index f1a43fb136..2c16fcd6f6 100644 --- a/src/widgets/PopUpManager.js +++ b/src/widgets/PopUpManager.js @@ -34,7 +34,7 @@ define(function (require, exports, module) { MainViewManager = require("view/MainViewManager"), KeyEvent = require("utils/KeyEvent"); - let _popUps = []; + let _popUps = [], addPopupInProgress = false; /** * Add Esc key handling for a popup DOM element. @@ -53,6 +53,7 @@ define(function (require, exports, module) { function addPopUp($popUp, removeHandler, autoRemove, options) { autoRemove = autoRemove || false; options = options || {}; + addPopupInProgress = true; if(options.closeCurrentPopups) { closeAllPopups(); } @@ -62,6 +63,7 @@ define(function (require, exports, module) { $popUp.data("PopUpManager-autoRemove", autoRemove); $popUp.data("PopUpManager-popupManagesFocus", popupManagesFocus); $popUp.data("PopUpManager-removeHandler", removeHandler); + addPopupInProgress = false; } /** @@ -79,6 +81,13 @@ define(function (require, exports, module) { removeHandler(); } } + let popupManagesFocus = $popUp.data("PopUpManager-popupManagesFocus"); + if(!popupManagesFocus && !addPopupInProgress){ + // We need to have a focus manager to correctly manage focus + // between editors and other UI elements. + // For now we set focus here if the popup doesnt manage the focus itself + MainViewManager.focusActivePane(); + } // check index after removeHandler is done processing to protect // against recursive calls @@ -116,15 +125,7 @@ define(function (require, exports, module) { keyEvent.stopImmediatePropagation(); } - let popupManagesFocus = $popUp.data("PopUpManager-popupManagesFocus"); removePopUp($popUp); - - if(!popupManagesFocus){ - // We need to have a focus manager to correctly manage focus - // between editors and other UI elements. - // For now we set focus here if the popup doesnt manage the focus itself - MainViewManager.focusActivePane(); - } } break;