diff --git a/accessible/src/html/nsHyperTextAccessible.cpp b/accessible/src/html/nsHyperTextAccessible.cpp index da696d9c6141..9bbcc3480b19 100644 --- a/accessible/src/html/nsHyperTextAccessible.cpp +++ b/accessible/src/html/nsHyperTextAccessible.cpp @@ -285,7 +285,7 @@ nsIntRect nsHyperTextAccessible::GetBoundsForString(nsIFrame *aFrame, PRUint32 a frame->GetOffsets(startFrameTextOffset, endFrameTextOffset); PRInt32 frameTotalTextLength = endFrameTextOffset - startFrameTextOffset; PRInt32 seekLength = endContentOffset - startContentOffset; - PRInt32 frameSubStringLength = PR_MIN(frameTotalTextLength - startContentOffsetInFrame, seekLength); + PRInt32 frameSubStringLength = NS_MIN(frameTotalTextLength - startContentOffsetInFrame, seekLength); // Add the point where the string starts to the frameScreenRect nsPoint frameTextStartPoint; diff --git a/browser/base/content/browser-menubar.inc b/browser/base/content/browser-menubar.inc index 2ffd7291fdaf..e446ca575195 100644 --- a/browser/base/content/browser-menubar.inc +++ b/browser/base/content/browser-menubar.inc @@ -494,13 +494,13 @@
diff --git a/browser/base/content/browser-places.js b/browser/base/content/browser-places.js index 6bb04af9adde..567c2bfe3d00 100644 --- a/browser/base/content/browser-places.js +++ b/browser/base/content/browser-places.js @@ -637,6 +637,14 @@ var HistoryMenu = { m.setAttribute("class", "menuitem-iconic bookmark-item"); m.setAttribute("value", i); m.setAttribute("oncommand", "undoCloseTab(" + i + ");"); + + // Set the targetURI attribute so it will be shown in tooltip and statusbar. + // SessionStore uses one-based indexes, so we need to normalize them. + let tabData = undoItems[i].state; + let activeIndex = (tabData.index || tabData.entries.length) - 1; + if (activeIndex >= 0 && tabData.entries[activeIndex]) + m.setAttribute("targetURI", tabData.entries[activeIndex].url); + m.addEventListener("click", this._undoCloseMiddleClick, false); if (i == 0) m.setAttribute("key", "key_undoCloseTab"); @@ -710,6 +718,13 @@ var HistoryMenu = { } m.setAttribute("class", "menuitem-iconic bookmark-item"); m.setAttribute("oncommand", "undoCloseWindow(" + i + ");"); + + // Set the targetURI attribute so it will be shown in tooltip and statusbar. + // SessionStore uses one-based indexes, so we need to normalize them. + let activeIndex = (selectedTab.index || selectedTab.entries.length) - 1; + if (activeIndex >= 0 && selectedTab.entries[activeIndex]) + m.setAttribute("targetURI", selectedTab.entries[activeIndex].url); + if (i == 0) m.setAttribute("key", "key_undoCloseWindow"); undoPopup.appendChild(m); diff --git a/browser/base/content/browser-tabPreviews.js b/browser/base/content/browser-tabPreviews.js index 4c2f66835fd8..27e1f3d5b2ee 100644 --- a/browser/base/content/browser-tabPreviews.js +++ b/browser/base/content/browser-tabPreviews.js @@ -264,13 +264,7 @@ var ctrlTab = { if (aPreview == this.showAllButton) return; - if ((aPreview._tab || null) != aTab) { - if (aPreview._tab) - aPreview._tab.removeEventListener("DOMAttrModified", this, false); - aPreview._tab = aTab; - if (aTab) - aTab.addEventListener("DOMAttrModified", this, false); - } + aPreview._tab = aTab; if (aPreview.firstChild) aPreview.removeChild(aPreview.firstChild); @@ -505,8 +499,8 @@ var ctrlTab = { handleEvent: function ctrlTab_handleEvent(event) { switch (event.type) { - case "DOMAttrModified": - // tab attribute modified (e.g. label, crop, busy, image) + case "TabAttrModified": + // tab attribute modified (e.g. label, crop, busy, image, selected) for (let i = this.previews.length - 1; i >= 0; i--) { if (this.previews[i]._tab && this.previews[i]._tab == event.target) { this.updatePreview(this.previews[i], event.target); @@ -541,6 +535,7 @@ var ctrlTab = { var tabContainer = gBrowser.tabContainer; tabContainer[toggleEventListener]("TabOpen", this, false); + tabContainer[toggleEventListener]("TabAttrModified", this, false); tabContainer[toggleEventListener]("TabSelect", this, false); tabContainer[toggleEventListener]("TabClose", this, false); @@ -590,6 +585,7 @@ var allTabs = { }, this); gBrowser.tabContainer.addEventListener("TabOpen", this, false); + gBrowser.tabContainer.addEventListener("TabAttrModified", this, false); gBrowser.tabContainer.addEventListener("TabMove", this, false); gBrowser.tabContainer.addEventListener("TabClose", this, false); }, @@ -599,6 +595,7 @@ var allTabs = { return; gBrowser.tabContainer.removeEventListener("TabOpen", this, false); + gBrowser.tabContainer.removeEventListener("TabAttrModified", this, false); gBrowser.tabContainer.removeEventListener("TabMove", this, false); gBrowser.tabContainer.removeEventListener("TabClose", this, false); @@ -661,13 +658,11 @@ var allTabs = { } if (matches < filter.length) { preview.hidden = true; - tab.removeEventListener("DOMAttrModified", this, false); } else { this._visible++; this._updatePreview(preview); preview.hidden = false; - tab.addEventListener("DOMAttrModified", this, false); } }, this); @@ -705,10 +700,6 @@ var allTabs = { }, suspendGUI: function allTabs_suspendGUI() { - Array.forEach(this.container.childNodes, function (preview) { - preview._tab.removeEventListener("DOMAttrModified", this, false); - }, this); - this.filterField.removeAttribute("emptytext"); this.filterField.value = ""; this._currentFilter = null; @@ -722,9 +713,11 @@ var allTabs = { handleEvent: function allTabs_handleEvent(event) { switch (event.type) { - case "DOMAttrModified": + case "TabAttrModified": // tab attribute modified (e.g. label, crop, busy, image) - this._updatePreview(this._getPreview(event.target)); + let preview = this._getPreview(event.target); + if (!preview.hidden) + this._updatePreview(preview); break; case "TabOpen": if (this.isOpen) @@ -832,7 +825,6 @@ var allTabs = { _removePreview: function allTabs_removePreview(aPreview) { var updateUI = (this.isOpen && !aPreview.hidden); - aPreview._tab.removeEventListener("DOMAttrModified", this, false); aPreview._tab = null; this.container.removeChild(aPreview); if (updateUI) { diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index c5d681096f7a..38f48f16a7e4 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -1299,14 +1299,12 @@ function delayedStartup(isLoadingBlank, mustLoadSidebar) { NP.trackBrowserWindow(window); // initialize the session-restore service (in case it's not already running) - if (document.documentElement.getAttribute("windowtype") == "navigator:browser") { - try { - var ss = Cc["@mozilla.org/browser/sessionstore;1"]. - getService(Ci.nsISessionStore); - ss.init(window); - } catch(ex) { - dump("nsSessionStore could not be initialized: " + ex + "\n"); - } + try { + Cc["@mozilla.org/browser/sessionstore;1"] + .getService(Ci.nsISessionStore) + .init(window); + } catch (ex) { + dump("nsSessionStore could not be initialized: " + ex + "\n"); } // bookmark-all-tabs command diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsContextMenu.js index e456fdfe7bb8..976ab11d8fd7 100644 --- a/browser/base/content/nsContextMenu.js +++ b/browser/base/content/nsContextMenu.js @@ -147,7 +147,7 @@ nsContextMenu.prototype = { // Time to do some bad things and see if we've highlighted a URL that // isn't actually linked. var onPlainTextLink = false; - if (this.isTextSelected) { + if (this.isTextSelected && !this.onLink) { // Ok, we have some text, let's figure out if it looks like a URL. let selection = document.commandDispatcher.focusedWindow .getSelection(); diff --git a/browser/base/content/tabbrowser.xml b/browser/base/content/tabbrowser.xml index 60d5bf682fec..829cad6a64ea 100644 --- a/browser/base/content/tabbrowser.xml +++ b/browser/base/content/tabbrowser.xml @@ -731,6 +731,7 @@ aTab.setAttribute("image", browser.mIconURL); else aTab.removeAttribute("image"); + this._tabAttrModified(aTab); ]]>