mirror of
				https://github.com/zen-browser/desktop.git
				synced 2025-10-26 12:27:50 +00:00 
			
		
		
		
	feat: update preferences and UI components for new features and improvements
This commit is contained in:
		| @@ -1,8 +1,8 @@ | ||||
| diff --git a/browser/base/content/aboutDialog.xhtml b/browser/base/content/aboutDialog.xhtml | ||||
| index 53e4616a99b7826453d5b6dea027184d90bc73f7..90c9fe5683411cf3087bebd3d0941decf6d23e89 100644 | ||||
| index c64980810570fcea84e33fdc2d66ac42a79f4e46..b7198e810a7510fa82cc6801cfd01c88a08d42c1 100644 | ||||
| --- a/browser/base/content/aboutDialog.xhtml | ||||
| +++ b/browser/base/content/aboutDialog.xhtml | ||||
| @@ -34,6 +34,7 @@ | ||||
| @@ -35,6 +35,7 @@ | ||||
|   | ||||
|      <html:link rel="localization" href="branding/brand.ftl"/> | ||||
|      <html:link rel="localization" href="browser/aboutDialog.ftl"/> | ||||
| @@ -10,7 +10,7 @@ index 53e4616a99b7826453d5b6dea027184d90bc73f7..90c9fe5683411cf3087bebd3d0941dec | ||||
|    </linkset> | ||||
|   | ||||
|    <html:div id="aboutDialogContainer"> | ||||
| @@ -124,21 +125,23 @@ | ||||
| @@ -125,21 +126,23 @@ | ||||
|              </description> | ||||
|            </vbox> | ||||
|            <description class="text-blurb" id="communityDesc" data-l10n-id="community-2"> | ||||
| @@ -30,8 +30,8 @@ index 53e4616a99b7826453d5b6dea027184d90bc73f7..90c9fe5683411cf3087bebd3d0941dec | ||||
|      <vbox id="bottomBox"> | ||||
|        <hbox pack="center"> | ||||
|          <label is="text-link" class="bottom-link" useoriginprincipal="true" href="about:license" data-l10n-id="bottomLinks-license"/> | ||||
| -        <label is="text-link" class="bottom-link" href="https://www.mozilla.org/about/legal/terms/firefox/" data-l10n-id="bottomLinks-rights"/> | ||||
| -        <label is="text-link" class="bottom-link" href="https://www.mozilla.org/privacy/firefox/?utm_source=firefox-browser&utm_medium=firefox-desktop&utm_campaign=about-dialog" data-l10n-id="bottomLinks-privacy"/> | ||||
| -        <label is="text-link" class="bottom-link" href="https://www.mozilla.org/about/legal/terms/firefox/" data-l10n-id="bottom-links-terms"/> | ||||
| -        <label is="text-link" class="bottom-link" href="https://www.mozilla.org/privacy/firefox/?utm_source=firefox-browser&utm_medium=firefox-desktop&utm_campaign=about-dialog" data-l10n-id="bottom-links-privacy"/> | ||||
| +        <label is="text-link" class="bottom-link" href="about:rights" data-l10n-id="bottomLinks-rights"/> | ||||
| +        <label is="text-link" class="bottom-link" href="https://www.zen-browser.app/privacy-policy/" data-l10n-id="bottomLinks-privacy"/> | ||||
|        </hbox> | ||||
|   | ||||
| @@ -1,17 +1,17 @@ | ||||
| diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml | ||||
| index 7d7e8697f02f90d4f336c9ab0a73a89848e0c21c..2fd19f3b43db4bdd99e65fecd1481f80d4541a7a 100644 | ||||
| index 2ca8bdd2674fb4addf3bbf94ff17abc5c93c6293..49c772ae71e6b3793ff806d22197d3028ff4385f 100644 | ||||
| --- a/browser/base/content/browser-box.inc.xhtml | ||||
| +++ b/browser/base/content/browser-box.inc.xhtml | ||||
| @@ -23,7 +23,14 @@ | ||||
|      <browser id="sidebar" autoscroll="false" disablehistory="true" disablefullscreen="true" tooltip="aHTMLTooltip"/> | ||||
|    </vbox> | ||||
| @@ -26,7 +26,14 @@ | ||||
|      <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/> | ||||
|      <box id="after-splitter"></box> | ||||
|    </div> | ||||
| +#include zen-sidebar-panel.inc.xhtml | ||||
| +<vbox flex="1" id="zen-appcontent-wrapper"> | ||||
| +<html:div id="zen-appcontent-navbar-container"></html:div> | ||||
| +<hbox id="zen-tabbox-wrapper" flex="1"> | ||||
|    <tabbox id="tabbrowser-tabbox" flex="1" tabcontainer="tabbrowser-tabs"> | ||||
| +    #include zen-tabbrowser-elements.inc.xhtml | ||||
| +#include zen-tabbrowser-elements.inc.xhtml | ||||
|      <tabpanels id="tabbrowser-tabpanels" flex="1" selectedIndex="0"/> | ||||
|    </tabbox> | ||||
|  </hbox> | ||||
|   | ||||
| @@ -1,36 +1,17 @@ | ||||
| diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js | ||||
| index 63100defacf66c6b3232b9e0a783a5fd14e3a46a..398d685b142a47a85619dfc55772ea98ccfad445 100644 | ||||
| index 3d5173315812589c0b79beec5f0419fc37cb8868..c4216db9e414fbbaead6ecd89b40366b0d8a50c1 100644 | ||||
| --- a/browser/base/content/browser-init.js | ||||
| +++ b/browser/base/content/browser-init.js | ||||
| @@ -162,13 +162,15 @@ var gBrowserInit = { | ||||
|          elem.setAttribute("skipintoolbarset", "true"); | ||||
|        } | ||||
|      } | ||||
| +    ZenCustomizableUI.init(window); | ||||
|      for (let area of CustomizableUI.areas) { | ||||
|        let type = CustomizableUI.getAreaType(area); | ||||
| -      if (type == CustomizableUI.TYPE_TOOLBAR) { | ||||
| +      if (type == CustomizableUI.TYPE_TOOLBAR && !area.startsWith("zen-")) { | ||||
|          let node = document.getElementById(area); | ||||
|          CustomizableUI.registerToolbarNode(node); | ||||
|        } | ||||
|      } | ||||
| +    ZenCustomizableUI.registerToolbarNodes(window); | ||||
|      if (isVerticalTabs) { | ||||
|        // Show the vertical tabs toolbar | ||||
|        setToolbarVisibility( | ||||
| @@ -287,6 +289,10 @@ var gBrowserInit = { | ||||
|      gPrivateBrowsingUI.init(); | ||||
|      BrowserSearch.init(); | ||||
|      BrowserPageActions.init(); | ||||
| + | ||||
| +Services.scriptloader.loadSubScript("chrome://browser/content/ZenStartup.mjs", window); | ||||
| +Services.scriptloader.loadSubScript("chrome://browser/content/zenThemeModifier.js", window); | ||||
| + | ||||
|      if (gToolbarKeyNavEnabled) { | ||||
|        ToolbarKeyboardNavigator.init(); | ||||
|      } | ||||
| @@ -365,6 +371,7 @@ var gBrowserInit = { | ||||
| @@ -175,6 +175,8 @@ var gBrowserInit = { | ||||
|    }, | ||||
|   | ||||
|    onLoad() { | ||||
| +    Services.scriptloader.loadSubScript("chrome://browser/content/ZenStartup.mjs", window); | ||||
| +    Services.scriptloader.loadSubScript("chrome://browser/content/zenThemeModifier.js", window); | ||||
|      gBrowser.addEventListener("DOMUpdateBlockedPopups", e => | ||||
|        PopupBlockerObserver.handleEvent(e) | ||||
|      ); | ||||
| @@ -310,6 +312,7 @@ var gBrowserInit = { | ||||
|      TelemetryTimestamps.add("delayedStartupStarted"); | ||||
|   | ||||
|      this._cancelDelayedStartup(); | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js | ||||
| index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..22dcf304591290d7a1b60f01998b6cf4782c0cdc 100644 | ||||
| index b89846a1103827b7e65c0b6c9197e80761e3f5c0..cc7205765244738743db92bfcafc1f288919ae0d 100644 | ||||
| --- a/browser/base/content/browser.js | ||||
| +++ b/browser/base/content/browser.js | ||||
| @@ -32,6 +32,7 @@ ChromeUtils.defineESModuleGetters(this, { | ||||
| @@ -33,6 +33,7 @@ ChromeUtils.defineESModuleGetters(this, { | ||||
|    ContextualIdentityService: | ||||
|      "resource://gre/modules/ContextualIdentityService.sys.mjs", | ||||
|    CustomizableUI: "resource:///modules/CustomizableUI.sys.mjs", | ||||
| @@ -10,7 +10,7 @@ index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..22dcf304591290d7a1b60f01998b6cf4 | ||||
|    DevToolsSocketStatus: | ||||
|      "resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs", | ||||
|    DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs", | ||||
| @@ -3440,6 +3441,11 @@ var XULBrowserWindow = { | ||||
| @@ -2698,6 +2699,11 @@ var XULBrowserWindow = { | ||||
|      AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser); | ||||
|      TranslationsParent.onLocationChange(gBrowser.selectedBrowser); | ||||
|   | ||||
| @@ -22,27 +22,7 @@ index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..22dcf304591290d7a1b60f01998b6cf4 | ||||
|      PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser); | ||||
|   | ||||
|      if (!gMultiProcessBrowser) { | ||||
| @@ -4435,7 +4441,7 @@ nsBrowserAccess.prototype = { | ||||
|      // Passing a null-URI to only create the content window, | ||||
|      // and pass true for aSkipLoad to prevent loading of | ||||
|      // about:blank | ||||
| -    return this.getContentWindowOrOpenURIInFrame( | ||||
| +    let res = this.getContentWindowOrOpenURIInFrame( | ||||
|        null, | ||||
|        aParams, | ||||
|        aWhere, | ||||
| @@ -4443,6 +4449,10 @@ nsBrowserAccess.prototype = { | ||||
|        aName, | ||||
|        true | ||||
|      ); | ||||
| +    if (typeof window.gZenGlanceManager !== "undefined" && window.toolbar.visible) { | ||||
| +      window.gZenGlanceManager.onTabOpen(res, aURI); | ||||
| +    } | ||||
| +    return res; | ||||
|    }, | ||||
|   | ||||
|    openURIInFrame: function browser_openURIInFrame( | ||||
| @@ -6351,7 +6361,7 @@ function switchToTabHavingURI( | ||||
| @@ -5194,7 +5200,7 @@ function switchToTabHavingURI( | ||||
|        ignoreQueryString || replaceQueryString, | ||||
|        ignoreFragmentWhenComparing | ||||
|      ); | ||||
| @@ -51,7 +31,7 @@ index 019b168c1aeae7e1c97a3ae58c99a48a27f54134..22dcf304591290d7a1b60f01998b6cf4 | ||||
|      for (let i = 0; i < browsers.length; i++) { | ||||
|        let browser = browsers[i]; | ||||
|        let browserCompare = cleanURL( | ||||
| @@ -6392,7 +6402,7 @@ function switchToTabHavingURI( | ||||
| @@ -5235,7 +5241,7 @@ function switchToTabHavingURI( | ||||
|          } | ||||
|   | ||||
|          if (!doAdopt) { | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml | ||||
| index 68849f5093cd8ab99ab0747d972799eaf3ad7e22..3b4e6a179ab7b71859f832709778c326a39cffda 100644 | ||||
| index 0d0a559a6473149b50f4bf18d059e86907c4acd3..a5a48ba1d50b3bf74dec3f3d371a76228e246a9e 100644 | ||||
| --- a/browser/base/content/browser.xhtml | ||||
| +++ b/browser/base/content/browser.xhtml | ||||
| @@ -26,6 +26,7 @@ | ||||
| @@ -10,7 +10,7 @@ index 68849f5093cd8ab99ab0747d972799eaf3ad7e22..3b4e6a179ab7b71859f832709778c326 | ||||
|          persist="screenX screenY width height sizemode" | ||||
|          data-l10n-sync="true"> | ||||
|  <head> | ||||
| @@ -100,6 +101,8 @@ | ||||
| @@ -104,6 +105,8 @@ | ||||
|   | ||||
|    <title data-l10n-id="browser-main-window-default-title"></title> | ||||
|   | ||||
| @@ -19,15 +19,15 @@ index 68849f5093cd8ab99ab0747d972799eaf3ad7e22..3b4e6a179ab7b71859f832709778c326 | ||||
|  # All JS files which are needed by browser.xhtml and other top level windows to | ||||
|  # support MacOS specific features *must* go into the global-scripts.inc file so | ||||
|  # that they can be shared with macWindow.inc.xhtml. | ||||
| @@ -169,6 +172,7 @@ | ||||
|      }); | ||||
|    }); | ||||
| @@ -148,6 +151,7 @@ | ||||
|    window.addEventListener("DOMContentLoaded", | ||||
|      gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true }); | ||||
|  </script> | ||||
| +#include zen-assets.inc.xhtml | ||||
|  </head> | ||||
|  <html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> | ||||
|  # All sets except for popupsets (commands, keys, and stringbundles) | ||||
| @@ -190,9 +194,13 @@ | ||||
| @@ -169,9 +173,13 @@ | ||||
|      </vbox> | ||||
|    </html:template> | ||||
|   | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml | ||||
| index 959c523b21c642f29353b9de37b3ce6b5505b01b..4cd26ea85ad4905bade71dcd470b8678079787bd 100644 | ||||
| index 198c188e074b7062169764fb7d81c692d3a2bdae..b412a3c1fabdc6470b4ea9e7be34c426cc76aafd 100644 | ||||
| --- a/browser/base/content/main-popupset.inc.xhtml | ||||
| +++ b/browser/base/content/main-popupset.inc.xhtml | ||||
| @@ -206,6 +206,10 @@ | ||||
| @@ -201,6 +201,10 @@ | ||||
|             hidden="true" | ||||
|             tabspecific="true" | ||||
|             aria-labelledby="editBookmarkPanelTitle"> | ||||
| @@ -13,7 +13,7 @@ index 959c523b21c642f29353b9de37b3ce6b5505b01b..4cd26ea85ad4905bade71dcd470b8678 | ||||
|        <box class="panel-header"> | ||||
|          <html:h1> | ||||
|            <html:span id="editBookmarkPanelTitle"/> | ||||
| @@ -231,6 +235,7 @@ | ||||
| @@ -226,6 +230,7 @@ | ||||
|                    class="footer-button"/> | ||||
|          </html:moz-button-group> | ||||
|        </vbox> | ||||
| @@ -21,21 +21,7 @@ index 959c523b21c642f29353b9de37b3ce6b5505b01b..4cd26ea85ad4905bade71dcd470b8678 | ||||
|      </panel> | ||||
|    </html:template> | ||||
|   | ||||
| @@ -426,11 +431,13 @@ | ||||
|                observes="cmd_CustomizeToolbars" | ||||
|                class="viewCustomizeToolbar" | ||||
|                data-lazy-l10n-id="toolbar-context-menu-view-customize-toolbar-2"/> | ||||
| +#if 0 | ||||
|      <menuseparator id="sidebarRevampSeparator"/> | ||||
|      <menuitem id="toolbar-context-toggle-vertical-tabs" | ||||
|                data-lazy-l10n-id="toolbar-context-turn-on-vertical-tabs"/> | ||||
|      <menuitem id="toolbar-context-customize-sidebar" | ||||
|                data-lazy-l10n-id="toolbar-context-customize-sidebar"/> | ||||
| +#endif | ||||
|      <menuseparator contexttype="fullscreen"/> | ||||
|      <menuitem id="toolbar-context-full-screen-autohide" | ||||
|                class="fullscreen-context-autohide" | ||||
| @@ -565,6 +572,8 @@ | ||||
| @@ -567,6 +572,8 @@ | ||||
|   | ||||
|  #include popup-notifications.inc.xhtml | ||||
|   | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml | ||||
| index a0a382643a2f74b6d789f3641ef300eed202d5e9..a962e155f1452362a2a35df89c8f56e1c0d9968c 100644 | ||||
| index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c5d0f33a6 100644 | ||||
| --- a/browser/base/content/navigator-toolbox.inc.xhtml | ||||
| +++ b/browser/base/content/navigator-toolbox.inc.xhtml | ||||
| @@ -2,7 +2,7 @@ | ||||
| @@ -11,20 +11,18 @@ index a0a382643a2f74b6d789f3641ef300eed202d5e9..a962e155f1452362a2a35df89c8f56e1 | ||||
|    <script src="chrome://browser/content/navigator-toolbox.js" /> | ||||
|   | ||||
|    <!-- Menu --> | ||||
| @@ -17,9 +17,11 @@ | ||||
| @@ -17,9 +17,8 @@ | ||||
|  #include browser-menubar.inc | ||||
|      </toolbaritem> | ||||
|      <spacer flex="1" skipintoolbarset="true" style="order: 1000;"/> | ||||
| +#if 0 | ||||
|  #include titlebar-items.inc.xhtml | ||||
| +#endif | ||||
| -#include titlebar-items.inc.xhtml | ||||
|    </toolbar> | ||||
| - | ||||
| +<hbox id="titlebar"> | ||||
|    <toolbar id="TabsToolbar" | ||||
|             class="browser-toolbar browser-titlebar" | ||||
|             fullscreentoolbar="true" | ||||
| @@ -32,7 +34,7 @@ | ||||
| @@ -32,7 +31,7 @@ | ||||
|   | ||||
|      <hbox class="titlebar-spacer" type="pre-tabs"/> | ||||
|   | ||||
| @@ -33,18 +31,15 @@ index a0a382643a2f74b6d789f3641ef300eed202d5e9..a962e155f1452362a2a35df89c8f56e1 | ||||
|        <toolbartabstop/> | ||||
|        <hbox id="TabsToolbar-customization-target" flex="1"> | ||||
|          <toolbarbutton id="firefox-view-button" | ||||
| @@ -40,9 +42,9 @@ | ||||
| @@ -40,6 +39,7 @@ | ||||
|                         data-l10n-id="toolbar-button-firefox-view-2" | ||||
|                         role="button" | ||||
|                         aria-pressed="false" | ||||
| +                       hidden="true" | ||||
|                         cui-areatype="toolbar" | ||||
|                         removable="true"/> | ||||
| - | ||||
|          <tabs id="tabbrowser-tabs" | ||||
|                is="tabbrowser-tabs" | ||||
|                aria-multiselectable="true" | ||||
| @@ -50,6 +52,10 @@ | ||||
|   | ||||
| @@ -50,6 +50,10 @@ | ||||
|                tooltip="tabbrowser-tab-tooltip" | ||||
|                orient="horizontal" | ||||
|                stopwatchid="FX_TAB_CLICK_MS"> | ||||
| @@ -55,16 +50,7 @@ index a0a382643a2f74b6d789f3641ef300eed202d5e9..a962e155f1452362a2a35df89c8f56e1 | ||||
|            <hbox class="tab-drop-indicator" hidden="true"/> | ||||
|  # If the name (tabbrowser-arrowscrollbox) or structure of this changes | ||||
|  # significantly, there is an optimization in | ||||
| @@ -57,7 +63,7 @@ | ||||
|  # the current structure that we may want to revisit. | ||||
|            <html:div id="vertical-pinned-tabs-container" tabindex="-1"></html:div> | ||||
|            <html:div id="vertical-pinned-tabs-container-separator"></html:div> | ||||
| -          <arrowscrollbox id="tabbrowser-arrowscrollbox" orient="horizontal" flex="1" clicktoscroll="" scrolledtostart="" scrolledtoend=""> | ||||
| +          <arrowscrollbox id="tabbrowser-arrowscrollbox" orient="vertical" flex="1" clicktoscroll="" scrolledtostart="" scrolledtoend=""> | ||||
|              <tab is="tabbrowser-tab" class="tabbrowser-tab" selected="true" visuallyselected="" fadein=""/> | ||||
|              <hbox id="tabbrowser-arrowscrollbox-periphery"> | ||||
|                <toolbartabstop/> | ||||
| @@ -75,6 +81,8 @@ | ||||
| @@ -75,6 +79,8 @@ | ||||
|                                tooltip="dynamic-shortcut-tooltip" | ||||
|                                data-l10n-id="tabs-toolbar-new-tab"/> | ||||
|            <html:span id="tabbrowser-tab-a11y-desc" hidden="true"/> | ||||
| @@ -73,33 +59,28 @@ index a0a382643a2f74b6d789f3641ef300eed202d5e9..a962e155f1452362a2a35df89c8f56e1 | ||||
|          </tabs> | ||||
|   | ||||
|          <toolbarbutton id="new-tab-button" | ||||
| @@ -100,11 +108,12 @@ | ||||
| @@ -100,10 +106,10 @@ | ||||
|  #include private-browsing-indicator.inc.xhtml | ||||
|      <toolbarbutton id="content-analysis-indicator" | ||||
|                     class="toolbarbutton-1 content-analysis-indicator-icon"/> | ||||
| - | ||||
| +#if 0 | ||||
|  #include titlebar-items.inc.xhtml | ||||
| - | ||||
| +#endif | ||||
|      <toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/> | ||||
|   | ||||
| -#include titlebar-items.inc.xhtml | ||||
| +#include zen-sidebar-icons.inc.xhtml | ||||
|   | ||||
|    </toolbar> | ||||
| - | ||||
| +</hbox> | ||||
|    <toolbar id="nav-bar" | ||||
|             class="browser-toolbar chromeclass-location" | ||||
|             data-l10n-id="navbar-accessible" | ||||
| @@ -490,10 +499,12 @@ | ||||
| @@ -489,10 +495,10 @@ | ||||
|                       consumeanchor="PanelUI-button" | ||||
|                       data-l10n-id="appmenu-menu-button-closed2"/> | ||||
|      </toolbaritem> | ||||
| +#include titlebar-items.inc.xhtml | ||||
|      <hbox class="titlebar-spacer" type="post-tabs"/> | ||||
|  #include private-browsing-indicator.inc.xhtml | ||||
| - | ||||
| +#if 0 | ||||
|  #include titlebar-items.inc.xhtml | ||||
| +#endif | ||||
|      <toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/> | ||||
| -#include titlebar-items.inc.xhtml | ||||
|    </toolbar> | ||||
|   | ||||
|    <toolbar id="PersonalToolbar" | ||||
|   | ||||
| @@ -1,19 +1,20 @@ | ||||
| diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs | ||||
| index b888a753a7f23a9800fe04da51a4e6b898314ff2..a6a01cf035253b05ea7b20b434cf2002ff115d96 100644 | ||||
| index b8b6d30f0b3c968a8615ca601e06e50261d0dae6..5c2b718b902aed2ef8d7a4b622ba882ee937c655 100644 | ||||
| --- a/browser/components/BrowserGlue.sys.mjs | ||||
| +++ b/browser/components/BrowserGlue.sys.mjs | ||||
| @@ -121,6 +121,7 @@ ChromeUtils.defineESModuleGetters(lazy, { | ||||
| @@ -106,6 +106,7 @@ ChromeUtils.defineESModuleGetters(lazy, { | ||||
|    WindowsGPOParser: "resource://gre/modules/policies/WindowsGPOParser.sys.mjs", | ||||
|    clearTimeout: "resource://gre/modules/Timer.sys.mjs", | ||||
|    setTimeout: "resource://gre/modules/Timer.sys.mjs", | ||||
| +  gZenUIMigration: "chrome://browser/content/zen-components/ZenUIMigration.mjs", | ||||
|  }); | ||||
|   | ||||
|  if (AppConstants.MOZ_UPDATER) { | ||||
| @@ -1951,6 +1952,7 @@ BrowserGlue.prototype = { | ||||
|   | ||||
|      lazy.UrlbarPrefs.updateFirefoxSuggestScenario(); | ||||
|  XPCOMUtils.defineLazyServiceGetters(lazy, { | ||||
| @@ -1896,7 +1897,7 @@ BrowserGlue.prototype = { | ||||
|      lazy.TabCrashHandler.init(); | ||||
|   | ||||
|      lazy.ProcessHangMonitor.init(); | ||||
| - | ||||
| +    lazy.gZenUIMigration.init(this._isNewProfile, aWindow); | ||||
|      // A channel for "remote troubleshooting" code... | ||||
|      let channel = new lazy.WebChannel( | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs | ||||
| index 8eab0f9181c19c68a0a2daf0f819b3ae82ed92bc..092107b377ec4f7bc9ae86c817cded349732ffc6 100644 | ||||
| index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..6a68b53443d32461927ef98d770b297caaecf790 100644 | ||||
| --- a/browser/components/customizableui/CustomizableUI.sys.mjs | ||||
| +++ b/browser/components/customizableui/CustomizableUI.sys.mjs | ||||
| @@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, { | ||||
| @@ -90,7 +90,27 @@ index 8eab0f9181c19c68a0a2daf0f819b3ae82ed92bc..092107b377ec4f7bc9ae86c817cded34 | ||||
|          } else { | ||||
|            window.gNavToolbox.palette.appendChild(widgetNode); | ||||
|          } | ||||
| @@ -2678,7 +2677,6 @@ var CustomizableUIInternal = { | ||||
| @@ -1704,16 +1703,16 @@ var CustomizableUIInternal = { | ||||
|          elem.setAttribute("skipintoolbarset", "true"); | ||||
|        } | ||||
|      } | ||||
| - | ||||
| +    ZenCustomizableUI.init(window); | ||||
|      // Now register all the toolbars | ||||
|      for (let area of CustomizableUI.areas) { | ||||
|        let type = CustomizableUI.getAreaType(area); | ||||
| -      if (type == CustomizableUI.TYPE_TOOLBAR) { | ||||
| +      if (type == CustomizableUI.TYPE_TOOLBAR && !area.startsWith("zen-")) { | ||||
|          let node = document.getElementById(area); | ||||
|          this.registerToolbarNode(node); | ||||
|        } | ||||
|      } | ||||
| - | ||||
| +    ZenCustomizableUI.registerToolbarNodes(window); | ||||
|      // Handle initial state of vertical tabs. | ||||
|      if (isVerticalTabs) { | ||||
|        // Show the vertical tabs toolbar | ||||
| @@ -2744,7 +2743,6 @@ var CustomizableUIInternal = { | ||||
|      if (!this.isWidgetRemovable(aWidgetId)) { | ||||
|        return; | ||||
|      } | ||||
| @@ -98,7 +118,7 @@ index 8eab0f9181c19c68a0a2daf0f819b3ae82ed92bc..092107b377ec4f7bc9ae86c817cded34 | ||||
|      let placements = gPlacements.get(oldPlacement.area); | ||||
|      let position = placements.indexOf(aWidgetId); | ||||
|      if (position != -1) { | ||||
| @@ -3669,7 +3667,7 @@ var CustomizableUIInternal = { | ||||
| @@ -3735,7 +3733,7 @@ var CustomizableUIInternal = { | ||||
|      } | ||||
|    }, | ||||
|   | ||||
| @@ -107,7 +127,7 @@ index 8eab0f9181c19c68a0a2daf0f819b3ae82ed92bc..092107b377ec4f7bc9ae86c817cded34 | ||||
|      for (let [areaId, areaNodes] of gBuildAreas) { | ||||
|        let placements = gPlacements.get(areaId); | ||||
|        let isFirstChangedToolbar = true; | ||||
| @@ -3680,7 +3678,7 @@ var CustomizableUIInternal = { | ||||
| @@ -3746,7 +3744,7 @@ var CustomizableUIInternal = { | ||||
|          if (area.get("type") == CustomizableUI.TYPE_TOOLBAR) { | ||||
|            let defaultCollapsed = area.get("defaultCollapsed"); | ||||
|            let win = areaNode.ownerGlobal; | ||||
| @@ -116,7 +136,7 @@ index 8eab0f9181c19c68a0a2daf0f819b3ae82ed92bc..092107b377ec4f7bc9ae86c817cded34 | ||||
|              win.setToolbarVisibility( | ||||
|                areaNode, | ||||
|                typeof defaultCollapsed == "string" | ||||
| @@ -4857,6 +4855,7 @@ export var CustomizableUI = { | ||||
| @@ -4923,6 +4921,7 @@ export var CustomizableUI = { | ||||
|    unregisterArea(aName, aDestroyPlacements) { | ||||
|      CustomizableUIInternal.unregisterArea(aName, aDestroyPlacements); | ||||
|    }, | ||||
| @@ -124,7 +144,7 @@ index 8eab0f9181c19c68a0a2daf0f819b3ae82ed92bc..092107b377ec4f7bc9ae86c817cded34 | ||||
|    /** | ||||
|     * Add a widget to an area. | ||||
|     * If the area to which you try to add is not known to CustomizableUI, | ||||
| @@ -6840,11 +6839,11 @@ class OverflowableToolbar { | ||||
| @@ -6916,11 +6915,11 @@ class OverflowableToolbar { | ||||
|          parseFloat(style.paddingLeft) - | ||||
|          parseFloat(style.paddingRight) - | ||||
|          toolbarChildrenWidth; | ||||
| @@ -138,7 +158,7 @@ index 8eab0f9181c19c68a0a2daf0f819b3ae82ed92bc..092107b377ec4f7bc9ae86c817cded34 | ||||
|      }); | ||||
|   | ||||
|      lazy.log.debug( | ||||
| @@ -6854,7 +6853,8 @@ class OverflowableToolbar { | ||||
| @@ -6930,7 +6929,8 @@ class OverflowableToolbar { | ||||
|      // If the target has min-width: 0, their children might actually overflow | ||||
|      // it, so check for both cases explicitly. | ||||
|      let targetContentWidth = Math.max(targetWidth, targetChildrenWidth); | ||||
| @@ -148,7 +168,7 @@ index 8eab0f9181c19c68a0a2daf0f819b3ae82ed92bc..092107b377ec4f7bc9ae86c817cded34 | ||||
|      return { isOverflowing, targetContentWidth, totalAvailWidth }; | ||||
|    } | ||||
|   | ||||
| @@ -6948,7 +6948,7 @@ class OverflowableToolbar { | ||||
| @@ -7024,7 +7024,7 @@ class OverflowableToolbar { | ||||
|          } | ||||
|        } | ||||
|        if (!inserted) { | ||||
| @@ -157,7 +177,7 @@ index 8eab0f9181c19c68a0a2daf0f819b3ae82ed92bc..092107b377ec4f7bc9ae86c817cded34 | ||||
|        } | ||||
|        child.removeAttribute("cui-anchorid"); | ||||
|        child.removeAttribute("overflowedItem"); | ||||
| @@ -7110,6 +7110,9 @@ class OverflowableToolbar { | ||||
| @@ -7186,6 +7186,9 @@ class OverflowableToolbar { | ||||
|     * @param {MouseEvent} aEvent the click event. | ||||
|     */ | ||||
|    #onClickDefaultListButton(aEvent) { | ||||
|   | ||||
| @@ -1,22 +1,13 @@ | ||||
| diff --git a/browser/components/customizableui/ToolbarContextMenu.sys.mjs b/browser/components/customizableui/ToolbarContextMenu.sys.mjs | ||||
| index 9879487f9ed9ddf825f5fb5c1467ddbd7fbe7a32..9e2565fafe0f5f9afa6065c9f4f522fec745db2a 100644 | ||||
| index af22f766a052372a68faca139161cccbf0d768f0..ceff0576321f880c71ce301e537f4d03ccca8a73 100644 | ||||
| --- a/browser/components/customizableui/ToolbarContextMenu.sys.mjs | ||||
| +++ b/browser/components/customizableui/ToolbarContextMenu.sys.mjs | ||||
| @@ -237,17 +237,6 @@ export var ToolbarContextMenu = { | ||||
|      // autohide item's checked state to mirror the autohide pref. | ||||
|      showFullScreenViewContextMenuItems(popup); | ||||
|   | ||||
| -    let toggleVerticalTabsItem = document.getElementById( | ||||
| -      "toolbar-context-toggle-vertical-tabs" | ||||
| -    ); | ||||
| -    document.l10n.setAttributes( | ||||
| -      toggleVerticalTabsItem, | ||||
| -      gBrowser.tabContainer?.verticalMode | ||||
| -        ? "toolbar-context-turn-off-vertical-tabs" | ||||
| -        : "toolbar-context-turn-on-vertical-tabs" | ||||
| -    ); | ||||
| -    document.getElementById("toolbar-context-customize-sidebar").hidden = | ||||
| -      !gBrowser.tabContainer?.verticalMode; | ||||
|   | ||||
|      // View -> Toolbars menu doesn't have the moveToPanel or removeFromToolbar items. | ||||
|      if (!moveToPanel || !removeFromToolbar) { | ||||
| @@ -241,7 +241,7 @@ export var ToolbarContextMenu = { | ||||
|      let sidebarRevampEnabled = Services.prefs.getBoolPref("sidebar.revamp"); | ||||
|      let showSidebarActions = | ||||
|        ["tabbrowser-tabs", "sidebar-button"].includes(toolbarItem?.id) || | ||||
| -      toolbarItem?.localName == "toolbarspring"; | ||||
| +      toolbarItem?.localName == "toolbarspring" && false; | ||||
|      let toggleVerticalTabsItem = document.getElementById( | ||||
|        "toolbar-context-toggle-vertical-tabs" | ||||
|      ); | ||||
|   | ||||
| @@ -1,13 +0,0 @@ | ||||
| diff --git a/browser/components/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx b/browser/components/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx | ||||
| index 57ed935e93198bb50555d119080552934c49e428..21e8fb35501091d448502dbd0c53ee01ce8b7bc0 100644 | ||||
| --- a/browser/components/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx | ||||
| +++ b/browser/components/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx | ||||
| @@ -153,7 +153,7 @@ export class ContentSection extends React.PureComponent { | ||||
|                      data-l10n-args='{"num": 4}' | ||||
|                    /> | ||||
|                  </select> | ||||
| -                {mayHaveSponsoredTopSites && ( | ||||
| +                {false && ( | ||||
|                    <div className="check-wrapper" role="presentation"> | ||||
|                      <input | ||||
|                        id="sponsored-shortcuts" | ||||
| @@ -1,12 +0,0 @@ | ||||
| diff --git a/browser/components/newtab/data/content/abouthomecache/page.html.template b/browser/components/newtab/data/content/abouthomecache/page.html.template | ||||
| index 60898ed6b82ec298198cb9529387f4efd8561cc1..fbd93ccc7ee3619415192164a55f5fcbfd387a51 100644 | ||||
| --- a/browser/components/newtab/data/content/abouthomecache/page.html.template | ||||
| +++ b/browser/components/newtab/data/content/abouthomecache/page.html.template | ||||
| @@ -32,6 +32,7 @@ | ||||
|      <link rel="stylesheet" href="chrome://global/skin/design-system/tokens-brand.css"> | ||||
|      <link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" /> | ||||
|      <link rel="stylesheet" href="chrome://activity-stream/content/css/activity-stream.css" /> | ||||
| +    <script src="chrome://browser/content/zenThemeModifier.js"></script> | ||||
|    </head> | ||||
|    <!-- Cached: {{ CACHE_TIME }} --> | ||||
|    <body class="activity-stream"> | ||||
| @@ -1,13 +0,0 @@ | ||||
| diff --git a/browser/components/newtab/lib/ActivityStream.sys.mjs b/browser/components/newtab/lib/ActivityStream.sys.mjs | ||||
| index f46e8aadf053c1a567642cda5f728534c81c8223..9ba13e5988a1fbcbc0502bba46fe6cfa3c647d85 100644 | ||||
| --- a/browser/components/newtab/lib/ActivityStream.sys.mjs | ||||
| +++ b/browser/components/newtab/lib/ActivityStream.sys.mjs | ||||
| @@ -127,7 +127,7 @@ export const PREFS_CONFIG = new Map([ | ||||
|      "showSponsoredTopSites", | ||||
|      { | ||||
|        title: "Show sponsored top sites", | ||||
| -      value: true, | ||||
| +      value: false, | ||||
|      }, | ||||
|    ], | ||||
|    [ | ||||
| @@ -1,10 +1,10 @@ | ||||
| diff --git a/browser/components/places/jar.mn b/browser/components/places/jar.mn | ||||
| index 7334914664484267ccf80eeeb2917c2001a1acaf..e0636a13798d6fbf41cbf69e51e460822b00ab1a 100644 | ||||
| index e12c6bbf449f062fd22ef260909b539857f52c6a..2dcc143109de015e4c9d486b83119ae1122d2e71 100644 | ||||
| --- a/browser/components/places/jar.mn | ||||
| +++ b/browser/components/places/jar.mn | ||||
| @@ -25,3 +25,5 @@ browser.jar: | ||||
|      content/browser/places/interactionsViewer.css        (metadataViewer/interactionsViewer.css) | ||||
|      content/browser/places/interactionsViewer.html       (metadataViewer/interactionsViewer.html) | ||||
|      content/browser/places/interactionsViewer.js         (metadataViewer/interactionsViewer.js) | ||||
|  #endif | ||||
| +    content/browser/places/zenNewWebPanel.xhtml      (content/zenNewWebPanel.xhtml) | ||||
| +    content/browser/places/zenNewWebPanel.js         (content/zenNewWebPanel.js) | ||||
|   | ||||
| @@ -1,14 +1,14 @@ | ||||
| diff --git a/browser/components/sessionstore/TabGroupState.sys.mjs b/browser/components/sessionstore/TabGroupState.sys.mjs | ||||
| index 2406837c67d8ff590aa0db6c75ede81e53097506..b69fb7862cd76c891ef61e29aca8c10bab2f5d7e 100644 | ||||
| index 934326aefc80479a2ca2ee9e376375f117512b4d..db840ead9ab53849f8f1f33864972347d43f9398 100644 | ||||
| --- a/browser/components/sessionstore/TabGroupState.sys.mjs | ||||
| +++ b/browser/components/sessionstore/TabGroupState.sys.mjs | ||||
| @@ -66,6 +66,9 @@ class _TabGroupState { | ||||
|        name: tabGroup.label, | ||||
|        color: tabGroup.color, | ||||
|        collapsed: tabGroup.collapsed, | ||||
| @@ -62,6 +62,9 @@ class _TabGroupState { | ||||
|     */ | ||||
|    collect(tabGroup) { | ||||
|      return { | ||||
| +      pinned: tabGroup.pinned, | ||||
| +      essential: tabGroup.essential, | ||||
| +      splitView: tabGroup.hasAttribute("split-view-group"), | ||||
|      }; | ||||
|    } | ||||
|   | ||||
|        id: tabGroup.id, | ||||
|        name: tabGroup.label, | ||||
|        color: tabGroup.color, | ||||
|   | ||||
| @@ -1,22 +1,13 @@ | ||||
| diff --git a/browser/components/sidebar/browser-sidebar.js b/browser/components/sidebar/browser-sidebar.js | ||||
| index 1937a01b9940c79782cc2ad002b09ea5938b89e0..a702e8c520fad651a98615215f94657b7e1c58eb 100644 | ||||
| index 371190c058fa1eed91dc91b58608c934100e3a1b..440fe6fb403c3e78b3bfe68fb747d000b4a27521 100644 | ||||
| --- a/browser/components/sidebar/browser-sidebar.js | ||||
| +++ b/browser/components/sidebar/browser-sidebar.js | ||||
| @@ -671,7 +671,7 @@ var SidebarController = { | ||||
|     */ | ||||
|    setPosition() { | ||||
|      // First reset all ordinals to match DOM ordering. | ||||
| @@ -718,7 +718,7 @@ var SidebarController = { | ||||
|          } | ||||
|        }); | ||||
|      } else { | ||||
| -      let browser = document.getElementById("browser"); | ||||
| +      let browser = document.getElementById("tabbrowser-tabbox"); | ||||
|        [...browser.children].forEach((node, i) => { | ||||
|          node.style.order = i + 1; | ||||
|        }); | ||||
| @@ -681,7 +681,7 @@ var SidebarController = { | ||||
|        // DOM ordering is:     sidebar-main |  launcher-splitter | sidebar-box  | splitter | tabbrowser-tabbox | | ||||
|        // Want to display as:  |   tabbrowser-tabbox  | splitter |  sidebar-box  | launcher-splitter | sidebar-main | ||||
|        // So we just swap box and tabbrowser-tabbox ordering and move sidebar-main to the end | ||||
| -      let tabbox = document.getElementById("tabbrowser-tabbox"); | ||||
| +      let tabbox = document.getElementById("tabbrowser-tabpanels"); | ||||
|        let boxOrdinal = this._box.style.order; | ||||
|        this._box.style.order = tabbox.style.order; | ||||
|   | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js | ||||
| index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7409d0582 100644 | ||||
| index 0dc763824f390b4964489ac4e071ed6d41cc41db..3e0be2c686a162038e99b31fdbcf9832f184a629 100644 | ||||
| --- a/browser/components/tabbrowser/content/tabbrowser.js | ||||
| +++ b/browser/components/tabbrowser/content/tabbrowser.js | ||||
| @@ -412,11 +412,50 @@ | ||||
| @@ -424,11 +424,50 @@ | ||||
|        return this.tabContainer.visibleTabs; | ||||
|      } | ||||
|   | ||||
| @@ -55,7 +55,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        } | ||||
|        return i; | ||||
|      } | ||||
| @@ -546,6 +585,7 @@ | ||||
| @@ -558,6 +597,7 @@ | ||||
|        this.tabpanels.appendChild(panel); | ||||
|   | ||||
|        let tab = this.tabs[0]; | ||||
| @@ -63,7 +63,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        tab.linkedPanel = uniqueId; | ||||
|        this._selectedTab = tab; | ||||
|        this._selectedBrowser = browser; | ||||
| @@ -811,12 +851,13 @@ | ||||
| @@ -823,12 +863,13 @@ | ||||
|        } | ||||
|   | ||||
|        this.showTab(aTab); | ||||
| @@ -72,7 +72,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
| +      const handled = gZenFolders.handleTabPin(aTab); | ||||
| +      if (!handled) this.ungroupTab(aTab); | ||||
| +      if (this.tabContainer.verticalMode && !handled) { | ||||
|          this._handleTabMove(aTab, () => | ||||
|          this.#handleTabMove(aTab, () => | ||||
| -          this.verticalPinnedTabsContainer.appendChild(aTab) | ||||
| +          aTab.hasAttribute("zen-essential") ? document.getElementById("zen-essentials-container").appendChild(aTab) : this.verticalPinnedTabsContainer.insertBefore(aTab, this.verticalPinnedTabsContainer.lastChild) | ||||
|          ); | ||||
| @@ -81,12 +81,12 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          this.moveTabTo(aTab, this.pinnedTabCount, { forceStandaloneTab: true }); | ||||
|        } | ||||
|        aTab.setAttribute("pinned", "true"); | ||||
| @@ -830,12 +871,15 @@ | ||||
| @@ -842,12 +883,15 @@ | ||||
|        } | ||||
|   | ||||
|        if (this.tabContainer.verticalMode) { | ||||
| +        const handled = gZenFolders.handleTabUnpin(aTab); | ||||
|          this._handleTabMove(aTab, () => { | ||||
|          this.#handleTabMove(aTab, () => { | ||||
|            // we remove this attribute first, so that allTabs represents | ||||
|            // the moving of a tab from the vertical pinned tabs container | ||||
|            // and back into arrowscrollbox. | ||||
| @@ -98,7 +98,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          }); | ||||
|        } else { | ||||
|          this.moveTabTo(aTab, this.pinnedTabCount - 1, { | ||||
| @@ -1018,6 +1062,8 @@ | ||||
| @@ -1030,6 +1074,8 @@ | ||||
|   | ||||
|        let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"]; | ||||
|   | ||||
| @@ -107,7 +107,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        if ( | ||||
|          aIconURL && | ||||
|          !aLoadingPrincipal && | ||||
| @@ -1028,6 +1074,9 @@ | ||||
| @@ -1040,6 +1086,9 @@ | ||||
|          ); | ||||
|          return; | ||||
|        } | ||||
| @@ -117,7 +117,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|   | ||||
|        let browser = this.getBrowserForTab(aTab); | ||||
|        browser.mIconURL = aIconURL; | ||||
| @@ -1273,6 +1322,7 @@ | ||||
| @@ -1288,6 +1337,7 @@ | ||||
|        if (!this._previewMode) { | ||||
|          newTab.recordTimeFromUnloadToReload(); | ||||
|          newTab.updateLastAccessed(); | ||||
| @@ -125,7 +125,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          oldTab.updateLastAccessed(); | ||||
|          // if this is the foreground window, update the last-seen timestamps. | ||||
|          if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) { | ||||
| @@ -1425,6 +1475,9 @@ | ||||
| @@ -1440,6 +1490,9 @@ | ||||
|        } | ||||
|   | ||||
|        let activeEl = document.activeElement; | ||||
| @@ -135,7 +135,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        // If focus is on the old tab, move it to the new tab. | ||||
|        if (activeEl == oldTab) { | ||||
|          newTab.focus(); | ||||
| @@ -1748,7 +1801,7 @@ | ||||
| @@ -1763,7 +1816,7 @@ | ||||
|      } | ||||
|   | ||||
|      _setTabLabel(aTab, aLabel, { beforeTabOpen, isContentTitle, isURL } = {}) { | ||||
| @@ -144,7 +144,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          return false; | ||||
|        } | ||||
|   | ||||
| @@ -1851,7 +1904,7 @@ | ||||
| @@ -1866,7 +1919,7 @@ | ||||
|          newIndex = this.selectedTab._tPos + 1; | ||||
|        } | ||||
|   | ||||
| @@ -153,7 +153,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          let browser; | ||||
|          if (targetTab) { | ||||
|            browser = this.getBrowserForTab(targetTab); | ||||
| @@ -2108,6 +2161,7 @@ | ||||
| @@ -2123,6 +2176,7 @@ | ||||
|        uriIsAboutBlank, | ||||
|        userContextId, | ||||
|        skipLoad, | ||||
| @@ -161,7 +161,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|      } = {}) { | ||||
|        let b = document.createXULElement("browser"); | ||||
|        // Use the JSM global to create the permanentKey, so that if the | ||||
| @@ -2181,8 +2235,7 @@ | ||||
| @@ -2196,8 +2250,7 @@ | ||||
|          // we use a different attribute name for this? | ||||
|          b.setAttribute("name", name); | ||||
|        } | ||||
| @@ -171,7 +171,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          b.setAttribute("transparent", "true"); | ||||
|        } | ||||
|   | ||||
| @@ -2347,7 +2400,7 @@ | ||||
| @@ -2374,7 +2427,7 @@ | ||||
|   | ||||
|        let panel = this.getPanel(browser); | ||||
|        let uniqueId = this._generateUniquePanelID(); | ||||
| @@ -180,7 +180,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        aTab.linkedPanel = uniqueId; | ||||
|   | ||||
|        // Inject the <browser> into the DOM if necessary. | ||||
| @@ -2406,8 +2459,8 @@ | ||||
| @@ -2433,8 +2486,8 @@ | ||||
|        // If we transitioned from one browser to two browsers, we need to set | ||||
|        // hasSiblings=false on both the existing browser and the new browser. | ||||
|        if (this.tabs.length == 2) { | ||||
| @@ -191,7 +191,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        } else { | ||||
|          aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1; | ||||
|        } | ||||
| @@ -2629,6 +2682,7 @@ | ||||
| @@ -2656,6 +2709,7 @@ | ||||
|          schemelessInput, | ||||
|          hasValidUserGestureActivation = false, | ||||
|          textDirectiveUserActivation = false, | ||||
| @@ -199,7 +199,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        } = {} | ||||
|      ) { | ||||
|        // all callers of addTab that pass a params object need to pass | ||||
| @@ -2639,6 +2693,12 @@ | ||||
| @@ -2666,6 +2720,12 @@ | ||||
|          ); | ||||
|        } | ||||
|   | ||||
| @@ -212,7 +212,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        if (!UserInteraction.running("browser.tabs.opening", window)) { | ||||
|          UserInteraction.start("browser.tabs.opening", "initting", window); | ||||
|        } | ||||
| @@ -2702,6 +2762,15 @@ | ||||
| @@ -2729,6 +2789,15 @@ | ||||
|            noInitialLabel, | ||||
|            skipBackgroundNotify, | ||||
|          }); | ||||
| @@ -228,7 +228,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          if (insertTab) { | ||||
|            // insert the tab into the tab container in the correct position | ||||
|            this._insertTabAtIndex(t, { | ||||
| @@ -2726,6 +2795,7 @@ | ||||
| @@ -2753,6 +2822,7 @@ | ||||
|            initialBrowsingContextGroupId, | ||||
|            openWindowInfo, | ||||
|            skipLoad, | ||||
| @@ -236,7 +236,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          })); | ||||
|   | ||||
|          if (focusUrlBar) { | ||||
| @@ -2845,6 +2915,9 @@ | ||||
| @@ -2872,6 +2942,9 @@ | ||||
|          } | ||||
|        } | ||||
|   | ||||
| @@ -246,7 +246,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        // Additionally send pinned tab events | ||||
|        if (pinned) { | ||||
|          this._notifyPinnedStatus(t); | ||||
| @@ -2865,12 +2938,15 @@ | ||||
| @@ -2892,12 +2965,15 @@ | ||||
|       * @param {string} [label=] | ||||
|       * @returns {MozTabbrowserTabGroup} | ||||
|       */ | ||||
| @@ -263,15 +263,15 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        return group; | ||||
|      } | ||||
|   | ||||
| @@ -2904,6 +2980,7 @@ | ||||
|          label = "", | ||||
| @@ -2938,6 +3014,7 @@ | ||||
|          insertBefore = null, | ||||
|          showCreateUI = false, | ||||
|          isUserCreated = false, | ||||
|          telemetryUserCreateSource = "unknown", | ||||
| +        forSplitView = false, | ||||
|        } = {} | ||||
|      ) { | ||||
|        if (!tabs?.length) { | ||||
| @@ -2918,7 +2995,12 @@ | ||||
| @@ -2952,7 +3029,12 @@ | ||||
|          id = `${Date.now()}-${Math.round(Math.random() * 100)}`; | ||||
|        } | ||||
|        let group = this._createTabGroup(id, color, false, label); | ||||
| @@ -285,7 +285,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          group, | ||||
|          insertBefore?.group ?? insertBefore | ||||
|        ); | ||||
| @@ -3126,6 +3208,7 @@ | ||||
| @@ -3269,6 +3351,7 @@ | ||||
|          initialBrowsingContextGroupId, | ||||
|          openWindowInfo, | ||||
|          skipLoad, | ||||
| @@ -293,7 +293,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        } | ||||
|      ) { | ||||
|        // If we don't have a preferred remote type, and we have a remote | ||||
| @@ -3189,6 +3272,7 @@ | ||||
| @@ -3332,6 +3415,7 @@ | ||||
|            openWindowInfo, | ||||
|            name, | ||||
|            skipLoad, | ||||
| @@ -301,7 +301,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          }); | ||||
|        } | ||||
|   | ||||
| @@ -3367,6 +3451,27 @@ | ||||
| @@ -3510,6 +3594,27 @@ | ||||
|          ) { | ||||
|            tabWasReused = true; | ||||
|            tab = this.selectedTab; | ||||
| @@ -329,7 +329,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|            if (!tabData.pinned) { | ||||
|              this.unpinTab(tab); | ||||
|            } else { | ||||
| @@ -3380,6 +3485,7 @@ | ||||
| @@ -3523,6 +3628,7 @@ | ||||
|              restoreTabsLazily && !select && !tabData.pinned; | ||||
|   | ||||
|            let url = "about:blank"; | ||||
| @@ -337,7 +337,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|            if (tabData.entries?.length) { | ||||
|              let activeIndex = (tabData.index || tabData.entries.length) - 1; | ||||
|              // Ensure the index is in bounds. | ||||
| @@ -3415,7 +3521,27 @@ | ||||
| @@ -3558,7 +3664,27 @@ | ||||
|              skipLoad: true, | ||||
|              preferredRemoteType, | ||||
|            }); | ||||
| @@ -366,7 +366,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|            if (select) { | ||||
|              tabToSelect = tab; | ||||
|            } | ||||
| @@ -3428,8 +3554,8 @@ | ||||
| @@ -3571,8 +3697,8 @@ | ||||
|            // inserted in the DOM. If the tab is not yet in the DOM, | ||||
|            // just insert it in the right place from the start. | ||||
|            if (!tab.parentNode) { | ||||
| @@ -377,7 +377,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|              tab.toggleAttribute("pinned", true); | ||||
|              this.tabContainer._invalidateCachedTabs(); | ||||
|              // Then ensure all the tab open/pinning information is sent. | ||||
| @@ -3439,7 +3565,8 @@ | ||||
| @@ -3582,7 +3708,8 @@ | ||||
|              // needs calling: | ||||
|              shouldUpdateForPinnedTabs = true; | ||||
|            } | ||||
| @@ -387,7 +387,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|            let { groupId } = tabData; | ||||
|            const tabGroup = tabGroupWorkingData.get(groupId); | ||||
|            // if a tab refers to a tab group we don't know, skip any group | ||||
| @@ -3453,7 +3580,10 @@ | ||||
| @@ -3596,7 +3723,10 @@ | ||||
|                  tabGroup.stateData.id, | ||||
|                  tabGroup.stateData.color, | ||||
|                  tabGroup.stateData.collapsed, | ||||
| @@ -399,7 +399,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|                ); | ||||
|                tabsFragment.appendChild(tabGroup.node); | ||||
|              } | ||||
| @@ -3504,6 +3634,9 @@ | ||||
| @@ -3647,6 +3777,9 @@ | ||||
|          this.selectedTab = tabToSelect; | ||||
|          this.removeTab(leftoverTab); | ||||
|        } | ||||
| @@ -409,7 +409,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|   | ||||
|        if (tabs.length > 1 || !tabs[0].selected) { | ||||
|          this._updateTabsAfterInsert(); | ||||
| @@ -3693,7 +3826,7 @@ | ||||
| @@ -3831,7 +3964,7 @@ | ||||
|        // Ensure we have an index if one was not provided. | ||||
|        if (typeof index != "number") { | ||||
|          // Move the new tab after another tab if needed, to the end otherwise. | ||||
| @@ -418,7 +418,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          if ( | ||||
|            !bulkOrderedOpen && | ||||
|            ((openerTab && | ||||
| @@ -3736,18 +3869,18 @@ | ||||
| @@ -3877,18 +4010,18 @@ | ||||
|   | ||||
|        // Ensure index is within bounds. | ||||
|        if (tab.pinned) { | ||||
| @@ -441,7 +441,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          if (tabAfter && tabAfter.group == tabGroup) { | ||||
|            // Place at the front of, or between tabs in, the same tab group | ||||
|            this.tabContainer.insertBefore(tab, tabAfter); | ||||
| @@ -4059,6 +4192,9 @@ | ||||
| @@ -4200,6 +4333,9 @@ | ||||
|          return; | ||||
|        } | ||||
|   | ||||
| @@ -451,7 +451,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        this.removeTabs(selectedTabs); | ||||
|      } | ||||
|   | ||||
| @@ -4391,6 +4527,7 @@ | ||||
| @@ -4557,6 +4693,7 @@ | ||||
|          skipSessionStore, | ||||
|        } = {} | ||||
|      ) { | ||||
| @@ -459,7 +459,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        if (UserInteraction.running("browser.tabs.opening", window)) { | ||||
|          UserInteraction.finish("browser.tabs.opening", window); | ||||
|        } | ||||
| @@ -4407,6 +4544,12 @@ | ||||
| @@ -4573,6 +4710,12 @@ | ||||
|          TelemetryStopwatch.start("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab); | ||||
|        } | ||||
|   | ||||
| @@ -472,7 +472,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        // Handle requests for synchronously removing an already | ||||
|        // asynchronously closing tab. | ||||
|        if (!animate && aTab.closing) { | ||||
| @@ -4421,7 +4564,9 @@ | ||||
| @@ -4587,7 +4730,9 @@ | ||||
|        // frame created for it (for example, by updating the visually selected | ||||
|        // state). | ||||
|        let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width; | ||||
| @@ -483,7 +483,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        if ( | ||||
|          !this._beginRemoveTab(aTab, { | ||||
|            closeWindowFastpath: true, | ||||
| @@ -4435,7 +4580,6 @@ | ||||
| @@ -4601,7 +4746,6 @@ | ||||
|          TelemetryStopwatch.cancel("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab); | ||||
|          return; | ||||
|        } | ||||
| @@ -491,7 +491,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        let lockTabSizing = | ||||
|          !this.tabContainer.verticalMode && | ||||
|          !aTab.pinned && | ||||
| @@ -4574,14 +4718,14 @@ | ||||
| @@ -4740,14 +4884,14 @@ | ||||
|          !!this.tabsInCollapsedTabGroups.length; | ||||
|        if ( | ||||
|          aTab.visible && | ||||
| @@ -508,7 +508,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|   | ||||
|          if (closeWindow) { | ||||
|            // We've already called beforeunload on all the relevant tabs if we get here, | ||||
| @@ -4605,6 +4749,7 @@ | ||||
| @@ -4771,6 +4915,7 @@ | ||||
|   | ||||
|          newTab = true; | ||||
|        } | ||||
| @@ -516,7 +516,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        aTab._endRemoveArgs = [closeWindow, newTab]; | ||||
|   | ||||
|        // swapBrowsersAndCloseOther will take care of closing the window without animation. | ||||
| @@ -4645,9 +4790,7 @@ | ||||
| @@ -4811,9 +4956,7 @@ | ||||
|        aTab._mouseleave(); | ||||
|   | ||||
|        if (newTab) { | ||||
| @@ -527,7 +527,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        } else { | ||||
|          TabBarVisibility.update(); | ||||
|        } | ||||
| @@ -4776,6 +4919,8 @@ | ||||
| @@ -4942,6 +5085,8 @@ | ||||
|          this.tabs[i]._tPos = i; | ||||
|        } | ||||
|   | ||||
| @@ -536,7 +536,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        if (!this._windowIsClosing) { | ||||
|          if (wasPinned) { | ||||
|            this.tabContainer._positionPinnedTabs(); | ||||
| @@ -4994,7 +5139,7 @@ | ||||
| @@ -5160,7 +5305,7 @@ | ||||
|          !excludeTabs.has(aTab.owner) && | ||||
|          Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose") | ||||
|        ) { | ||||
| @@ -545,7 +545,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        } | ||||
|   | ||||
|        // Try to find a remaining tab that comes after the given tab | ||||
| @@ -5016,7 +5161,7 @@ | ||||
| @@ -5182,7 +5327,7 @@ | ||||
|        } | ||||
|   | ||||
|        if (tab) { | ||||
| @@ -554,7 +554,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        } | ||||
|   | ||||
|        // If no qualifying visible tab was found, see if there is a tab in | ||||
| @@ -5434,10 +5579,10 @@ | ||||
| @@ -5600,10 +5745,10 @@ | ||||
|        SessionStore.deleteCustomTabValue(aTab, "hiddenBy"); | ||||
|      } | ||||
|   | ||||
| @@ -567,8 +567,8 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          aTab.selected || | ||||
|          aTab.closing || | ||||
|          // Tabs that are sharing the screen, microphone or camera cannot be hidden. | ||||
| @@ -5675,7 +5820,7 @@ | ||||
|   | ||||
| @@ -5839,7 +5984,7 @@ | ||||
|      moveTabTo(aTab, aIndex, { forceStandaloneTab = false } = {}) { | ||||
|        // Don't allow mixing pinned and unpinned tabs. | ||||
|        if (aTab.pinned) { | ||||
| -        aIndex = Math.min(aIndex, this.pinnedTabCount - 1); | ||||
| @@ -576,16 +576,16 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        } else { | ||||
|          aIndex = Math.max(aIndex, this.pinnedTabCount); | ||||
|        } | ||||
| @@ -5685,10 +5830,17 @@ | ||||
| @@ -5849,10 +5994,17 @@ | ||||
|   | ||||
|        this._handleTabMove(aTab, () => { | ||||
|        this.#handleTabMove(aTab, () => { | ||||
|          let neighbor = this.tabs[aIndex]; | ||||
| -        if (forceStandaloneTab && neighbor.group) { | ||||
| +        const _tPos = aTab._tPos; | ||||
| +        if ((forceStandaloneTab && neighbor.group) || neighbor.group?.hasAttribute("split-view-group")) { | ||||
|            neighbor = neighbor.group; | ||||
|          } | ||||
| -        if (neighbor && aIndex >= aTab._tPos) { | ||||
| -        if (neighbor && aIndex > aTab._tPos) { | ||||
| +        if (aTab.group?.hasAttribute("split-view-group")) { | ||||
| +          aTab = aTab.group; | ||||
| +        } | ||||
| @@ -596,7 +596,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|            neighbor.after(aTab); | ||||
|          } else { | ||||
|            this.tabContainer.insertBefore(aTab, neighbor); | ||||
| @@ -5697,7 +5849,7 @@ | ||||
| @@ -5938,7 +6090,7 @@ | ||||
|      } | ||||
|   | ||||
|      moveTabToGroup(aTab, aGroup) { | ||||
| @@ -605,7 +605,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|          return; | ||||
|        } | ||||
|        if (aTab.group && aTab.group.id === aGroup.id) { | ||||
| @@ -5721,6 +5873,10 @@ | ||||
| @@ -5962,6 +6114,10 @@ | ||||
|   | ||||
|        moveActionCallback(); | ||||
|   | ||||
| @@ -616,7 +616,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        // Clear tabs cache after moving nodes because the order of tabs may have | ||||
|        // changed. | ||||
|        this.tabContainer._invalidateCachedTabs(); | ||||
| @@ -5771,7 +5927,7 @@ | ||||
| @@ -6016,7 +6172,7 @@ | ||||
|          createLazyBrowser, | ||||
|        }; | ||||
|   | ||||
| @@ -625,7 +625,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|        if (aIndex < numPinned || (aTab.pinned && aIndex == numPinned)) { | ||||
|          params.pinned = true; | ||||
|        } | ||||
| @@ -6513,7 +6669,7 @@ | ||||
| @@ -6766,7 +6922,7 @@ | ||||
|              // preventDefault(). It will still raise the window if appropriate. | ||||
|              break; | ||||
|            } | ||||
| @@ -634,7 +634,7 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|            window.focus(); | ||||
|            aEvent.preventDefault(); | ||||
|            break; | ||||
| @@ -7415,6 +7571,7 @@ | ||||
| @@ -7672,6 +7828,7 @@ | ||||
|              aWebProgress.isTopLevel | ||||
|            ) { | ||||
|              this.mTab.setAttribute("busy", "true"); | ||||
| @@ -642,25 +642,25 @@ index 628aa6596627c85efe361fc1ece8fd58f7ee653e..2a9ac30c7e270586ff4502046e5b1ae7 | ||||
|              gBrowser._tabAttrModified(this.mTab, ["busy"]); | ||||
|              this.mTab._notselectedsinceload = !this.mTab.selected; | ||||
|            } | ||||
| @@ -8381,7 +8538,7 @@ var TabContextMenu = { | ||||
| @@ -8641,7 +8798,7 @@ var TabContextMenu = { | ||||
|      ); | ||||
|      contextUnpinSelectedTabs.hidden = | ||||
|        !this.contextTab.pinned || !multiselectionContext; | ||||
|        !this.contextTab.pinned || !this.multiselected; | ||||
| - | ||||
| +    gZenPinnedTabManager.updatePinnedTabContextMenu(this.contextTab); | ||||
|      // Move Tab items | ||||
|      let contextMoveTabOptions = document.getElementById( | ||||
|        "context_moveTabOptions" | ||||
| @@ -8414,7 +8571,7 @@ var TabContextMenu = { | ||||
|      let contextMoveTabToStart = document.getElementById("context_moveToStart"); | ||||
| @@ -8675,7 +8832,7 @@ var TabContextMenu = { | ||||
|      let isFirstTab = | ||||
|        tabsToMove[0] == visibleTabs[0] || | ||||
| -      tabsToMove[0] == visibleTabs[gBrowser.pinnedTabCount]; | ||||
| +      tabsToMove[0] == visibleTabs[gBrowser._numVisiblePinTabs]; | ||||
|        !this.contextTabs[0].group && | ||||
|        (this.contextTabs[0] == visibleTabs[0] || | ||||
| -        this.contextTabs[0] == visibleTabs[gBrowser.pinnedTabCount]); | ||||
| +      this.contextTabs[0] == visibleTabs[gBrowser._numVisiblePinTabs]; | ||||
|      contextMoveTabToStart.disabled = isFirstTab && allSelectedTabsAdjacent; | ||||
|   | ||||
|      document.getElementById("context_openTabInWindow").disabled = | ||||
| @@ -8647,6 +8804,7 @@ var TabContextMenu = { | ||||
| @@ -8905,6 +9062,7 @@ var TabContextMenu = { | ||||
|      if (this.contextTab.multiselected) { | ||||
|        gBrowser.removeMultiSelectedTabs(); | ||||
|      } else { | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js | ||||
| index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d734668f2a 100644 | ||||
| index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..0175072d29597633c04724b1824e2187bcdda61d 100644 | ||||
| --- a/browser/components/tabbrowser/content/tabs.js | ||||
| +++ b/browser/components/tabbrowser/content/tabs.js | ||||
| @@ -94,7 +94,7 @@ | ||||
| @@ -93,7 +93,7 @@ | ||||
|        }; | ||||
|        this.arrowScrollbox._canScrollToElement = element => { | ||||
|          if (isTab(element)) { | ||||
| @@ -11,7 +11,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|          } | ||||
|          return true; | ||||
|        }; | ||||
| @@ -339,7 +339,7 @@ | ||||
| @@ -347,7 +347,7 @@ | ||||
|        // and we're not hitting the scroll buttons. | ||||
|        if ( | ||||
|          event.button != 0 || | ||||
| @@ -20,7 +20,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|          event.composedTarget.localName == "toolbarbutton" | ||||
|        ) { | ||||
|          return; | ||||
| @@ -388,6 +388,7 @@ | ||||
| @@ -396,6 +396,7 @@ | ||||
|              // Reset the "ignored click" flag | ||||
|              target._ignoredCloseButtonClicks = false; | ||||
|            } | ||||
| @@ -28,7 +28,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|          } | ||||
|   | ||||
|          /* Protects from close-tab-button errant doubleclick: | ||||
| @@ -683,7 +684,7 @@ | ||||
| @@ -693,7 +694,7 @@ | ||||
|        if (this.#isContainerVerticalPinnedExpanded(tab)) { | ||||
|          // In expanded vertical mode, the max number of pinned tabs per row is dynamic | ||||
|          // Set this before adjusting dragged tab's position | ||||
| @@ -37,7 +37,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|          let tabsPerRow = 0; | ||||
|          let position = 0; | ||||
|          for (let pinnedTab of pinnedTabs) { | ||||
| @@ -883,6 +884,10 @@ | ||||
| @@ -899,6 +900,10 @@ | ||||
|        } | ||||
|   | ||||
|        let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0); | ||||
| @@ -48,7 +48,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|        if ( | ||||
|          (effects == "move" || effects == "copy") && | ||||
|          this == draggedTab.container && | ||||
| @@ -996,6 +1001,18 @@ | ||||
| @@ -1012,6 +1017,18 @@ | ||||
|   | ||||
|        this._tabDropIndicator.hidden = true; | ||||
|        event.stopPropagation(); | ||||
| @@ -67,41 +67,32 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|        if (draggedTab && dropEffect == "copy") { | ||||
|          // copy the dropped tab (wherever it's from) | ||||
|          let newIndex = this._getDropIndex(event); | ||||
| @@ -1034,10 +1051,11 @@ | ||||
| @@ -1050,10 +1067,11 @@ | ||||
|            } | ||||
|          } else { | ||||
|            let pinned = draggedTab.pinned; | ||||
|            let isPinned = draggedTab.pinned; | ||||
| -          let numPinned = gBrowser.pinnedTabCount; | ||||
| -          let tabs = this.visibleTabs.slice( | ||||
| -            pinned ? 0 : numPinned, | ||||
| -            pinned ? numPinned : undefined | ||||
| -          let tabs = this.ariaFocusableItems.slice( | ||||
| -            isPinned ? 0 : numPinned, | ||||
| -            isPinned ? numPinned : undefined | ||||
| +          let numPinned = gBrowser._numVisiblePinTabs; | ||||
| +          let essential = draggedTab.hasAttribute("zen-essential"); | ||||
| +          let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice( | ||||
| +            pinned ? (essential ? 0 : gBrowser._numZenVisibleEssentials) : numPinned, | ||||
| +            pinned ? (essential ? gBrowser._numZenVisibleEssentials : numPinned) : undefined | ||||
| +          let tabs = this.ariaFocusableItems.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice( | ||||
| +            isPinned ? (essential ? 0 : gBrowser._numZenVisibleEssentials) : numPinned, | ||||
| +            isPinned ? (essential ? gBrowser._numZenVisibleEssentials : numPinned) : undefined | ||||
|            ); | ||||
|            let size = this.verticalMode ? "height" : "width"; | ||||
|            let screenAxis = this.verticalMode ? "screenY" : "screenX"; | ||||
| @@ -1114,7 +1132,7 @@ | ||||
|                let postTransitionCleanup = () => { | ||||
| @@ -1129,7 +1147,7 @@ | ||||
|                  tab.removeAttribute("tabdrop-samewindow"); | ||||
|   | ||||
| -                this._finishAnimateTabMove(); | ||||
| +              this._finishAnimateTabMove(true); | ||||
|                  if (dropIndex !== false) { | ||||
|                    gBrowser.moveTabTo(tab, dropIndex); | ||||
|                    if (!directionForward) { | ||||
| @@ -1122,7 +1140,7 @@ | ||||
|                    } | ||||
|                  } | ||||
|                  resolve(); | ||||
|                }; | ||||
| -              if (gReduceMotion) { | ||||
| +              if (true || gReduceMotion) { | ||||
|                  postTransitionCleanup(); | ||||
|                } else { | ||||
|                  let onTransitionEnd = transitionendEvent => { | ||||
| @@ -1249,7 +1267,7 @@ | ||||
| @@ -1246,7 +1264,7 @@ | ||||
|                return; | ||||
|              } | ||||
|            } | ||||
| @@ -110,7 +101,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|            gBrowser.loadTabs(urls, { | ||||
|              inBackground, | ||||
|              replace, | ||||
| @@ -1279,13 +1297,23 @@ | ||||
| @@ -1276,13 +1294,23 @@ | ||||
|          return; | ||||
|        } | ||||
|   | ||||
| @@ -136,7 +127,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|        ) { | ||||
|          delete draggedTab._dragData; | ||||
|          return; | ||||
| @@ -1517,7 +1545,7 @@ | ||||
| @@ -1504,7 +1532,7 @@ | ||||
|      } | ||||
|   | ||||
|      get newTabButton() { | ||||
| @@ -145,7 +136,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|      } | ||||
|   | ||||
|      get verticalMode() { | ||||
| @@ -1537,29 +1565,41 @@ | ||||
| @@ -1524,29 +1552,41 @@ | ||||
|        if (this.#allTabs) { | ||||
|          return this.#allTabs; | ||||
|        } | ||||
| @@ -195,7 +186,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|      } | ||||
|   | ||||
|      /** | ||||
| @@ -1579,7 +1619,7 @@ | ||||
| @@ -1566,7 +1606,7 @@ | ||||
|       */ | ||||
|      get visibleTabs() { | ||||
|        if (!this.#visibleTabs) { | ||||
| @@ -204,20 +195,23 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|        } | ||||
|        return this.#visibleTabs; | ||||
|      } | ||||
| @@ -1613,10 +1653,8 @@ | ||||
|          return this.#focusableItems; | ||||
| @@ -1601,13 +1641,11 @@ | ||||
|        } | ||||
|   | ||||
|        let elementIndex = 0; | ||||
| -      let verticalPinnedTabsContainer = document.getElementById( | ||||
| -        "vertical-pinned-tabs-container" | ||||
| -      ); | ||||
| +      let verticalPinnedTabsContainer = this.verticalPinnedTabsContainer | ||||
|        for (let i = 0; i < verticalPinnedTabsContainer.childElementCount; i++) { | ||||
|          verticalPinnedTabsContainer.children[i].elementIndex = elementIndex++; | ||||
|        } | ||||
| -      let children = Array.from(this.arrowScrollbox.children); | ||||
| +      let verticalPinnedTabsContainer = this.verticalPinnedTabsContainer; | ||||
| +      let children = ZenWorkspaces.tabboxChildrenWithoutEmpty; | ||||
|   | ||||
|        let focusableItems = []; | ||||
|        for (let child of children) { | ||||
| @@ -1632,6 +1670,7 @@ | ||||
| @@ -1628,6 +1666,7 @@ | ||||
|        } | ||||
|   | ||||
|        this.#focusableItems = [ | ||||
| @@ -225,7 +219,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|          ...verticalPinnedTabsContainer.children, | ||||
|          ...focusableItems, | ||||
|        ]; | ||||
| @@ -1642,6 +1681,7 @@ | ||||
| @@ -1638,6 +1677,7 @@ | ||||
|      _invalidateCachedTabs() { | ||||
|        this.#allTabs = null; | ||||
|        this._invalidateCachedVisibleTabs(); | ||||
| @@ -233,7 +227,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|      } | ||||
|   | ||||
|      _invalidateCachedVisibleTabs() { | ||||
| @@ -1656,8 +1696,8 @@ | ||||
| @@ -1652,8 +1692,8 @@ | ||||
|      #isContainerVerticalPinnedExpanded(tab) { | ||||
|        return ( | ||||
|          this.verticalMode && | ||||
| @@ -244,7 +238,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|        ); | ||||
|      } | ||||
|   | ||||
| @@ -1672,7 +1712,7 @@ | ||||
| @@ -1668,7 +1708,7 @@ | ||||
|   | ||||
|        if (node == null) { | ||||
|          // We have a container for non-tab elements at the end of the scrollbox. | ||||
| @@ -253,7 +247,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|        } | ||||
|   | ||||
|        node.before(tab); | ||||
| @@ -1772,7 +1812,7 @@ | ||||
| @@ -1763,7 +1803,7 @@ | ||||
|            // There are separate "new tab" buttons for horizontal tabs toolbar, vertical tabs and | ||||
|            // for when the tab strip is overflowed (which is shared by vertical and horizontal tabs); | ||||
|            // Attach the long click popup to all of them. | ||||
| @@ -262,7 +256,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|            const newTab2 = this.newTabButton; | ||||
|            const newTabVertical = document.getElementById( | ||||
|              "vertical-tabs-newtab-button" | ||||
| @@ -1855,7 +1895,7 @@ | ||||
| @@ -1846,7 +1886,7 @@ | ||||
|            let rect = ele => { | ||||
|              return window.windowUtils.getBoundsWithoutFlushing(ele); | ||||
|            }; | ||||
| @@ -271,7 +265,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|            if (tab && rect(tab).width <= this._tabClipWidth) { | ||||
|              this.setAttribute("closebuttons", "activetab"); | ||||
|            } else { | ||||
| @@ -1867,10 +1907,12 @@ | ||||
| @@ -1858,10 +1898,12 @@ | ||||
|   | ||||
|      _handleTabSelect(aInstant) { | ||||
|        let selectedTab = this.selectedItem; | ||||
| @@ -284,7 +278,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|        selectedTab._notselectedsinceload = false; | ||||
|      } | ||||
|   | ||||
| @@ -1882,7 +1924,7 @@ | ||||
| @@ -1873,7 +1915,7 @@ | ||||
|          return; | ||||
|        } | ||||
|   | ||||
| @@ -293,7 +287,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|        if (!tabs.length) { | ||||
|          return; | ||||
|        } | ||||
| @@ -1918,7 +1960,7 @@ | ||||
| @@ -1909,7 +1951,7 @@ | ||||
|          if (isEndTab && !this._hasTabTempMaxWidth) { | ||||
|            return; | ||||
|          } | ||||
| @@ -302,7 +296,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|          // Force tabs to stay the same width, unless we're closing the last tab, | ||||
|          // which case we need to let them expand just enough so that the overall | ||||
|          // tabbar width is the same. | ||||
| @@ -1933,7 +1975,7 @@ | ||||
| @@ -1924,7 +1966,7 @@ | ||||
|          let tabsToReset = []; | ||||
|          for (let i = numPinned; i < tabs.length; i++) { | ||||
|            let tab = tabs[i]; | ||||
| @@ -311,7 +305,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|            if (!isEndTab) { | ||||
|              // keep tabs the same width | ||||
|              tab.style.transition = "none"; | ||||
| @@ -1999,16 +2041,15 @@ | ||||
| @@ -1990,16 +2032,15 @@ | ||||
|        // Move pinned tabs to another container when the tabstrip is toggled to vertical | ||||
|        // and when session restore code calls _positionPinnedTabs; update styling whenever | ||||
|        // the number of pinned tabs changes. | ||||
| @@ -334,7 +328,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|          } | ||||
|        } | ||||
|   | ||||
| @@ -2016,9 +2057,7 @@ | ||||
| @@ -2007,9 +2048,7 @@ | ||||
|      } | ||||
|   | ||||
|      _resetVerticalPinnedTabs() { | ||||
| @@ -345,7 +339,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|   | ||||
|        if (!verticalTabsContainer.children.length) { | ||||
|          return; | ||||
| @@ -2031,8 +2070,8 @@ | ||||
| @@ -2022,8 +2061,8 @@ | ||||
|      } | ||||
|   | ||||
|      _positionPinnedTabs() { | ||||
| @@ -356,7 +350,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|        let absPositionHorizontalTabs = | ||||
|          this.overflowing && tabs.length > numPinned && numPinned > 0; | ||||
|   | ||||
| @@ -2041,7 +2080,7 @@ | ||||
| @@ -2032,7 +2071,7 @@ | ||||
|   | ||||
|        if (this.verticalMode) { | ||||
|          this._updateVerticalPinnedTabs(); | ||||
| @@ -365,7 +359,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|          let layoutData = this._pinnedTabsLayoutCache; | ||||
|          let uiDensity = document.documentElement.getAttribute("uidensity"); | ||||
|          if (!layoutData || layoutData.uiDensity != uiDensity) { | ||||
| @@ -2113,7 +2152,7 @@ | ||||
| @@ -2104,7 +2143,7 @@ | ||||
|          return; | ||||
|        } | ||||
|   | ||||
| @@ -374,7 +368,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|   | ||||
|        let directionX = screenX > dragData.animLastScreenX; | ||||
|        let directionY = screenY > dragData.animLastScreenY; | ||||
| @@ -2121,7 +2160,7 @@ | ||||
| @@ -2112,7 +2151,7 @@ | ||||
|        dragData.animLastScreenX = screenX; | ||||
|   | ||||
|        let { width: tabWidth, height: tabHeight } = | ||||
| @@ -384,18 +378,18 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|        let shiftSizeY = tabHeight; | ||||
|        dragData.tabWidth = tabWidth; | ||||
| @@ -2296,10 +2335,11 @@ | ||||
|        } | ||||
|        this.#clearDragOverCreateGroupTimer(); | ||||
|   | ||||
|        let pinned = draggedTab.pinned; | ||||
|        let isPinned = draggedTab.pinned; | ||||
| -      let numPinned = gBrowser.pinnedTabCount; | ||||
| -      let tabs = this.visibleTabs.slice( | ||||
| -        pinned ? 0 : numPinned, | ||||
| -        pinned ? numPinned : undefined | ||||
| -      let tabs = this.ariaFocusableItems.slice( | ||||
| -        isPinned ? 0 : numPinned, | ||||
| -        isPinned ? numPinned : undefined | ||||
| +      let numPinned = gBrowser._numVisiblePinTabs; | ||||
| +      let essential = draggedTab.hasAttribute("zen-essential"); | ||||
| +      let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice( | ||||
| +        pinned ? (essential ? 0 : gBrowser._numZenVisibleEssentials) : numPinned, | ||||
| +        pinned ? (essential ? gBrowser._numZenVisibleEssentials : numPinned) : undefined | ||||
| +      let tabs = this.ariaFocusableItems.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice( | ||||
| +        isPinned ? (essential ? 0 : gBrowser._numZenVisibleEssentials) : numPinned, | ||||
| +        isPinned ? (essential ? gBrowser._numZenVisibleEssentials : numPinned) : undefined | ||||
|        ); | ||||
|   | ||||
|        if (this.#rtlMode) { | ||||
| @@ -412,25 +406,28 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|        } | ||||
|   | ||||
|        dragData.translatePos = translate; | ||||
| @@ -2484,12 +2528,16 @@ | ||||
| @@ -2639,7 +2683,7 @@ | ||||
|        // Shift background tabs to leave a gap where the dragged tab | ||||
|        // would currently be dropped. | ||||
|        for (let tab of tabs) { | ||||
| -        if (tab == draggedTab) { | ||||
| +        if (tab == draggedTab || (tab.group?.hasAttribute("split-view-group") && tab.group == draggedTab.group)) { | ||||
|        for (let item of tabs) { | ||||
| -        if (item == draggedTab) { | ||||
| +        if (item == draggedTab || (item.group?.hasAttribute("split-view-group") && item.group == draggedTab.group)) { | ||||
|            continue; | ||||
|          } | ||||
|          let shift = getTabShift(tab, newIndex); | ||||
|          let transform = shift ? `${translateAxis}(${shift}px)` : ""; | ||||
| +        if (tab.group?.hasAttribute("split-view-group")) { | ||||
| +          tab.group.style.transform = transform; | ||||
|   | ||||
| @@ -2649,7 +2693,11 @@ | ||||
|            // Shift the `.tab-group-label-container` to shift the label element. | ||||
|            item = item.parentElement; | ||||
|          } | ||||
| +        if (item.group?.hasAttribute("split-view-group")) { | ||||
| +          item.group.style.transform = transform; | ||||
| +        } else { | ||||
|          tab.style.transform = transform; | ||||
|          item.style.transform = transform; | ||||
| +        } | ||||
|          if (tab.group?.tabs[0] == tab) { | ||||
|            tab.group.style.setProperty( | ||||
|              "--tabgroup-dragover-transform", | ||||
| @@ -2541,8 +2589,9 @@ | ||||
|        } | ||||
|      } | ||||
|   | ||||
| @@ -2697,8 +2745,9 @@ | ||||
|        ); | ||||
|      } | ||||
|   | ||||
| @@ -442,16 +439,8 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|          return; | ||||
|        } | ||||
|   | ||||
| @@ -2553,6 +2602,7 @@ | ||||
|          tab.style.transform = ""; | ||||
|          if (tab.group) { | ||||
|            tab.group.style.removeProperty("--tabgroup-dragover-transform"); | ||||
| +          tab.group.style.transform = ""; | ||||
|          } | ||||
|          tab.removeAttribute("dragover-createGroup"); | ||||
|        } | ||||
| @@ -2604,7 +2654,7 @@ | ||||
|            movingTab._moveTogetherSelectedTabsData.newIndex = movingTabNewIndex; | ||||
| @@ -2754,7 +2803,7 @@ | ||||
|          let postTransitionCleanup = () => { | ||||
|            movingTab._moveTogetherSelectedTabsData.animate = false; | ||||
|          }; | ||||
| -        if (gReduceMotion) { | ||||
| @@ -459,19 +448,7 @@ index fa96568d366fd3608f9bd583fa793150bd815c8b..13a870629a98304cb18dc09b5ae075d7 | ||||
|            postTransitionCleanup(); | ||||
|          } else { | ||||
|            let onTransitionEnd = transitionendEvent => { | ||||
| @@ -2707,9 +2757,9 @@ | ||||
|        function newIndex(aTab, index) { | ||||
|          // Don't allow mixing pinned and unpinned tabs. | ||||
|          if (aTab.pinned) { | ||||
| -          return Math.min(index, gBrowser.pinnedTabCount - 1); | ||||
| +          return Math.min(index, gBrowser._numVisiblePinTabs - 1); | ||||
|          } | ||||
| -        return Math.max(index, gBrowser.pinnedTabCount); | ||||
| +        return Math.max(index, gBrowser._numVisiblePinTabs); | ||||
|        } | ||||
|      } | ||||
|   | ||||
| @@ -2793,7 +2843,7 @@ | ||||
| @@ -2924,7 +2973,7 @@ | ||||
|      } | ||||
|   | ||||
|      _notifyBackgroundTab(aTab) { | ||||
|   | ||||
| @@ -0,0 +1,13 @@ | ||||
| diff --git a/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx b/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx | ||||
| index dcf192d0ab7323d69f1bf505971e57c98ad4397d..a4d88304786af35030391f71bc99eee6cf7c1a64 100644 | ||||
| --- a/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx | ||||
| +++ b/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx | ||||
| @@ -188,7 +188,7 @@ export class ContentSection extends React.PureComponent { | ||||
|                          data-l10n-args='{"num": 4}' | ||||
|                        /> | ||||
|                      </select> | ||||
| -                    {mayHaveSponsoredTopSites && ( | ||||
| +                    {false && ( | ||||
|                        <div className="check-wrapper" role="presentation"> | ||||
|                          <input | ||||
|                            id="sponsored-shortcuts" | ||||
| @@ -1,7 +1,7 @@ | ||||
| diff --git a/browser/components/newtab/lib/AboutPreferences.sys.mjs b/browser/components/newtab/lib/AboutPreferences.sys.mjs | ||||
| index 33f7ecdaeb7074c7633dd229a4446f2a8ed4b247..f422a9bfb9694b190e84e81a430a509b4ab8c986 100644 | ||||
| --- a/browser/components/newtab/lib/AboutPreferences.sys.mjs | ||||
| +++ b/browser/components/newtab/lib/AboutPreferences.sys.mjs | ||||
| diff --git a/browser/extensions/newtab/lib/AboutPreferences.sys.mjs b/browser/extensions/newtab/lib/AboutPreferences.sys.mjs | ||||
| index df9d63c2713b4237d8acca93f108d5c788caed8d..a80cc02fdec6e1056d26a6b5a1cdc1a602e5cf2a 100644 | ||||
| --- a/browser/extensions/newtab/lib/AboutPreferences.sys.mjs | ||||
| +++ b/browser/extensions/newtab/lib/AboutPreferences.sys.mjs | ||||
| @@ -34,7 +34,7 @@ const PREFS_BEFORE_SECTIONS = () => [ | ||||
|        titleString: "home-prefs-shortcuts-header", | ||||
|        descString: "home-prefs-shortcuts-description", | ||||
| @@ -0,0 +1,13 @@ | ||||
| diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs | ||||
| index b3d89213ec27151f05e9990d5a55c6e81ce3655f..3c485f616fa2daba62aacbdde2dfb3122e244821 100644 | ||||
| --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs | ||||
| +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs | ||||
| @@ -214,7 +214,7 @@ export const PREFS_CONFIG = new Map([ | ||||
|      "showSponsoredTopSites", | ||||
|      { | ||||
|        title: "Show sponsored top sites", | ||||
| -      value: true, | ||||
| +      value: false, | ||||
|      }, | ||||
|    ], | ||||
|    [ | ||||
							
								
								
									
										24
									
								
								src/browser/modules/BrowserDOMWindow-sys-mjs.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/browser/modules/BrowserDOMWindow-sys-mjs.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| diff --git a/browser/modules/BrowserDOMWindow.sys.mjs b/browser/modules/BrowserDOMWindow.sys.mjs | ||||
| index 2bc4918c15b5ea80e486db66d20bb9668b9e29c0..3800a3807f11c5f65ce0d602a775f95037f5dcf8 100644 | ||||
| --- a/browser/modules/BrowserDOMWindow.sys.mjs | ||||
| +++ b/browser/modules/BrowserDOMWindow.sys.mjs | ||||
| @@ -362,7 +362,7 @@ export class BrowserDOMWindow { | ||||
|      // Passing a null-URI to only create the content window, | ||||
|      // and pass true for aSkipLoad to prevent loading of | ||||
|      // about:blank | ||||
| -    return this.getContentWindowOrOpenURIInFrame( | ||||
| +    let res = this.getContentWindowOrOpenURIInFrame( | ||||
|        null, | ||||
|        aParams, | ||||
|        aWhere, | ||||
| @@ -370,6 +370,10 @@ export class BrowserDOMWindow { | ||||
|        aName, | ||||
|        true | ||||
|      ); | ||||
| +    if (typeof this.win?.gZenGlanceManager !== "undefined" && this.win.toolbar.visible) { | ||||
| +      this.win.gZenGlanceManager.onTabOpen(res, aURI); | ||||
| +    } | ||||
| +    return res; | ||||
|    } | ||||
|   | ||||
|    openURIInFrame(aURI, aParams, aWhere, aFlags, aName) { | ||||
| @@ -1,37 +0,0 @@ | ||||
| diff --git a/browser/themes/addons/dark/manifest.json b/browser/themes/addons/dark/manifest.json | ||||
| index bfebde683d00b0acf26509139a0f662029d37c72..976b553f49e40b7ed02743d79ccc102fccffcf6f 100644 | ||||
| --- a/browser/themes/addons/dark/manifest.json | ||||
| +++ b/browser/themes/addons/dark/manifest.json | ||||
| @@ -7,10 +7,10 @@ | ||||
|      } | ||||
|    }, | ||||
|   | ||||
| -  "name": "Dark", | ||||
| +  "name": "Zen Dark", | ||||
|    "description": "A theme with a dark color scheme.", | ||||
| -  "author": "Mozilla", | ||||
| +  "author": "Zen", | ||||
|    "version": "1.3.2", | ||||
|   | ||||
|    "icons": { "32": "icon.svg" }, | ||||
|   | ||||
| @@ -58,7 +58,8 @@ | ||||
|        "color_scheme": "dark", | ||||
|        "panel_active": "color-mix(in srgb, currentColor 14%, transparent)", | ||||
|        "toolbar_field_icon_opacity": "1", | ||||
| -      "zap_gradient": "linear-gradient(90deg, #9059FF 0%, #FF4AA2 52.08%, #FFBD4F 100%)" | ||||
| +      "zap_gradient": "linear-gradient(90deg, #9059FF 0%, #FF4AA2 52.08%, #FFBD4F 100%)", | ||||
| +      "zen_main_browser_background": "var(--zen-themed-toolbar-bg)" | ||||
|      } | ||||
|    }, | ||||
|   | ||||
| @@ -82,7 +83,8 @@ | ||||
|      "properties": { | ||||
|        "panel_active": "--arrowpanel-dimmed-further", | ||||
|        "toolbar_field_icon_opacity": "--urlbar-icon-fill-opacity", | ||||
| -      "zap_gradient": "--panel-separator-zap-gradient" | ||||
| +      "zap_gradient": "--panel-separator-zap-gradient", | ||||
| +      "zen_main_browser_background": "--zen-main-browser-background" | ||||
|      } | ||||
|    } | ||||
|  } | ||||
| @@ -1,37 +0,0 @@ | ||||
| diff --git a/browser/themes/addons/light/manifest.json b/browser/themes/addons/light/manifest.json | ||||
| index d490f8f08d203ded55b65fe1a19be105b61ee6c0..eb4349e939b979b3a4d7c525ee0c0f9a53079d4a 100644 | ||||
| --- a/browser/themes/addons/light/manifest.json | ||||
| +++ b/browser/themes/addons/light/manifest.json | ||||
| @@ -7,10 +7,10 @@ | ||||
|      } | ||||
|    }, | ||||
|   | ||||
| -  "name": "Light", | ||||
| +  "name": "Zen Light", | ||||
|    "description": "A theme with a light color scheme.", | ||||
| -  "author": "Mozilla", | ||||
| +  "author": "Zen", | ||||
|    "version": "1.3", | ||||
|   | ||||
|    "icons": { "32": "icon.svg" }, | ||||
|   | ||||
| @@ -59,7 +59,8 @@ | ||||
|        "panel_active": "color-mix(in srgb, currentColor 20%, transparent)", | ||||
|        "panel_active_darker": "color-mix(in srgb, currentColor 27%, transparent)", | ||||
|        "toolbar_field_icon_opacity": "0.72", | ||||
| -      "zap_gradient": "linear-gradient(90deg, #9059FF 0%, #FF4AA2 52.08%, #FFBD4F 100%)" | ||||
| +      "zap_gradient": "linear-gradient(90deg, #9059FF 0%, #FF4AA2 52.08%, #FFBD4F 100%)", | ||||
| +      "zen_main_browser_background": "var(--zen-themed-toolbar-bg)" | ||||
|      } | ||||
|    }, | ||||
|   | ||||
| @@ -86,7 +87,8 @@ | ||||
|        "panel_active": "--arrowpanel-dimmed-further", | ||||
|        "panel_active_darker": "--panel-item-active-bgcolor", | ||||
|        "toolbar_field_icon_opacity": "--urlbar-icon-fill-opacity", | ||||
| -      "zap_gradient": "--panel-separator-zap-gradient" | ||||
| +      "zap_gradient": "--panel-separator-zap-gradient", | ||||
| +      "zen_main_browser_background": "--zen-main-browser-background" | ||||
|      } | ||||
|    } | ||||
|  } | ||||
| @@ -1,5 +1,5 @@ | ||||
| diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css | ||||
| index dc95772553ef7130c27c1122178ff99028b601f2..81f7dbb40c35168376ca84eebfa9fba8d314cb90 100644 | ||||
| index 5c9891e5ed4b865ed4ecc98d794a239b0f96a8f9..e13bf7277edeb49ebbb12cf9359ac6193bb47ebd 100644 | ||||
| --- a/browser/themes/linux/browser.css | ||||
| +++ b/browser/themes/linux/browser.css | ||||
| @@ -42,21 +42,25 @@ | ||||
| @@ -17,7 +17,7 @@ index dc95772553ef7130c27c1122178ff99028b601f2..81f7dbb40c35168376ca84eebfa9fba8 | ||||
|      } | ||||
|   | ||||
|      /* stylelint-disable-next-line media-query-no-invalid */ | ||||
|      @media (-moz-bool-pref: "widget.gtk.rounded-bottom-corners.enabled") { | ||||
|      @media -moz-pref("widget.gtk.rounded-bottom-corners.enabled") { | ||||
| -      #navigator-toolbox { | ||||
| +      #zen-main-app-wrapper { | ||||
|          /* The body clip below covers this. */ | ||||
|   | ||||
| @@ -1,17 +1,24 @@ | ||||
| diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml | ||||
| index a9863858f9a28b2c633edd9689d4379203eef1e6..7ac24baf70727a2a9be428c6f98763f312a0969b 100644 | ||||
| index 85974462e5ce2b7dbf85bd5c79f09b3db5c25915..428a245cdf58d959256aa3c975687f31aed16b05 100644 | ||||
| --- a/modules/libpref/init/StaticPrefList.yaml | ||||
| +++ b/modules/libpref/init/StaticPrefList.yaml | ||||
| @@ -18305,7 +18305,7 @@ | ||||
| @@ -18462,13 +18462,13 @@ | ||||
|  # Whether we use the mica backdrop. Off by default for now. | ||||
|  - name: widget.windows.mica | ||||
|    type: bool | ||||
| -  value: false | ||||
| +  value: true | ||||
|    mirror: once | ||||
|  #endif | ||||
|    mirror: always | ||||
|   | ||||
| @@ -18418,6 +18418,26 @@ | ||||
|  # Whether we use the mica backdrop for popups. Off by default for now. | ||||
|  - name: widget.windows.mica.popups | ||||
|    type: RelaxedAtomicBool | ||||
| -  value: false | ||||
| +  value: true | ||||
|    mirror: always | ||||
|   | ||||
|  # Whether we expand the client area into the taskbar hidden edge on maximized | ||||
| @@ -18594,6 +18594,26 @@ | ||||
|    mirror: always | ||||
|  #endif | ||||
|   | ||||
|   | ||||
| @@ -22,25 +22,6 @@ index 648c65a9c21dc0e670b50c82cbfb237a68a951d9..ba20bfdd8e6b9cc985977d06e166147e | ||||
|  | ||||
|      @media (prefers-contrast) { | ||||
|        --panel-border-color: color-mix(in srgb, currentColor 60%, transparent); | ||||
| @@ -49,18 +47,6 @@ panel { | ||||
|      --panel-border-radius: 0px !important; | ||||
|    } | ||||
|   | ||||
| -  @media (-moz-platform: macos) { | ||||
| -    appearance: auto; | ||||
| -    -moz-default-appearance: menupopup; | ||||
| -    /* We set the default background here, rather than on ::part(content), | ||||
| -     * because otherwise it'd interfere with the native look. Non-native-looking | ||||
| -     * popups should get their background via --panel-background */ | ||||
| -    background-color: Menu; | ||||
| -    --panel-background: none; | ||||
| -    --panel-border-color: transparent; | ||||
| -    /* This should be kept in sync with GetMenuMaskImage() */ | ||||
| -    --panel-border-radius: 6px; | ||||
| -  } | ||||
|   | ||||
|    &::part(content) { | ||||
|      display: flex; | ||||
| @@ -198,7 +184,6 @@ panel:where([type="arrow"]) { | ||||
|      } | ||||
|  | ||||
|   | ||||
							
								
								
									
										12
									
								
								src/widget/windows/WinUtils-cpp.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/widget/windows/WinUtils-cpp.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| diff --git a/widget/windows/WinUtils.cpp b/widget/windows/WinUtils.cpp | ||||
| index 598c96cbb5cd06a986a5793ebe9c5438d419d4a9..de1317749e6a6dd7df644818970d7706a51e6c14 100644 | ||||
| --- a/widget/windows/WinUtils.cpp | ||||
| +++ b/widget/windows/WinUtils.cpp | ||||
| @@ -2007,6 +2007,7 @@ bool WinUtils::GetTimezoneName(wchar_t* aBuffer) { | ||||
|  static constexpr nsLiteralCString kMicaPrefs[] = { | ||||
|      "widget.windows.mica"_ns, | ||||
|      "widget.windows.mica.popups"_ns, | ||||
| +    "zen.widget.windows.acrylic"_ns, | ||||
|  }; | ||||
|   | ||||
|  static BOOL CALLBACK UpdateMicaInHwnd(HWND aHwnd, LPARAM aLParam) { | ||||
| @@ -1,5 +1,5 @@ | ||||
| diff --git a/widget/windows/nsWindow.cpp b/widget/windows/nsWindow.cpp | ||||
| index 209fa7536df662e24bc6739b7ac9f911fba70ff0..321bb19cf7996a4632110e0099585d7e4ca4ca8a 100644 | ||||
| index d2863d5fd9ce5cedc88253a07cb061a660d42e61..28e63f8bb0b6c8d3b5655b285ea1040ea426616d 100644 | ||||
| --- a/widget/windows/nsWindow.cpp | ||||
| +++ b/widget/windows/nsWindow.cpp | ||||
| @@ -165,6 +165,7 @@ | ||||
| @@ -10,12 +10,12 @@ index 209fa7536df662e24bc6739b7ac9f911fba70ff0..321bb19cf7996a4632110e0099585d7e | ||||
|  #include "nsNativeAppSupportWin.h" | ||||
|   | ||||
|  #include "nsIGfxInfo.h" | ||||
| @@ -2535,7 +2536,7 @@ void nsWindow::SetMicaBackdrop(bool aEnabled) { | ||||
|   | ||||
|    // Enable Mica Alt Material if available. | ||||
|    const DWM_SYSTEMBACKDROP_TYPE type = | ||||
| -      aEnabled ? DWMSBT_TABBEDWINDOW : DWMSBT_AUTO; | ||||
| +      aEnabled ? (StaticPrefs::zen_widget_windows_acrylic_AtStartup() ? DWMSBT_TRANSIENTWINDOW : DWMSBT_TABBEDWINDOW) : DWMSBT_AUTO; | ||||
|    DwmSetWindowAttribute(mWnd, DWMWA_SYSTEMBACKDROP_TYPE, &type, sizeof type); | ||||
| @@ -2546,7 +2547,7 @@ void nsWindow::UpdateMicaBackdrop(bool aForce) { | ||||
|      if (!useBackdrop) { | ||||
|        return DWMSBT_AUTO; | ||||
|      } | ||||
|   | ||||
| -    return IsPopup() ? DWMSBT_TRANSIENTWINDOW : DWMSBT_TABBEDWINDOW; | ||||
| +    return IsPopup() ? DWMSBT_TRANSIENTWINDOW : (StaticPrefs::zen_widget_windows_acrylic_AtStartup() ? DWMSBT_TRANSIENTWINDOW : DWMSBT_TABBEDWINDOW); | ||||
|    }(); | ||||
|    ::DwmSetWindowAttribute(mWnd, DWMWA_SYSTEMBACKDROP_TYPE, &backdrop, | ||||
|                            sizeof backdrop); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 mr. M
					mr. M