--- seamonkey-2.53.7/comm/suite/app/profile/suite-prefs.js +++ seamonkey-2.53.7/comm/suite/app/profile/suite-prefs.js @@ -225,16 +225,17 @@ pref("browser.tabs.autoHide", false); pref("browser.tabs.forceHide", false); pref("browser.tabs.closeWindowWithLastTab", true); pref("browser.tabs.warnOnClose", true); pref("browser.tabs.warnOnCloseOther", true); pref("browser.tabs.warnOnOpen", true); pref("browser.tabs.maxOpenBeforeWarn", 15); pref("browser.tabs.insertRelatedAfterCurrent", true); pref("browser.tabs.insertAllTabsAfterCurrent", false); +pref("browser.tabs.selectOwnerOnClose", true); // For future use pref("browser.tabs.loadBookmarksInBackground", false); // how many browsers can be saved in the DOM (by the tabbed browser) pref("browser.tabs.max_tabs_undo", 3); // should popups by saved in the DOM (by the tabbed browser) pref("browser.tabs.cache_popups", false); --- seamonkey-2.53.7/comm/suite/base/content/utilityOverlay.js +++ seamonkey-2.53.7/comm/suite/base/content/utilityOverlay.js @@ -1624,21 +1624,23 @@ function openLinkIn(url, where, params) // forces tab to be focused loadInBackground = true; // fall through case "tabshifted": loadInBackground = !loadInBackground; // fall through case "tab": var browser = w.getBrowser(); + var owner = loadInBackground ? null : browser.selectedTab; var tab = browser.addTab(url, { referrerURI: aReferrerURI, referrerPolicy: aReferrerPolicy, charset: aCharset, postData: aPostData, + ownerTab: owner, allowThirdPartyFixup: aAllowThirdPartyFixup, relatedToCurrent: aRelatedToCurrent, allowMixedContent: aAllowMixedContent, noReferrer: aNoReferrer, userContextId: aUserContextId, originPrincipal: aPrincipal, triggeringPrincipal: aTriggeringPrincipal, }); --- seamonkey-2.53.7/comm/suite/browser/tabbrowser.xml +++ seamonkey-2.53.7/comm/suite/browser/tabbrowser.xml @@ -1151,16 +1151,28 @@ newBrowser.docShellIsActive = this.mCurrentTab.linkedBrowser.docShellIsActive; if (this.mCurrentBrowser) { this.mCurrentBrowser.droppedLinkHandler = null; this.mCurrentBrowser.docShellIsActive = false; this.mCurrentBrowser.removeAttribute("primary"); this.finder.mListeners.forEach(l => this.mCurrentBrowser.finder.removeResultListener(l)); } + var oldTab = this.mCurrentTab; + + // Preview mode should not reset the owner + if (!this._previewMode && !oldTab.selected) + oldTab.owner = null; + + let lastRelatedTab = this.mLastRelatedIndex ? this.tabs[this.mLastRelatedIndex] : null; + if (lastRelatedTab) { + if (!lastRelatedTab.selected) + lastRelatedTab.owner = null; + } + newBrowser.setAttribute("primary", "true"); this.mCurrentBrowser = newBrowser; this.mCurrentTab = this.selectedTab; this.mCurrentTab.removeAttribute("unread"); this.finder.mListeners.forEach(l => this.mCurrentBrowser.finder.addResultListener(l)); var tabListener = this.mTabListeners[this.tabContainer.selectedIndex]; @@ -1445,16 +1457,19 @@ opener: null, }; } params.focusNewTab = params.inBackground != null ? !params.inBackground : !Services.prefs.getBoolPref("browser.tabs.loadInBackground"); + if (params.focusNewTab) + params.ownerTab = this.selectedTab; + return this.addTab(aURI, params); ]]> @@ -1556,43 +1571,49 @@ index) newIndex = currentIndex - 1; else if (currentIndex < index) newIndex = currentIndex; @@ -2033,17 +2069,21 @@ this._browsers = null; // Clean up before/afterselected attributes before removing the tab aTab._selected = false; aTab.remove(); // When the current tab is removed select a new tab // and fire select events on tabpanels and tabs - if (this.mPreviousTab && (aTab == this.mCurrentTab)) + if (aTab.owner && !aTab.owner.hidden && !aTab.owner.closing && + Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")) { + this.selectedTab = aTab.owner; + } + else if (this.mPreviousTab && (aTab == this.mCurrentTab)) this.selectedTab = this.mPreviousTab; else { this.tabContainer.selectedIndex = newIndex; // We need to explicitly clear this, because updateCurrentBrowser // doesn't get called for a background tab this.mPreviousTab = null; }