commit 52fbcbfa9df65d56dce5b1654c4d56012b3ff6a9 Author: Arthur Edelstein arthuredelstein@gmail.com Date: Sat Oct 15 19:59:16 2016 -0700
Bug 20373: Prevent redundant dialogs opening --- src/chrome/content/torbutton.js | 14 +++++++------- src/modules/utils.js | 24 +++++++++++++++++++++++- 2 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js index 0f1046a..fa4009a 100644 --- a/src/chrome/content/torbutton.js +++ b/src/chrome/content/torbutton.js @@ -9,6 +9,7 @@
let { LoadContextInfo } = Cu.import('resource://gre/modules/LoadContextInfo.jsm'); let { Services } = Cu.import("resource://gre/modules/Services.jsm"); +let { showDialog } = Cu.import("resource://torbutton/modules/utils.js");
const k_tb_last_browser_version_pref = "extensions.torbutton.lastBrowserVersion"; const k_tb_browser_update_needed_pref = "extensions.torbutton.updateNeeded"; @@ -824,9 +825,7 @@ function torbutton_on_abouttor_load(aDoc) { label: button_label, accessKey: 'S', popup: null, - callback: function() { - window.openDialog("chrome://torbutton/content/preferences.xul", - "torbutton-preferences","chrome");} + callback: torbutton_open_prefs_dialog, }];
let priority = box.PRIORITY_INFO_LOW; @@ -2127,14 +2126,15 @@ function torbutton_check_protections()
// Bug 1506 P2: I think cookie protections is a neat feature. function torbutton_open_cookie_dialog() { - window.openDialog('chrome://torbutton/content/torcookiedialog.xul','Cookie Protections', - 'centerscreen,chrome,dialog,modal,resizable'); + showDialog(window, 'chrome://torbutton/content/torcookiedialog.xul', + 'Cookie Protections', 'centerscreen,chrome,dialog,modal,resizable'); }
// Bug 1506 P2/P3: Prefs are handled differently on android, I guess? function torbutton_open_prefs_dialog() { - window.openDialog("chrome://torbutton/content/preferences.xul","torbutton-preferences","centerscreen, chrome"); - torbutton_log(2, 'opened preferences window'); + showDialog(window, "chrome://torbutton/content/preferences.xul", + "torbutton-preferences","centerscreen, chrome"); + torbutton_log(2, 'opened preferences window'); }
// Bug 1506 P0: Support code for checking Firefox versions. Not needed. diff --git a/src/modules/utils.js b/src/modules/utils.js index eb0746b..514ef51 100644 --- a/src/modules/utils.js +++ b/src/modules/utils.js @@ -52,5 +52,27 @@ var getEnv = function (name) { return env.exists(name) ? env.get(name) : undefined; };
+// ## Windows + +// __dialogsByName__. +// Map of window names to dialogs. +let dialogsByName = {}; + +// __showDialog(parent, url, name, features, arg1, arg2, ...)__. +// Like window.openDialog, but if the window is already +// open, just focuses it instead of opening a new one. +var showDialog = function (parent, url, name, features) { + let existingDialog = dialogsByName[name]; + if (existingDialog && !existingDialog.closed) { + existingDialog.focus(); + return existingDialog; + } else { + let newDialog = parent.openDialog.apply(parent, + Array.slice(arguments, 1)); + dialogsByName[name] = newDialog; + return newDialog; + } +}; + // Export utility functions for external use. -let EXPORTED_SYMBOLS = ["bindPrefAndInit", "getPrefValue", "getEnv"]; +let EXPORTED_SYMBOLS = ["bindPrefAndInit", "getPrefValue", "getEnv", "showDialog"];
tor-commits@lists.torproject.org