From cdbce724940def03d15c7650b2d150d9fd5a1e8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Wed, 5 Mar 2014 04:33:11 -0300 Subject: [PATCH 1/3] Do not remove menu items if they were never added, and dont change commands that were never registerd --- src/extensions/default/CloseOthers/main.js | 23 +++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/extensions/default/CloseOthers/main.js b/src/extensions/default/CloseOthers/main.js index 8b8b5b9b039..0e32aa8b1a0 100644 --- a/src/extensions/default/CloseOthers/main.js +++ b/src/extensions/default/CloseOthers/main.js @@ -43,7 +43,9 @@ define(function (require, exports, module) { // Global vars and preferences var commandsRegistered = false, menuEntriesShown = {}, + menuItemsAdded = { closeBelow: false, closeOthers: false, closeAbove: false }, prefs = PreferencesManager.getExtensionPrefs("closeOthers"); + prefs.definePreference("below", "boolean", true); prefs.definePreference("others", "boolean", true); prefs.definePreference("above", "boolean", true); @@ -72,7 +74,7 @@ define(function (require, exports, module) { function _contextMenuOpenHandler() { var doc = DocumentManager.getCurrentDocument(); - if (doc) { + if (doc && commandsRegistered) { var docIndex = DocumentManager.findInWorkingSet(doc.file.fullPath), workingSet = DocumentManager.getWorkingSet().slice(0); @@ -119,27 +121,38 @@ define(function (require, exports, module) { if (prefCloseBelow !== menuEntriesShown.closeBelow) { if (prefCloseBelow) { workingSetCmenu.addMenuItem(closeBelow, "", Menus.AFTER, Commands.FILE_CLOSE); - } else { + menuItemsAdded.closeBelow = true; + } else if (menuItemsAdded.closeBelow) { workingSetCmenu.removeMenuItem(closeBelow); } } + if (prefCloseOthers !== menuEntriesShown.closeOthers) { if (prefCloseOthers) { workingSetCmenu.addMenuItem(closeOthers, "", Menus.AFTER, Commands.FILE_CLOSE); - } else { + menuItemsAdded.closeOthers = true; + } else if (menuItemsAdded.closeOthers) { workingSetCmenu.removeMenuItem(closeOthers); } } + if (prefCloseAbove !== menuEntriesShown.closeAbove) { if (prefCloseAbove) { workingSetCmenu.addMenuItem(closeAbove, "", Menus.AFTER, Commands.FILE_CLOSE); - } else { + menuItemsAdded.closeAbove = true; + } else if (menuItemsAdded.closeAbove) { workingSetCmenu.removeMenuItem(closeAbove); } } - menuEntriesShown = {"closeBelow": prefCloseBelow, "closeOthers": prefCloseOthers, "closeAbove": prefCloseAbove}; + + menuEntriesShown = { + closeBelow: prefCloseBelow, + closeOthers: prefCloseOthers, + closeAbove: prefCloseAbove + }; } + // Initialize using the prefs prefChangeHandler(); From ea07f8dec3fe2bfc9dfd6927e8a1d82de7b61dff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Wed, 12 Mar 2014 21:28:44 -0300 Subject: [PATCH 2/3] Split the init from the update --- src/extensions/default/CloseOthers/main.js | 122 +++++++++++++-------- 1 file changed, 75 insertions(+), 47 deletions(-) diff --git a/src/extensions/default/CloseOthers/main.js b/src/extensions/default/CloseOthers/main.js index 0e32aa8b1a0..a42693a2931 100644 --- a/src/extensions/default/CloseOthers/main.js +++ b/src/extensions/default/CloseOthers/main.js @@ -41,17 +41,20 @@ define(function (require, exports, module) { closeBelow = "file.close_below"; // Global vars and preferences - var commandsRegistered = false, - menuEntriesShown = {}, + var menuEntriesShown = {}, menuItemsAdded = { closeBelow: false, closeOthers: false, closeAbove: false }, prefs = PreferencesManager.getExtensionPrefs("closeOthers"); - prefs.definePreference("below", "boolean", true); + prefs.definePreference("below", "boolean", true); prefs.definePreference("others", "boolean", true); - prefs.definePreference("above", "boolean", true); - + prefs.definePreference("above", "boolean", true); + + + /** + * Handle the different Close Other commands + * @param {string} mode + */ function handleClose(mode) { - var targetIndex = DocumentManager.findInWorkingSet(DocumentManager.getCurrentDocument().file.fullPath), workingSet = DocumentManager.getWorkingSet().slice(0), start = (mode === closeBelow) ? (targetIndex + 1) : 0, @@ -70,11 +73,14 @@ define(function (require, exports, module) { CommandManager.execute(Commands.FILE_CLOSE_LIST, {fileList: files}); } - - function _contextMenuOpenHandler() { + + /** + * Enable/Disable the menu items depending on which document is selected in the working set + */ + function contextMenuOpenHandler() { var doc = DocumentManager.getCurrentDocument(); - if (doc && commandsRegistered) { + if (doc) { var docIndex = DocumentManager.findInWorkingSet(doc.file.fullPath), workingSet = DocumentManager.getWorkingSet().slice(0); @@ -97,67 +103,89 @@ define(function (require, exports, module) { } } } - - function prefChangeHandler() { - // it's senseless to look prefs up for the current file, instead look them up for + + + /** + * Returns the preferences used to add/remove the menu items + * @return {{closeBelow: boolean, closeOthers: boolean, closeAbove: boolean}} + */ + function getPreferences() { + // It's senseless to look prefs up for the current file, instead look them up for // the current project (or globally) - var prefCloseBelow = prefs.get("below", PreferencesManager.CURRENT_PROJECT), - prefCloseOthers = prefs.get("others", PreferencesManager.CURRENT_PROJECT), - prefCloseAbove = prefs.get("above", PreferencesManager.CURRENT_PROJECT); - - if (!commandsRegistered && (prefCloseBelow || prefCloseOthers || prefCloseAbove)) { - CommandManager.register(Strings.CMD_FILE_CLOSE_BELOW, closeBelow, function () { - handleClose(closeBelow); - }); - CommandManager.register(Strings.CMD_FILE_CLOSE_OTHERS, closeOthers, function () { - handleClose(closeOthers); - }); - CommandManager.register(Strings.CMD_FILE_CLOSE_ABOVE, closeAbove, function () { - handleClose(closeAbove); - }); - commandsRegistered = true; - } + return { + closeBelow : prefs.get("below", PreferencesManager.CURRENT_PROJECT), + closeOthers : prefs.get("others", PreferencesManager.CURRENT_PROJECT), + closeAbove : prefs.get("above", PreferencesManager.CURRENT_PROJECT) + }; + } + + /** + * When the preferences changed, add/remove the required menu items + */ + function prefChangeHandler() { + var prefs = getPreferences(); - if (prefCloseBelow !== menuEntriesShown.closeBelow) { - if (prefCloseBelow) { + if (prefs.closeBelow !== menuEntriesShown.closeBelow) { + if (prefs.closeBelow) { workingSetCmenu.addMenuItem(closeBelow, "", Menus.AFTER, Commands.FILE_CLOSE); - menuItemsAdded.closeBelow = true; - } else if (menuItemsAdded.closeBelow) { + } else { workingSetCmenu.removeMenuItem(closeBelow); } } - if (prefCloseOthers !== menuEntriesShown.closeOthers) { - if (prefCloseOthers) { + if (prefs.closeOthers !== menuEntriesShown.closeOthers) { + if (prefs.closeOthers) { workingSetCmenu.addMenuItem(closeOthers, "", Menus.AFTER, Commands.FILE_CLOSE); - menuItemsAdded.closeOthers = true; - } else if (menuItemsAdded.closeOthers) { + } else { workingSetCmenu.removeMenuItem(closeOthers); } } - if (prefCloseAbove !== menuEntriesShown.closeAbove) { - if (prefCloseAbove) { + if (prefs.closeAbove !== menuEntriesShown.closeAbove) { + if (prefs.closeAbove) { workingSetCmenu.addMenuItem(closeAbove, "", Menus.AFTER, Commands.FILE_CLOSE); - menuItemsAdded.closeAbove = true; - } else if (menuItemsAdded.closeAbove) { + } else { workingSetCmenu.removeMenuItem(closeAbove); } } - menuEntriesShown = { - closeBelow: prefCloseBelow, - closeOthers: prefCloseOthers, - closeAbove: prefCloseAbove - }; + menuEntriesShown = prefs; + } + + /** + * Register the Commands and add the Menu Items if required on start up + */ + function initializeCommands() { + var prefs = getPreferences(); + + CommandManager.register(Strings.CMD_FILE_CLOSE_BELOW, closeBelow, function () { + handleClose(closeBelow); + }); + CommandManager.register(Strings.CMD_FILE_CLOSE_OTHERS, closeOthers, function () { + handleClose(closeOthers); + }); + CommandManager.register(Strings.CMD_FILE_CLOSE_ABOVE, closeAbove, function () { + handleClose(closeAbove); + }); + + if (prefs.closeBelow) { + workingSetCmenu.addMenuItem(closeBelow, "", Menus.AFTER, Commands.FILE_CLOSE); + } + if (prefs.closeOthers) { + workingSetCmenu.addMenuItem(closeOthers, "", Menus.AFTER, Commands.FILE_CLOSE); + } + if (prefs.closeAbove) { + workingSetCmenu.addMenuItem(closeAbove, "", Menus.AFTER, Commands.FILE_CLOSE); + } + menuEntriesShown = prefs; } // Initialize using the prefs - prefChangeHandler(); + initializeCommands(); // Add a context menu open handler - $(workingSetCmenu).on("beforeContextMenuOpen", _contextMenuOpenHandler); + $(workingSetCmenu).on("beforeContextMenuOpen", contextMenuOpenHandler); prefs.on("change", prefChangeHandler); }); From ee0a92e9c380b90b3162d02716a7c29066aaa408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Malbr=C3=A1n?= Date: Wed, 12 Mar 2014 21:34:59 -0300 Subject: [PATCH 3/3] Minor fix --- src/extensions/default/CloseOthers/main.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/extensions/default/CloseOthers/main.js b/src/extensions/default/CloseOthers/main.js index a42693a2931..e7e5a0711cd 100644 --- a/src/extensions/default/CloseOthers/main.js +++ b/src/extensions/default/CloseOthers/main.js @@ -41,9 +41,8 @@ define(function (require, exports, module) { closeBelow = "file.close_below"; // Global vars and preferences - var menuEntriesShown = {}, - menuItemsAdded = { closeBelow: false, closeOthers: false, closeAbove: false }, - prefs = PreferencesManager.getExtensionPrefs("closeOthers"); + var prefs = PreferencesManager.getExtensionPrefs("closeOthers"), + menuEntriesShown = {}; prefs.definePreference("below", "boolean", true); prefs.definePreference("others", "boolean", true); @@ -153,7 +152,7 @@ define(function (require, exports, module) { } /** - * Register the Commands and add the Menu Items if required on start up + * Register the Commands and add the Menu Items, if required */ function initializeCommands() { var prefs = getPreferences();