From 2bbab712301de53bebc3da7a820e88933165cb10 Mon Sep 17 00:00:00 2001 From: foudfou Date: Sun, 10 Feb 2013 21:52:53 +0100 Subject: [PATCH] fix options' filepickers (#82) Not sure as why the filepicker callback passed to |open()| is working in all Mozilla's code without having an explicite |done| method... --- src/chrome/content/options.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/chrome/content/options.js b/src/chrome/content/options.js index cbd57a4..df76a5d 100644 --- a/src/chrome/content/options.js +++ b/src/chrome/content/options.js @@ -306,28 +306,30 @@ var firetrayUIOptions = { }, chooseAppIconFile: function() { + let updateIcon = firetray.Handler.setIconImageDefault.bind(firetray.Handler); this._chooseIconFile("app_icon_custom_filename"); - firetray.Handler.setIconImageDefault(); }, chooseMailIconFile: function() { - this._chooseIconFile("custom_mail_icon_filename"); - firetray.Messaging.updateIcon(); + let updateIcon = firetray.Messaging.updateIcon.bind(firetray.Messaging); + this._chooseIconFile("custom_mail_icon_filename", updateIcon); }, - _chooseIconFile: function(elementId, prefpaneId) { + _chooseIconFile: function(elementId, callback) { const nsIFilePicker = Ci.nsIFilePicker; var filePicker = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); - let fpCallback = function fpCallback_done(aResult) { + let fpCallback = { done: function(aResult) { if (aResult == nsIFilePicker.returnOK || aResult == nsIFilePicker.returnReplace) { let filenameElt = document.getElementById(elementId); filenameElt.value = filePicker.file.path; let prefpane = firetrayUIOptions.getAncestorPrefpane(filenameElt); prefpane.userChangedValue(filenameElt); + + callback.call(); } - }; + }}; filePicker.init(window, "Select Icon", nsIFilePicker.modeOpen); // FIXME: i18n filePicker.appendFilters(nsIFilePicker.filterImages);