From c8985732e3e874972a8713f0b2600ffd271ea752 Mon Sep 17 00:00:00 2001 From: foudfou Date: Sun, 9 Mar 2014 10:42:39 +0100 Subject: [PATCH] * Rely further on the preference system for options (leverage onsynctopreference) * Fix listeners on ui_tree_mail_accounts. This is for moving away from the instantApply=true assomption. --- src/chrome/content/options.js | 89 +++++++++++++------------------ src/chrome/content/options.xul | 15 +++--- src/modules/FiretrayHandler.jsm | 6 ++- src/modules/FiretrayMessaging.jsm | 16 +++--- 4 files changed, 59 insertions(+), 67 deletions(-) diff --git a/src/chrome/content/options.js b/src/chrome/content/options.js index 8e06ee3..0be09d5 100644 --- a/src/chrome/content/options.js +++ b/src/chrome/content/options.js @@ -1,13 +1,5 @@ /* -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* FIXME: instantApply pref defaults to false on Windows. But the Firetray pref -window was originaly crafted for instantApply platforms: some UI changes do -also change prefs programmaticaly. For a consistant behaviour across all -instantApply cases, we should probably not set prefs dynamically, that is leave -it all to the UI. See: -http://forums.mozillazine.org/viewtopic.php?f=19&t=2743643 -https://groups.google.com/forum/#!topic/mozilla.dev.extensions/SBGIogdIiwE */ - const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; @@ -213,7 +205,7 @@ var firetrayUIOptions = { if (val) iconNames.push(val); } log.debug("iconNames="+iconNames); - firetray.Utils.setArrayPref(prefIconNames, iconNames); + firetray.Utils.setArrayPref(prefIconNames, iconNames); // FIXME: should be a }, disableIconTypeMaybe: function(appIconType) { @@ -234,7 +226,6 @@ var firetrayUIOptions = { this.initMessageCountSettings(); this.initNotificationSettings(); - this.initMailTrigger(); this.toggleNotifications(firetray.Utils.prefService.getBoolPref("mail_notification_enabled")); }, @@ -290,21 +281,14 @@ var firetrayUIOptions = { return -1; }, - initMailTrigger: function() { - document.getElementById("ui_mail_change_trigger").value = - firetray.Utils.prefService.getCharPref("mail_change_trigger"); - }, - - updateMailTrigger: function() { - let mailTrigger = document.getElementById("ui_mail_change_trigger").value.trim(); - firetray.Utils.prefService.setCharPref("mail_change_trigger", mailTrigger); + saveMailChangeTrigger: function(uiElt) { + return uiElt.value.trim(); }, updateNotificationSettings: function() { log.debug("updateNotificationSettings"); let radioMailNotify = document.getElementById("ui_radiogroup_mail_notification"); let mailNotificationType = +radioMailNotify.getItemAtIndex(radioMailNotify.selectedIndex).value; - firetray.Utils.prefService.setIntPref("mail_notification_type", mailNotificationType); this.disableNotificationMaybe(mailNotificationType); firetray.Messaging.updateIcon(); @@ -316,12 +300,6 @@ var firetrayUIOptions = { this.disableMessageCountMaybe(messageCountType); }, - updateChatBlinkSettings: function() { - let radioBlinkStyle = document.getElementById("ui_chat_icon_blink_style"); - let blinkStyle = +radioBlinkStyle.getItemAtIndex(radioBlinkStyle.selectedIndex).value; - firetray.Utils.prefService.setIntPref("chat_icon_blink_style", blinkStyle); - }, - disableNotificationMaybe: function(notificationSetting) { log.debug("disableNotificationMaybe: "+notificationSetting); @@ -355,7 +333,6 @@ var firetrayUIOptions = { let newMailIconNames = document.getElementById("newmail_icon_names"); this.disableNChildren(newMailIconNames, 2, false); } - firetray.Utils.prefService.setIntPref("mail_notification_type", FIRETRAY_NOTIFICATION_NEWMAIL_ICON); } }, @@ -434,44 +411,53 @@ var firetrayUIOptions = { }, /** - * NOTE: folder exceptions for unread messages count are *stored* in - * preferences as excluded, but *shown* as "not included" + * NOTE: we store folder type *exceptions* for unread messages count. This is + * easier than storing all possible included folder types. The drawback is + * that we must inverse the selection in the UI: we show exceptions as "not + * included". */ populateExcludedFoldersList: function() { let excludedFoldersList = document.getElementById('excluded_folders_list'); let prefExcludedFoldersFlags = firetray.Utils.prefService .getIntPref("excluded_folders_flags"); + log.debug("prefExcludedFoldersFlags="+prefExcludedFoldersFlags.toString(16)); for (let folderType in FLDRS_UNINTERESTING) { let localizedFolderType = this.strings.getString(folderType); - let item = excludedFoldersList.appendItem(localizedFolderType, folderType); + let folderTypeVal = FLDRS_UNINTERESTING[folderType]; + let item = excludedFoldersList.appendItem(localizedFolderType, folderTypeVal); item.setAttribute("observes", "broadcaster-notification-disabled"); - log.debug("folder: "+folderType); - if (!(FLDRS_UNINTERESTING[folderType] & prefExcludedFoldersFlags)) { + let folderTypeSet = (folderTypeVal & prefExcludedFoldersFlags); + log.debug("folder: "+folderType+" folderTypeVal="+folderTypeVal+" folderTypeSet="+folderTypeSet); + if (!folderTypeSet) { excludedFoldersList.ensureElementIsVisible(item); // bug 326445 - excludedFoldersList.addItemToSelection(item); // doesn't trigger onselect + excludedFoldersList.addItemToSelection(item); // does trigger onselect... } } + + // ...so we add onselect handler after the listbox is populated + excludedFoldersList.addEventListener( + 'select', function(e) { // select also on unselect + document.getElementById('pref-pane-mail').userChangedValue(excludedFoldersList); + }, true); }, - updateExcludedFoldersPref: function() { - let excludedFoldersList = document.getElementById('excluded_folders_list'); + loadExcludedFoldersFlags: function(uiElt) { + // we can't do much here since onLoad() not yet applied at onsyncfrompreference... + }, - log.debug("LAST SELECTED: "+excludedFoldersList.currentItem.label); - let excludedFoldersFlags = null; - for (let i = 0, len=excludedFoldersList.itemCount; i + + + @@ -169,7 +172,7 @@ observes="broadcaster-notification-disabled" /> - + @@ -295,8 +299,9 @@ @@ -338,10 +343,8 @@ diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm index 4fc4fa3..8e8993c 100644 --- a/src/modules/FiretrayHandler.jsm +++ b/src/modules/FiretrayHandler.jsm @@ -524,9 +524,11 @@ firetray.PrefListener = new PrefListener( break; case 'new_mail_icon_names': firetray.StatusIcon.loadThemedIcons(); - case 'only_favorite_folders': - case 'message_count_type': + case 'excluded_folders_flags': case 'folder_count_recursive': + case 'mail_accounts': + case 'message_count_type': + case 'only_favorite_folders': firetray.Messaging.updateMsgCountWithCb(); break; case 'app_mail_icon_names': diff --git a/src/modules/FiretrayMessaging.jsm b/src/modules/FiretrayMessaging.jsm index 586a388..f3db2e0 100644 --- a/src/modules/FiretrayMessaging.jsm +++ b/src/modules/FiretrayMessaging.jsm @@ -13,14 +13,14 @@ Cu.import("resource://gre/modules/PluralForm.jsm"); Cu.import("resource://firetray/commons.js"); const FLDRS_UNINTERESTING = { - Archive: Ci.nsMsgFolderFlags.Archive, - Drafts: Ci.nsMsgFolderFlags.Drafts, - Junk: Ci.nsMsgFolderFlags.Junk, - Queue: Ci.nsMsgFolderFlags.Queue, - SentMail: Ci.nsMsgFolderFlags.SentMail, - Templates: Ci.nsMsgFolderFlags.Templates, - Trash: Ci.nsMsgFolderFlags.Trash, - Virtual: Ci.nsMsgFolderFlags.Virtual + Archive: Ci.nsMsgFolderFlags.Archive, // 0x00004000 + Drafts: Ci.nsMsgFolderFlags.Drafts, // 0x00000400 + Junk: Ci.nsMsgFolderFlags.Junk, // 0x40000000 + Queue: Ci.nsMsgFolderFlags.Queue, // 0x00000800 + SentMail: Ci.nsMsgFolderFlags.SentMail, // 0x00000200 + Templates: Ci.nsMsgFolderFlags.Templates, // 0x00400000 + Trash: Ci.nsMsgFolderFlags.Trash, // 0x00000100 + Virtual: Ci.nsMsgFolderFlags.Virtual // 0x00000020 }; const ACCOUNTS_PREF_BRANCH = "mail.accountmanager.accounts";