Bug 313715: "Open in New Tab" from Bookmark Manager doesn't respect background pref

Stop caching the result of shouldLoadTabInBackground(), there's no point since we need to look at the state of the shift key every time, and we didn't update it in all code paths to begin with.
Pass in |event| from more places in history and bookmarks so we'll actually look at te shift key.
Replace use of "tab_background" with looking at shouldLoadTabInBackground().
r=IanN, sr=Neil
This commit is contained in:
jag%tty.nl 2006-01-04 17:29:38 +00:00
parent 455435572c
commit 73f6674801
4 changed files with 56 additions and 44 deletions

View File

@ -72,8 +72,6 @@ var kDSContractID;
var kDSIID;
var DS;
var gLoadInBackground = false;
// should be moved in a separate file
function initServices()
{
@ -524,16 +522,16 @@ var BookmarksCommand = {
BookmarksUtils.moveSelection("move", aSelection, target);
},
openBookmark: function (aSelection, aTargetBrowser, aDS)
openBookmark: function (aSelection, aTargetBrowser, aDS, aEvent)
{
if (!aTargetBrowser)
return;
for (var i=0; i<aSelection.length; ++i) {
var type = aSelection.type[i];
if (type == "Bookmark" || type == "")
this.openOneBookmark(aSelection.item[i].Value, aTargetBrowser, aDS);
this.openOneBookmark(aSelection.item[i].Value, aTargetBrowser, aDS, aEvent);
else if (type == "FolderGroup" || type == "Folder" || type == "PersonalToolbarFolder")
this.openGroupBookmark(aSelection.item[i].Value, aTargetBrowser);
this.openGroupBookmark(aSelection.item[i].Value, aTargetBrowser, aEvent);
}
},
@ -546,18 +544,23 @@ var BookmarksCommand = {
},
// requires utilityOverlay.js if opening in new window for getTopWin()
openOneBookmark: function (aURI, aTargetBrowser, aDS)
openOneBookmark: function (aURI, aTargetBrowser, aDS, aEvent)
{
var w = getTopWin();
if (!w) // no browser window open, so we have to open in new window
aTargetBrowser = "window";
var url = BookmarksUtils.getProperty(aURI, NC_NS + "URL", aDS);
// Ignore "NC:" and empty urls.
if (url == "")
return;
var w = aTargetBrowser == "window"? null:getTopWin();
if (!w) {
if (aTargetBrowser == "window") {
openDialog(getBrowserURL(), "_blank", "chrome,all,dialog=no", url);
return;
}
var browser = w.document.getElementById("content");
var browser = w.getBrowser();
switch (aTargetBrowser) {
case "current":
browser.loadURI(url);
@ -565,23 +568,24 @@ var BookmarksCommand = {
break;
case "tab":
var tab = browser.addTab(url);
if (!gLoadInBackground)
if (!BookmarksUtils.shouldLoadTabInBackground(aEvent))
browser.selectedTab = tab;
break;
}
},
openGroupBookmark: function (aURI, aTargetBrowser)
openGroupBookmark: function (aURI, aTargetBrowser, aEvent)
{
var w = getTopWin();
if (!w) // no browser window open, so we have to open in new window
aTargetBrowser = "window";
var resource = RDF.GetResource(aURI);
var urlArc = RDF.GetResource(NC_NS+"URL");
RDFC.Init(BMDS, resource);
var containerChildren = RDFC.GetElements();
var URIs = [];
var urlArc = RDF.GetResource(NC_NS + "URL");
while (containerChildren.hasMoreElements()) {
var res = containerChildren.getNext().QueryInterface(kRDFRSCIID);
var target = BMDS.GetTarget(res, urlArc, true);
@ -592,15 +596,20 @@ var BookmarksCommand = {
URIs.push({ URI: target.QueryInterface(kRDFLITIID).Value });
}
}
if (URIs.length == 0)
return;
if (aTargetBrowser == "window") {
// This opens the URIs in separate tabs of a new window
openDialog(getBrowserURL(), "_blank", "chrome,all,dialog=no", URIs.join("\n"));
} else {
return;
}
var browser = w.getBrowser();
var tab = browser.loadGroup(URIs);
if (!gLoadInBackground)
if (!BookmarksUtils.shouldLoadTabInBackground(aEvent))
browser.selectedTab = tab;
}
},
findBookmark: function ()
@ -1581,7 +1590,7 @@ var BookmarksUtils = {
shouldLoadTabInBackground: function(aEvent)
{
var loadInBackground = PREF.getBoolPref("browser.tabs.loadInBackground");
if (aEvent.shiftKey)
if (aEvent && aEvent.shiftKey)
loadInBackground = !loadInBackground;
return loadInBackground;
},
@ -1591,8 +1600,6 @@ var BookmarksUtils = {
if (!aEvent)
return null;
gLoadInBackground = this.shouldLoadTabInBackground(aEvent);
switch (aEvent.type) {
case "click":
case "dblclick":
@ -1633,7 +1640,7 @@ var BookmarksUtils = {
var rSource = RDF.GetResource(aEvent.target.id);
var selection = BookmarksUtils.getSelectionFromResource(rSource);
BookmarksCommand.openBookmark(selection, target, aDS)
BookmarksCommand.openBookmark(selection, target, aDS, aEvent)
}
}

View File

@ -428,7 +428,7 @@
var target = BookmarksUtils.getBrowserTargetFromEvent(aEvent);
if (target)
BookmarksCommand.openBookmark(selection, target, this.db);
BookmarksCommand.openBookmark(selection, target, this.db, aEvent);
]]></body>
</method>
@ -440,7 +440,7 @@
if (!this._selection.isContainer[0]) {
var target = BookmarksUtils.getBrowserTargetFromEvent(aEvent);
if (target)
BookmarksCommand.openBookmark(this._selection, target, this.db)
BookmarksCommand.openBookmark(this._selection, target, this.db, aEvent)
}
]]></body>
</method>

