From 5a746e48f3be66f2cc2c0ff4a2e723399c01c354 Mon Sep 17 00:00:00 2001 From: "reed@reedloden.com" Date: Thu, 8 Nov 2007 20:18:27 -0800 Subject: [PATCH] =?UTF-8?q?Back=20out=20D=C3=A3o's=20patch=20from=20bug=20?= =?UTF-8?q?392870=20as=20a=20possible=20cause=20of=20the=20Ts=20regression?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/app/profile/firefox.js | 4 --- browser/base/content/browser.js | 14 +++++++++-- browser/base/content/tabbrowser.xml | 38 +++++++++++++++++++---------- modules/libpref/src/init/all.js | 19 +++++++++++++++ 4 files changed, 56 insertions(+), 19 deletions(-) diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index 20c104ccc523..94c3d402f7dd 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -266,10 +266,6 @@ pref("browser.link.open_newwindow", 3); pref("browser.link.open_newwindow.restriction", 2); // Tab browser preferences. -pref("browser.tabs.autoHide", false); -pref("browser.tabs.warnOnClose", true); -pref("browser.tabs.warnOnOpen", true); -pref("browser.tabs.maxOpenBeforeWarn", 15); pref("browser.tabs.loadInBackground", true); pref("browser.tabs.loadFolderAndReplace", true); pref("browser.tabs.opentabfor.middleclick", true); diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index a028da137fbc..808e365b642a 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -1374,6 +1374,7 @@ AutoHideTabbarPrefListener.prototype = catch (e) { } gBrowser.setStripVisibilityTo(aVisible); + gPrefService.setBoolPref("browser.tabs.forceHide", false); } } } @@ -1746,8 +1747,17 @@ function BrowserCloseTabOrWindow() } #endif - // If the current tab is the last one, this will close the window. - gBrowser.removeCurrentTab(); + if (gBrowser.tabContainer.childNodes.length > 1 || + window.toolbar.visible && !gPrefService.getBoolPref("browser.tabs.autoHide")) { + // Just close the tab (and focus the address bar if it was the last one). + var isLastTab = gBrowser.tabContainer.childNodes.length == 1; + gBrowser.removeCurrentTab(); + if (isLastTab && gURLBar) + setTimeout(function() { gURLBar.focus(); }, 0); + return; + } + + closeWindow(true); } function BrowserTryToCloseWindow() diff --git a/browser/base/content/tabbrowser.xml b/browser/base/content/tabbrowser.xml index fbe5364db55b..6cf9302c1f20 100644 --- a/browser/base/content/tabbrowser.xml +++ b/browser/base/content/tabbrowser.xml @@ -1166,6 +1166,8 @@ if (this.mStrip.collapsed) this.setStripVisibilityTo(true); + this.mPrefs.setBoolPref("browser.tabs.forceHide", false); + // wire up a progress listener for the new browser object. var position = this.mTabContainer.childNodes.length-1; var tabListener = this.mTabProgressListener(t, b, blank); @@ -1339,22 +1341,18 @@ if (aTab.localName != "tab") aTab = this.mCurrentTab; + var l = this.mTabContainer.childNodes.length; + if (l == 1 && this.mPrefs.getBoolPref("browser.tabs.autoHide")) { + // hide the tab bar + this.mPrefs.setBoolPref("browser.tabs.forceHide", true); + this.setStripVisibilityTo(false); + return; + } + var ds = this.getBrowserForTab(aTab).docShell; if (ds.contentViewer && !ds.contentViewer.permitUnload()) return; - var l = this.mTabContainer.childNodes.length; - if (l == 1) { - closeWindow(true); - return; - } - if (l == 2) { - var autohide = this.mPrefs.getBoolPref("browser.tabs.autoHide"); - var tabStripHide = !window.toolbar.visible; - if (autohide || tabStripHide) - this.setStripVisibilityTo(false); - } - // see notes in addTab var _delayedUpdate = function(aTabContainer) { aTabContainer.adjustTabstrip(); @@ -1362,6 +1360,19 @@ } setTimeout(_delayedUpdate, 0, this.mTabContainer); + if (l == 1) { + // add a new blank tab to replace the one we're about to close + // (this ensures that the remaining tab is as good as new) + this.addTab("about:blank"); + l++; + } + else if (l == 2) { + var autohide = this.mPrefs.getBoolPref("browser.tabs.autoHide"); + var tabStripHide = !window.toolbar.visible; + if (autohide || tabStripHide) + this.setStripVisibilityTo(false); + } + // We're committed to closing the tab now. // Dispatch a notification. // We dispatch it before any teardown so that event listeners can @@ -1538,8 +1549,9 @@ if (!this.mAddProgressListenerWasCalled) { this.mAddProgressListenerWasCalled = true; var autoHide = this.mPrefs.getBoolPref("browser.tabs.autoHide"); + var forceHide = this.mPrefs.getBoolPref("browser.tabs.forceHide"); var tabStripHide = !window.toolbar.visible; - if (!autoHide && !tabStripHide) + if (!autoHide && !forceHide && !tabStripHide) this.setStripVisibilityTo(true); } diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js index e0767cc4376e..1b71396eb3fb 100644 --- a/modules/libpref/src/init/all.js +++ b/modules/libpref/src/init/all.js @@ -172,10 +172,29 @@ pref("browser.frames.enabled", true); // form submission pref("browser.forms.submit.backwards_compatible", true); +// xxxbsmedberg more toolkit prefs? +// Tab browser preferences. +pref("browser.tabs.autoHide", true); +pref("browser.tabs.forceHide", false); +pref("browser.tabs.warnOnClose", true); +pref("browser.tabs.warnOnCloseOther", true); +pref("browser.tabs.warnOnOpen", true); +pref("browser.tabs.maxOpenBeforeWarn", 15); +// 0 = append, 1 = replace +pref("browser.tabs.loadGroup", 1); + pref("toolkit.scrollbox.smoothScroll", true); pref("toolkit.scrollbox.scrollIncrement", 20); pref("toolkit.scrollbox.clickToScroll.scrollDelay", 150); +// lets new tab/window load something different than first window +// -1 - use navigator startup preference +// 0 - loads blank page +// 1 - loads home page +// 2 - loads last page visited +pref("browser.tabs.loadOnNewTab", 0); +pref("browser.windows.loadOnNewWindow", 1); + // view source pref("view_source.syntax_highlight", true); pref("view_source.wrap_long_lines", false);