diff -r 77f7d8c11ea7 mail/base/content/mailCore.js
--- a/mail/base/content/mailCore.js Tue Dec 29 05:27:57 2009 +0100
+++ b/mail/base/content/mailCore.js Thu Dec 31 13:07:59 2009 +0800
@@ -137,16 +137,85 @@ function CustomizeMailToolbar(toolboxId,
wintype = wintype.replace(/:/g, "");
window.openDialog(customizeURL,
"CustomizeToolbar"+wintype,
"chrome,all,dependent", toolbox);
}
}
+var MailToolbarObserver = {
+ observe: function(subject,topic,data) {
+ if ( topic != "mail:updateToolbarItems")
+ return;
+
+ var current_toolbarset_ids,original_toolbarset_ids,item;
+
+ current_toolbarset_ids = this.toolbar.currentSet.split(",");
+ original_toolbarset_ids= this.original_toolbarset.split(",");
+
+
+ // Only need to update new toolbar items
+ for ( var i = 0; i< current_toolbarset_ids.length; i++)
+ {
+ for (var j = 0; j < original_toolbarset_ids.length; j++)
+ if (current_toolbarset_ids[i] == original_toolbarset_ids[j])
+ break;
+
+ if ( j != original_toolbarset_ids.length)
+ continue;
+
+ // item is a toolbar item just added
+ item = document.getElementById(current_toolbarset_ids[i]);
+ SyncWithObservers(item);
+ }
+
+ //Unregist
+ var observerService = Components.classes["@mozilla.org/observer-service;1"]
+ .getService(Components.interfaces.nsIObserverService);
+ observerService.removeObserver(this, "mail:updateToolbarItems" );
+ }
+}
+
+//if the root has an "observe" attribute,
+// its "disabled" attribute should be synced with the observed element.
+function SyncWithObservers(root)
+{
+ var observed_item_id, observed_item;
+ var children,disabled;
+
+ if (!root)
+ return;
+
+ observed_item_id = root.observes;
+ if (observed_item_id)
+ {
+ observed_item = document.getElementById(observed_item_id);
+ disabled = observed_item.getAttribute("disabled");
+ if (disabled)
+ root.disabled = true;
+ else
+ root.disabled = false;
+ }
+
+ children = root.childNodes;
+ for ( var i = 0; i < children.length; i++)
+ SyncWithObservers(children[i]);
+}
+
+function MailToolboxCustomizeInitialized(aEvent)
+{
+ var observerService = Components.classes["@mozilla.org/observer-service;1"]
+ .getService(Components.interfaces.nsIObserverService);
+ observerService.addObserver(MailToolbarObserver, "mail:updateToolbarItems", false);
+
+ MailToolbarObserver.toolbar = document.getElementById("mail-bar3");
+ MailToolbarObserver.original_toolbarset = MailToolbarObserver.toolbar.currentSet;
+}
+
function MailToolboxCustomizeDone(aEvent, customizePopupId)
{
if (gCustomizeSheet) {
document.getElementById("customizeToolbarSheetIFrame").hidden = true;
document.getElementById("customizeToolbarSheetPopup").hidePopup();
}
// Update global UI elements that may have been added or removed
diff -r 77f7d8c11ea7 mail/base/content/msgMail3PaneWindow.js
--- a/mail/base/content/msgMail3PaneWindow.js Tue Dec 29 05:27:57 2009 +0100
+++ b/mail/base/content/msgMail3PaneWindow.js Thu Dec 31 13:07:59 2009 +0800
@@ -395,16 +395,17 @@ function LoadPostAccountWizard()
OnLoadMsgHeaderPane();
//Set focus to the Thread Pane the first time the window is opened.
SetFocusThreadPane();
// initialize the customizeDone method on the customizeable toolbar
var toolbox = document.getElementById("mail-toolbox");
toolbox.customizeDone = function(aEvent) { MailToolboxCustomizeDone(aEvent, "CustomizeMailToolbar"); };
+ toolbox.customizeInitialized = function(aEvent) { MailToolboxCustomizeInitialized(aEvent); };
var toolbarset = document.getElementById('customToolbars');
toolbox.toolbarset = toolbarset;
// XXX Do not select the folder until the window displays or the threadpane
// will be at minimum size. We used to have
// gFolderDisplay.ensureRowIsVisible use settimeout itself to defer that
// calculation, but that was ugly. Also, in theory we will open the window