View File

@ -150,7 +150,7 @@ function historyOnClick(aEvent)
gHistoryTree.treeBoxObject.getCellAt(aEvent.clientX, aEvent.clientY, row, col, elt);
if (row.value >= 0 && col.value) {
if (!isContainer(gHistoryTree, row.value))
OpenURL(target);
OpenURL(target, aEvent);
else if (aEvent.button == 0 && elt.value != "twisty")
gHistoryTree.treeBoxObject.view.toggleOpenState(row.value);
}
@ -288,15 +288,17 @@ function collapseExpand()
gHistoryTree.treeBoxObject.view.toggleOpenState(currentIndex);
}
function OpenURL(aTarget)
function OpenURL(aTarget, aEvent)
{
var currentIndex = gHistoryTree.currentIndex;
var builder = gHistoryTree.builder.QueryInterface(Components.interfaces.nsIXULTreeBuilder);
var url = builder.getResourceAtIndex(currentIndex).ValueUTF8;
var uri = Components.classes["@mozilla.org/network/standard-url;1"].
createInstance(Components.interfaces.nsIURI);
uri.spec = url;
if (uri.schemeIs("javascript") || uri.schemeIs("data")) {
if (!gIOService)
gIOService = Components.classes['@mozilla.org/network/io-service;1']
.getService(Components.interfaces.nsIIOService);
try {
var scheme = gIOService.extractScheme(url);
if (scheme == "javascript" || scheme == "data") {
var strBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"]
.getService(Components.interfaces.nsIStringBundleService);
var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
@ -308,6 +310,9 @@ function OpenURL(aTarget)
promptService.alert(window, brandStr, errorStr);
return false;
}
} catch (e) {
return false;
}
if (aTarget != "current") {
var count = gHistoryTree.view.selection.count;
@ -338,7 +343,7 @@ function OpenURL(aTarget)
}
} else {
if (URLArray.length > 0)
OpenURLArrayInTabs(URLArray, aTarget == "tab_background");
OpenURLArrayInTabs(URLArray, BookmarksUtils.shouldLoadTabInBackground(aEvent));
}
}
else if (!isContainer(gHistoryTree, currentIndex))

View File

@ -76,7 +76,7 @@
<menuitem id="miOpenInNewWindow" label="&openLinkCmd.label;" accesskey="&openLinkCmd.accesskey;"
oncommand="OpenURL('window');"/>
<menuitem id="miOpenInNewTab" label="&openLinkCmdInTab.label;" accesskey="&openLinkCmdInTab.accesskey;"
oncommand="OpenURL(BookmarksUtils.shouldLoadTabInBackground(event) ? 'tab_background' : 'tab');"/>
oncommand="OpenURL('tab', event);"/>
<menuseparator id="pre-bookmarks-separator"/>
<menuitem id="miAddBookmark" label="&bookmarkLinkCmd.label;" accesskey="&bookmarkLinkCmd.accesskey;" oncommand="historyAddBookmarks();"/>
<menuitem id="miCopyLinkLocation" label="&copyLinkCmd.label;" accesskey="&copyLinkCmd.accesskey;"
@ -93,12 +93,12 @@
<tree id="historyTree" flex="1" enableColumnDrag="true" class="plain"
context="historyMenu"
datasources="rdf:history" ref="NC:HistoryByDate" flags="dont-build-content"
onkeypress="if (event.keyCode == 13) OpenURL(BookmarksUtils.getBrowserTargetFromEvent(event));"
onkeypress="if (event.keyCode == 13) OpenURL(BookmarksUtils.getBrowserTargetFromEvent(event), event);"
onselect="this.view.selectionChanged();
historyOnSelect();"
onclick="historyOnClick(event);"
ondraggesture="if (event.originalTarget.localName == 'treechildren') nsDragAndDrop.startDrag(event, historyDNDObserver);"
ondblclick="if (validClickConditions(event)) OpenURL(BookmarksUtils.getBrowserTargetFromEvent(event));">
ondblclick="if (validClickConditions(event)) OpenURL(BookmarksUtils.getBrowserTargetFromEvent(event), event);">
<template>
<rule>
<treechildren>