?? msgmail3panewindow.js
字號:
// finally, make sure mailContentWrapper has the correct orientation mailContentWrapper.setAttribute("orient", "horizontal"); messagesBox.setAttribute("orient", "vertical"); } else if (paneConfig == kWidePaneConfig) // "Wide" Window Pane Layout { threadPaneSplitter.setAttribute("orient", "vertical"); // finally, make sure mailContentWrapper has the correct orientation mailContentWrapper.setAttribute("orient", "vertical"); messagesBox.setAttribute("orient", "vertical"); } else if (paneConfig == kVerticalPaneConfig) // Vertical Pane Layout { messagesBox.setAttribute("orient", "horizontal"); threadPaneSplitter.removeAttribute("orient"); // finally, make sure mailContentWrapper has the correct orientation mailContentWrapper.setAttribute("orient", "horizontal"); } else if (paneConfig == kWideThreadPaneConfig) { // kWideThreadPaneConfig is a easter egg layout which isn't fully polished. So // the menu item for selecting it is hidden from the UI. // If you change from kWideThreadPaneConfig to another layout, you have to restart // Thunderbird before things look right. Loading account central looks really bad. // When you change into this layout, the thread pane gets re-rooted and we don't // handle that properly, the user must re-select the folder before the thread pane // relists the messages in it. mailContentWrapper.insertBefore(threadPaneSplitter, mailContentWrapper.firstChild); mailContentWrapper.insertBefore(messengerBox, mailContentWrapper.firstChild); mailContentWrapper.setAttribute("orient", "vertical"); threadPaneSplitter.setAttribute("orient", "vertical"); messagePaneBox.setAttribute("flex", "1"); } // re-rooting the message pane causes the docshell to get destroyed // and replaced with another one. As such, we need to re-set the window (and thus the // internal references nsMessenger keeps for the message pane docshell) // XXX: is it safe to call this multiple times? May need to add a setMessagePaneDocShell // routine to nsIMessenger. if (aMsgWindowInitialized && msgPaneReRooted) { messenger.SetWindow(null, null); messenger.SetWindow(window, msgWindow); MsgReload(); } // record the new configuration gCurrentPaneConfig = paneConfig; }const MailPrefObserver = { observe: function(subject, topic, prefName) { // verify that we're changing the mail pane config pref if (topic == "nsPref:changed") { if (prefName == "mail.pane_config.dynamic") UpdateMailPaneConfig(true); else if (prefName == "mail.showFolderPaneColumns") UpdateFolderColumnVisibility(); } }};function OnLoadMessenger(){ // update the pane config before we exit onload otherwise the user may see a flicker if we poke the document // in delayedOnLoadMessenger... UpdateMailPaneConfig(false); document.loadBindingDocument('chrome://global/content/bindings/textbox.xml'); // Set a sane starting width/height for all resolutions on new profiles. Do this before the window loads if (!document.documentElement.hasAttribute("width")) { var defaultWidth, defaultHeight; if (screen.availHeight <= 600) { document.documentElement.setAttribute("sizemode", "maximized"); defaultWidth = 800; defaultHeight = 565; } else // for higher resolution displays, use larger values for height and width { defaultWidth = screen.availWidth * .8; defaultHeight = screen.availHeight * .8; } document.documentElement.setAttribute("width", defaultWidth); document.documentElement.setAttribute("height", defaultHeight); } setTimeout(delayedOnLoadMessenger, 0); // when debugging, set this to 5000, so you can see what happens after the window comes up.}/* Functions related to startup */function delayedOnLoadMessenger(){ pref.QueryInterface(Components.interfaces.nsIPrefBranch2); pref.addObserver("mail.pane_config.dynamic", MailPrefObserver, false); pref.addObserver("mail.showFolderPaneColumns", MailPrefObserver, false); MailOfflineMgr.init(); CreateMailWindowGlobals(); accountCentralBox = document.getElementById("accountCentralBox"); GetMessagePane().collapsed = true; verifyAccounts(null); InitMsgWindow(); messenger.SetWindow(window, msgWindow); InitializeDataSources(); InitPanes(); MigrateAttachmentDownloadStore(); MigrateJunkMailSettings(); MigrateFolderViews(); accountManager.setSpecialFolders(); accountManager.loadVirtualFolders(); accountManager.addIncomingServerListener(gThreePaneIncomingServerListener); gPhishingDetector.init(); AddToSession(); //need to add to session before trying to load start folder otherwise listeners aren't //set up correctly. // argument[0] --> folder uri // argument[1] --> optional message key // argument[2] --> optional email address; //will come from aim; needs to show msgs from buddy's email address if ("arguments" in window) { // filter our any feed urls that came in as arguments to the new window... if (window.arguments.length && /^feed:/i.test(window.arguments[0] )) { var feedHandler = Components.classes["@mozilla.org/newsblog-feed-downloader;1"].getService(Components.interfaces.nsINewsBlogFeedDownloader); if (feedHandler) feedHandler.subscribeToFeed(window.arguments[0], null, msgWindow); gStartFolderUri = null; } else gStartFolderUri = (window.arguments.length > 0) ? window.arguments[0] : null; gStartMsgKey = (window.arguments.length > 1) ? window.arguments[1]: nsMsgKey_None; gSearchEmailAddress = (window.arguments.length > 2) ? window.arguments[2] : null; }#ifdef HAVE_SHELL_SERVICE var nsIShellService = Components.interfaces.nsIShellService; var shellService; try { shellService = Components.classes["@mozilla.org/mail/shell-service;1"].getService(nsIShellService); } catch (ex) {} // show the default client dialog only if we have at least one account, // if we should check for the default client, // and we aren't already the default for all of our recognized types (mail, news, rss) if (shellService && accountManager.defaultAccount && shellService.shouldCheckDefaultClient && !shellService.isDefaultClient(true, nsIShellService.MAIL)) window.openDialog("chrome://messenger/content/defaultClientDialog.xul", "DefaultClient", "modal,centerscreen,chrome,resizable=no");#endif setTimeout("loadStartFolder(gStartFolderUri);", 0); // FIX ME - later we will be able to use onload from the overlay OnLoadMsgHeaderPane(); gHaveLoadedMessage = false; gNotifyDefaultInboxLoadedOnStartup = true; //Set focus to the Thread Pane the first time the window is opened. SetFocusThreadPane(); gFindBar.initFindBar(); // initialize the customizeDone method on the customizeable toolbar var toolbox = document.getElementById("mail-toolbox"); toolbox.customizeDone = MailToolboxCustomizeDone; var toolbarset = document.getElementById('customToolbars'); toolbox.toolbarset = toolbarset;}function OnUnloadMessenger(){ OnLeavingFolder(gMsgFolderSelected); // mark all read in current folder accountManager.removeIncomingServerListener(gThreePaneIncomingServerListener); pref.QueryInterface(Components.interfaces.nsIPrefBranch2); pref.removeObserver("mail.pane_config.dynamic", MailPrefObserver); pref.removeObserver("mail.showFolderPaneColumns", MailPrefObserver); gFindBar.uninitFindBar(); // FIX ME - later we will be able to use onload from the overlay OnUnloadMsgHeaderPane(); OnUnloadFolderPane(); OnMailWindowUnload();}function NotifyObservers(aSubject, aTopic, aData){ var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); observerService.notifyObservers(aSubject, aTopic, aData);}// because the "open" state persists, we'll call// PerformExpand() for all servers that are open at startup. function PerformExpandForAllOpenServers(){ var servers = accountManager.allServers; for (var i = 0; i < servers.Count(); i++) { var server = servers.QueryElementAt(i, Components.interfaces.nsIMsgIncomingServer); if (server.type != "imap" && !server.rootMsgFolder.getFlag(MSG_FOLDER_FLAG_ELIDED)) server.performExpand(msgWindow); }}function loadStartFolder(initialUri){ var folderTree = GetFolderTree(); var defaultServer = null; var startFolderResource = null; var isLoginAtStartUpEnabled = false; //First get default account try { if(initialUri) startFolderResource = RDF.GetResource(initialUri); else { var defaultAccount = accountManager.defaultAccount; defaultServer = defaultAccount.incomingServer; var rootMsgFolder = defaultServer.rootMsgFolder; startFolderResource = rootMsgFolder.QueryInterface(Components.interfaces.nsIRDFResource); // Enable checknew mail once by turning checkmail pref 'on' to bring // all users to one plane. This allows all users to go to Inbox. User can // always go to server settings panel and turn off "Check for new mail at startup" if (!pref.getBoolPref(kMailCheckOncePrefName)) { pref.setBoolPref(kMailCheckOncePrefName, true); defaultServer.loginAtStartUp = true; } // Get the user pref to see if the login at startup is enabled for default account isLoginAtStartUpEnabled = defaultServer.loginAtStartUp; // Get Inbox only if when we have to login if (isLoginAtStartUpEnabled) { //now find Inbox var outNumFolders = new Object(); var inboxFolder = rootMsgFolder.getFoldersWithFlag(0x1000, 1, outNumFolders); if (!inboxFolder) return; startFolderResource = inboxFolder.QueryInterface(Components.interfaces.nsIRDFResource); } else { // set the startFolderResource to the server, so we select it // so we'll get account central startFolderResource = RDF.GetResource(defaultServer.serverURI); } } var startFolder = startFolderResource.QueryInterface(Components.interfaces.nsIMsgFolder); // it is possible we were given an initial uri and we need to subscribe or try to add // the folder. i.e. the user just clicked on a news folder they aren't subscribed to from a browser // the news url comes in here. // Perform biff on the server to check for new mail, except for imap // or a pop3 account that is deferred or deferred to, // or the case where initialUri is non-null (non-startup) if (!initialUri && isLoginAtStartUpEnabled && gLoadStartFolder && !defaultServer.isDeferredTo && defaultServer.rootFolder == defaultServer.rootMsgFolder) defaultServer.PerformBiff(msgWindow); SelectFolder(startFolder.URI); // because the "open" state persists, we'll call // PerformExpand() for all servers that are open at startup. // note, because of the "news.persist_server_open_state_in_folderpane" pref // we don't persist the "open" state of news servers across sessions, // but we do within a session, so if you open another 3 pane // and a news server is "open", we'll update the unread counts. PerformExpandForAllOpenServers(); } catch(ex) { if (initialUri) { messenger.loadURL(window, initialUri); return; } dump(ex); dump('Exception in LoadStartFolder caused by no default account. We know about this\n'); } // if gLoadStartFolder is true, then we must have just created a POP3 account // and we aren't supposed to initially download mail. (Bug #270743) if (gLoadStartFolder) MsgGetMessagesForAllServers(defaultServer); // if appropriate, send unsent messages. This may end up prompting the user if (MailOfflineMgr.shouldSendUnsentMessages()) SendUnsentMessages();}function AddToSession(){ try { var mailSession = Components.classes[mailSessionContractID] .getService(Components.interfaces.nsIMsgMailSession); var nsIFolderListener = Components.interfaces.nsIFolderListener; var notifyFlags = nsIFolderListener.intPropertyChanged | nsIFolderListener.event; mailSession.AddFolderListener(folderListener, notifyFlags); } catch (ex) { dump("Error adding to session\n"); }}function InitPanes(){ OnLoadFolderPane(); OnLoadThreadPane(); SetupCommandUpdateHandlers();}function InitializeDataSources(){ //Setup common mailwindow stuff. AddDataSources(); //To threadpane move context menu SetupMoveCopyMenus('threadPaneContext-moveMenu', accountManagerDataSource, folderDataSource); //To threadpane copy content menu SetupMoveCopyMenus('threadPaneContext-copyMenu', accountManagerDataSource, folderDataSource);}function OnFolderUnreadColAttrModified(event){ if (event.attrName == "hidden") { var folderNameCell = document.getElementById("folderNameCell"); var label = {"true": "?folderTreeName", "false": "?folderTreeSimpleName"}; folderNameCell.setAttribute("label", label[event.newValue]); }}function UpdateFolderColumnVisibility(){ var folderNameCol = document.getElementById("folderNameCol"); var showColumns = pref.getBoolPref("mail.showFolderPaneColumns"); var folderUnreadCol = document.getElementById("folderUnreadCol"); var folderColumnLabel = document.getElementById("folderColumnLabel"); if (!showColumns) { var folderTotalCol = document.getElementById("folderTotalCol");
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -