commit ea85f757c5cf5f9589ff51d9feb77015a3d3fbce
parent d8f8717930c264243730e242c72a89854654b65c
Author: Alexandru Marc <amarc@mozilla.com>
Date: Thu, 11 Dec 2025 20:36:11 +0200
Revert "Bug 1997878 - Preserve width of backgrounded split view panels to prevent issues with PiP when switching tabs r=desktop-theme-reviewers,tabbrowser-reviewers,jules,jsudiaman,emilio" for causing marionette failures @ test_restore_split_view.py
This reverts commit 5d796ce5231b43eb6c06778a3e6073c7d67c53aa.
Diffstat:
7 files changed, 40 insertions(+), 53 deletions(-)
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
@@ -3297,19 +3297,6 @@
}
/**
- * Toggle split view active attribute
- *
- * @param {boolean} isActive
- * @param {MozTabbrowserTab[]} tabs
- */
- setIsSplitViewActive(isActive, tabs) {
- for (const tab of tabs) {
- this.tabpanels.setSplitViewPanelActive(isActive, tab.linkedPanel);
- }
- this.tabpanels.isSplitViewActive = gBrowser.selectedTab.splitview;
- }
-
- /**
* Ensures the split view footer exists for the given tab.
*
* @param {MozTabbrowserTab} tab
diff --git a/browser/components/tabbrowser/content/tabsplitview.js b/browser/components/tabbrowser/content/tabsplitview.js
@@ -39,6 +39,9 @@
/** @type {MozTabbrowserTab[]} */
#tabs = [];
+ /** @type {boolean} */
+ #activated = false;
+
/**
* @returns {boolean}
*/
@@ -144,26 +147,26 @@
/**
* Show all Split View tabs in the content area.
*/
- #activate(skipShowPanels = false) {
+ #activate() {
updateUrlbarButton.arm();
- if (!skipShowPanels) {
- gBrowser.showSplitViewPanels(this.#tabs);
+ if (this.#activated) {
+ return;
}
+ gBrowser.showSplitViewPanels(this.#tabs);
this.container.dispatchEvent(
new CustomEvent("TabSplitViewActivate", {
detail: { tabs: this.#tabs, splitview: this },
bubbles: true,
})
);
+ this.#activated = true;
}
/**
* Remove Split View tabs from the content area.
*/
- #deactivate(skipHidePanels = false) {
- if (!skipHidePanels) {
- gBrowser.hideSplitViewPanels(this.#tabs);
- }
+ #deactivate() {
+ gBrowser.hideSplitViewPanels(this.#tabs);
updateUrlbarButton.arm();
this.container.dispatchEvent(
new CustomEvent("TabSplitViewDeactivate", {
@@ -171,6 +174,7 @@
bubbles: true,
})
);
+ this.#activated = false;
}
/**
@@ -198,7 +202,6 @@
}
if (this.hasActiveTab) {
this.#activate();
- gBrowser.setIsSplitViewActive(true, this.#tabs);
}
}
@@ -207,7 +210,6 @@
*/
unsplitTabs() {
gBrowser.unsplitTabs(this);
- gBrowser.setIsSplitViewActive(false, this.#tabs);
}
/**
@@ -242,11 +244,10 @@
*/
on_TabSelect(event) {
this.hasActiveTab = event.target.splitview === this;
- gBrowser.setIsSplitViewActive(this.hasActiveTab, this.#tabs);
if (this.hasActiveTab) {
- this.#activate(true);
+ this.#activate();
} else {
- this.#deactivate(true);
+ this.#deactivate();
}
}
}
diff --git a/browser/components/tabbrowser/test/browser/tabs/browser_tab_splitview.js b/browser/components/tabbrowser/test/browser/tabs/browser_tab_splitview.js
@@ -28,8 +28,19 @@ async function checkSplitViewPanelVisible(tab, isVisible) {
await BrowserTestUtils.waitForMutationCondition(
panel,
{ attributes: true },
- () => panel.classList.contains("split-view-panel-active") == isVisible
+ () => panel.classList.contains("split-view-panel") == isVisible
);
+ if (isVisible) {
+ Assert.ok(
+ gBrowser.splitViewBrowsers.includes(tab.linkedBrowser),
+ "Split view panel is active."
+ );
+ } else {
+ Assert.ok(
+ !gBrowser.splitViewBrowsers.includes(tab.linkedBrowser),
+ "Split view panel is inactive."
+ );
+ }
}
function dragSplitter(deltaX, splitter) {
diff --git a/browser/components/tabbrowser/test/browser/tabs/browser_tab_splitview_footer.js b/browser/components/tabbrowser/test/browser/tabs/browser_tab_splitview_footer.js
@@ -29,18 +29,12 @@ async function setupSplitView() {
info("Add tabs into an active split view.");
await BrowserTestUtils.switchTab(gBrowser, tabs[0]);
const splitView = gBrowser.addTabSplitView(tabs);
- const tabpanels = document.getElementById("tabbrowser-tabpanels");
- await BrowserTestUtils.waitForMutationCondition(
- tabpanels,
- { attributes: true },
- () => tabpanels.hasAttribute("splitview")
- );
for (const tab of tabs) {
const tabPanel = document.getElementById(tab.linkedPanel);
await BrowserTestUtils.waitForMutationCondition(
tabPanel,
{ attributes: true },
- () => tabPanel.classList.contains("split-view-panel-active")
+ () => tabPanel.classList.contains("split-view-panel")
);
}
diff --git a/browser/themes/shared/tabbrowser/content-area.css b/browser/themes/shared/tabbrowser/content-area.css
@@ -156,21 +156,16 @@
-moz-user-focus: none !important;
}
- .split-view-panel {
+ &[splitview] {
--panel-min-width: 140px;
- min-width: var(--panel-min-width);
- max-width: calc(100% - var(--panel-min-width));
- width: 49.4%;
- }
- &[splitview] {
- .split-view-panel.split-view-panel-active {
- margin: var(--space-xsmall);
- flex: 1;
+ .split-view-panel {
position: relative;
- width: unset;
+ flex: 1;
+ min-width: var(--panel-min-width);
+ max-width: calc(100% - var(--panel-min-width));
+ margin: var(--space-xsmall);
}
-
/* Ensure any dialogs are clipped in an inactive/not-selected panel. */
:root:not([inDOMFullscreen]) & > .split-view-panel:not(.deck-selected) {
overflow: clip;
diff --git a/toolkit/content/widgets/tabbox.js b/toolkit/content/widgets/tabbox.js
@@ -367,6 +367,10 @@
}
set splitViewPanels(newPanels) {
+ const oldPanels = this.#splitViewPanels;
+ for (const panel of oldPanels) {
+ this.removePanelFromSplitView(panel, false);
+ }
for (const [i, panel] of newPanels.entries()) {
const panelEl = document.getElementById(panel);
panelEl?.classList.add("split-view-panel");
@@ -377,7 +381,7 @@
}
}
this.#splitViewPanels = newPanels;
- this.isSplitViewActive = !!newPanels.length;
+ this.#isSplitViewActive = !!newPanels.length;
}
get splitViewPanels() {
@@ -405,10 +409,10 @@
this.#splitViewPanels.splice(index, 1);
}
}
- this.isSplitViewActive = !!this.#splitViewPanels.length;
+ this.#isSplitViewActive = !!this.#splitViewPanels.length;
}
- set isSplitViewActive(isActive) {
+ set #isSplitViewActive(isActive) {
this.toggleAttribute("splitview", isActive);
this.splitViewSplitter.hidden = !isActive;
if (isActive) {
@@ -417,11 +421,6 @@
firstPanel?.after(this.#splitViewSplitter);
}
}
-
- setSplitViewPanelActive(isActive, panel) {
- const panelEl = document.getElementById(panel);
- panelEl?.classList.toggle("split-view-panel-active", isActive);
- }
}
MozXULElement.implementCustomInterface(MozTabpanels, [
diff --git a/toolkit/content/xul.css b/toolkit/content/xul.css
@@ -461,7 +461,7 @@ deck > *|*:not(:-moz-native-anonymous) {
}
tabpanels > .deck-selected,
-tabpanels > .split-view-panel-active,
+tabpanels > .split-view-panel,
tabpanels > .split-view-splitter,
deck > .deck-selected {
-moz-subtree-hidden-only-visually: 0;