diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js index 8f2ebf3a0bd4e2af01cf41024b16bd491e8ed961..27721e26c3cd8cb066b462dedfa4ce785ca5c2c3 100644 --- a/browser/components/tabbrowser/content/tab.js +++ b/browser/components/tabbrowser/content/tab.js @@ -21,6 +21,7 @@ + @@ -35,9 +36,11 @@ pack="center" flex="1"> `; @@ -84,7 +87,7 @@ ".tab-content": "pinned,selected=visuallyselected,multiselected,titlechanged,attention", ".tab-icon-stack": - "sharing,pictureinpicture,crashed,busy,soundplaying,soundplaying-scheduledremoval,pinned,muted,blocked,selected=visuallyselected,activemedia-blocked", + "zen-essential,sharing,pictureinpicture,crashed,busy,soundplaying,soundplaying-scheduledremoval,pinned,muted,blocked,selected=visuallyselected,activemedia-blocked", ".tab-throbber": "fadein,pinned,busy,progress,selected=visuallyselected", ".tab-icon-pending": @@ -93,9 +96,9 @@ "src=image,requestcontextid,fadein,pinned,selected=visuallyselected,busy,crashed,sharing,pictureinpicture,pending,discarded", ".tab-sharing-icon-overlay": "sharing,selected=visuallyselected,pinned", ".tab-icon-overlay": - "sharing,pictureinpicture,crashed,busy,soundplaying,soundplaying-scheduledremoval,pinned,muted,blocked,selected=visuallyselected,activemedia-blocked", + "zen-essential,sharing,pictureinpicture,crashed,busy,soundplaying,soundplaying-scheduledremoval,pinned,muted,blocked,selected=visuallyselected,activemedia-blocked", ".tab-audio-button": - "crashed,soundplaying,soundplaying-scheduledremoval,pinned,muted,activemedia-blocked", + "zen-essential,crashed,soundplaying,soundplaying-scheduledremoval,pinned,muted,activemedia-blocked", ".tab-label-container": "pinned,selected=visuallyselected,labeldirection", ".tab-label": @@ -184,7 +187,7 @@ } set _visuallySelected(val) { - if (val == this.hasAttribute("visuallyselected")) { + if (val == this.hasAttribute("visuallyselected") || (!val && this.linkedBrowser?.closest('.browserSidebarContainer').classList.contains('zen-glance-background'))) { return; } @@ -220,11 +223,25 @@ } get visible() { - return ( - this.isOpen && - !this.hidden && - (!this.group || this.group.isTabVisibleInGroup(this)) - ); + if (!this.isOpen || this.hidden || this.hasAttribute("zen-empty-tab")) { + return false; + } + // Selected tabs are always visible + if (this.selected || this.multiselected) return true; + // Recursively check all parent groups + let currentParent = this.group; + while (currentParent) { + if (currentParent.collapsed && !currentParent.activeTabs?.includes(this)) { + return false; + } + currentParent = currentParent.group; + } + if (this.pinned && !this.hasAttribute("zen-essential") && + gZenWorkspaces.activeWorkspaceElement?.hasCollapsedPinnedTabs && + !gZenWorkspaces.activeWorkspaceElement.collapsiblePins.activeTabs?.includes(this)) { + return false; + } + return true; } get hidden() { @@ -303,7 +320,7 @@ return false; } - return true; + return !this.hasAttribute("zen-empty-tab"); } get lastAccessed() { @@ -388,7 +405,18 @@ } get group() { - return this.closest("tab-group"); + if (typeof gBrowser === "undefined") { + return null; + } + if (gBrowser.isTabGroup(this.parentElement?.parentElement)) { + return this.parentElement.parentElement; + } + if (this.pinned && !this.hasAttribute('zen-essential')) { + let collapsiblePins = gZenWorkspaces.workspaceElement(this.getAttribute('zen-workspace-id'))?.collapsiblePins; + if (collapsiblePins?.collapsed) { + return collapsiblePins; + } + } } get splitview() { @@ -470,6 +498,10 @@ } } + if (event.target.classList.contains("tab-reset-pin-button")) { + gZenPinnedTabManager.onResetPinButtonMouseOver(this, event); + } + // If the previous target wasn't part of this tab then this is a mouseenter event. if (!this.contains(event.relatedTarget)) { this._mouseenter(); @@ -499,6 +531,7 @@ if (!this.contains(event.relatedTarget)) { this._mouseleave(); } + gZenPinnedTabManager.onResetPinButtonMouseOut(this); } on_dragstart(event) { @@ -533,6 +566,8 @@ this.style.MozUserFocus = "ignore"; } else if ( event.target.classList.contains("tab-close-button") || + event.target.classList.contains("tab-reset-button") || + event.target.classList.contains("tab-reset-pin-button") || event.target.classList.contains("tab-icon-overlay") || event.target.classList.contains("tab-audio-button") ) { @@ -567,7 +602,7 @@ } } else if ( event.altKey && - Services.prefs.getBoolPref("browser.tabs.splitView.enabled", false) + true ) { eventMaySelectTab = false; } else if (!this.selected && this.multiselected) { @@ -592,6 +627,10 @@ this.style.MozUserFocus = ""; } + get glanceTab() { + return this.querySelector("tab[zen-glance-tab]"); + } + on_click(event) { if (event.button != 0) { return; @@ -615,14 +654,31 @@ trigger: "alt_click", }); } + if ( + !event.target.classList.contains("tab-close-button") && + !event.target.classList.contains("tab-icon-overlay") && + !event.target.classList.contains("tab-audio-button") && + Services.prefs.getBoolPref("zen.splitView.enable-tab-click-split", false) + ) { + if (!this.splitView) { + gZenViewSplitter.contextSplitTabs(this); + } else { + gBrowser.selectedTab = this; + gZenViewSplitter.removeTabFromGroup(this, undefined, { + forUnsplit: true, + changeTab: false + }); + } + } return; } - if (event.getModifierState("Accel") || event.shiftKey) { + if (event.shiftKey) { return; } if ( + !event.getModifierState("Accel") && gBrowser.multiSelectedTabsCount > 0 && !event.target.classList.contains("tab-close-button") && !event.target.classList.contains("tab-icon-overlay") && @@ -634,8 +690,9 @@ } if ( - event.target.classList.contains("tab-icon-overlay") || - event.target.classList.contains("tab-audio-button") + !event.getModifierState("Accel") && + (event.target.classList.contains("tab-icon-overlay") || + event.target.classList.contains("tab-audio-button")) ) { if (this.activeMediaBlocked) { if (this.multiselected) { @@ -653,7 +710,7 @@ return; } - if (event.target.classList.contains("tab-close-button")) { + if (!event.getModifierState("Accel") && event.target.classList.contains("tab-close-button")) { if (this.multiselected) { gBrowser.removeMultiSelectedTabs( lazy.TabMetrics.userTriggeredContext( @@ -673,6 +730,14 @@ // (see tabbrowser-tabs 'click' handler). gBrowser.tabContainer._blockDblClick = true; } + + if (event.target.classList.contains("tab-reset-pin-button")) { + gZenPinnedTabManager._onTabResetPinButton(event, this, 'reset'); + gBrowser.tabContainer._blockDblClick = true; + } else if (!event.getModifierState("Accel") && event.target.classList.contains("tab-reset-button")) { + gZenPinnedTabManager.onCloseTabShortcut(event, this); + gBrowser.tabContainer._blockDblClick = true; + } } on_dblclick(event) { @@ -696,6 +761,8 @@ animate: true, triggeringEvent: event, }); + } else if (this.hasAttribute('zen-essential') && !event.target.classList.contains("tab-icon-overlay")) { + gZenPinnedTabManager._onTabResetPinButton(event, this, 'reset'); } }