From a513d95aad7f3d3c5920f1f25224def1b4e33320 Mon Sep 17 00:00:00 2001 From: Mauro Balades Date: Tue, 6 Aug 2024 12:04:59 +0200 Subject: [PATCH] chore: Add lazy loading for UI elements in split view --- src/browser/base/content/ZenViewSplitter.mjs | 63 ++++++++++++++++++- .../content/main-popupset-inc-xhtml.patch | 21 ++----- .../tabbrowser/content/tabbrowser-js.patch | 14 +---- 3 files changed, 66 insertions(+), 32 deletions(-) diff --git a/src/browser/base/content/ZenViewSplitter.mjs b/src/browser/base/content/ZenViewSplitter.mjs index 4d3e5d0a9..1ae101ca4 100644 --- a/src/browser/base/content/ZenViewSplitter.mjs +++ b/src/browser/base/content/ZenViewSplitter.mjs @@ -1,19 +1,78 @@ var gZenViewSplitter = { init() { + this.initializeUI(); console.log(gZenSplitViewsBase) }, - onLocationChange(browser) { + initializeUI() { + this.initializeUpdateContextMenuItems(); + this.initializeTabContextMenu(); }, - contextCanSplitTabs() { + initializeTabContextMenu() { + const fragment = window.MozXULElement.parseXULToFragment(` + + + `); + document.getElementById("tabContextMenu").appendChild(fragment); + }, + + /** + * context menu item display update + */ + initializeUpdateContextMenuItems() { + const contentAreaContextMenu = document.getElementById("tabContextMenu"); + const tabCountInfo = JSON.stringify({ + tabCount: + (window.gContextMenu?.contextTab.multiselected && + window.gBrowser.multiSelectedTabsCount) || + 1, + }); + + contentAreaContextMenu.addEventListener("popupshowing", () => { + document + .getElementById("context_zenSplitTabs") + .setAttribute("data-l10n-args", tabCountInfo); + document.getElementById("context_zenSplitTabs").disabled = + !this.contextCanSplitTabs(); + }); + }, + + onLocationChange(browser) { + gZenSplitViewsBase.onLocationChange(browser); }, openSplitViewPanel(event) { }, + contextCanSplitTabs() { + let tabs = window.gBrowser.selectedTabs; + if (tabs.length < 2) { + return false; + } + // Check if there are 2 tabs in different groups + // Or if all the selected tabs are in the same group + let group = gZenSplitViewsBase.getTabView(tabs[0]); + for (let i = 1; i < tabs.length; i++) { + // Check if they are not in the same group, but we do allow + // if they are ungrouped + let tabGroup = gZenSplitViewsBase.getTabView(tabs[i]); + if (tabGroup === -1) { + continue; + } + if (group !== tabGroup) { + return false; + } + } + return true; + }, + contextSplitTabs() { + let selectedTabs = gBrowser.selectedTabs; + }, }; diff --git a/src/browser/base/content/main-popupset-inc-xhtml.patch b/src/browser/base/content/main-popupset-inc-xhtml.patch index 55cb94c83..d54c3b396 100644 --- a/src/browser/base/content/main-popupset-inc-xhtml.patch +++ b/src/browser/base/content/main-popupset-inc-xhtml.patch @@ -1,21 +1,8 @@ diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml -index ef8245938ea669227c255d85422a26b99cb2290b..48c061796072e976a45f7bd0ca1c8b3913728fc7 100644 +index a2725d45b2c40ee9c718142dd48e22985adfdbd6..888c91058b3266e5a17aea98f7efaee2d11ec9e5 100644 --- a/browser/base/content/main-popupset.inc.xhtml +++ b/browser/base/content/main-popupset.inc.xhtml -@@ -80,6 +80,12 @@ - -+ -+ -+ - - -@@ -169,6 +175,10 @@ +@@ -169,6 +169,10 @@ hidden="true" tabspecific="true" aria-labelledby="editBookmarkPanelTitle"> @@ -26,7 +13,7 @@ index ef8245938ea669227c255d85422a26b99cb2290b..48c061796072e976a45f7bd0ca1c8b39 -@@ -191,12 +201,14 @@ +@@ -191,12 +195,14 @@ class="footer-button" data-l10n-id="bookmark-panel-save-button" default="true" @@ -41,7 +28,7 @@ index ef8245938ea669227c255d85422a26b99cb2290b..48c061796072e976a45f7bd0ca1c8b39 -@@ -514,6 +526,8 @@ +@@ -523,6 +529,8 @@ #include popup-notifications.inc diff --git a/src/browser/components/tabbrowser/content/tabbrowser-js.patch b/src/browser/components/tabbrowser/content/tabbrowser-js.patch index 45b5d2532..ff70cf068 100644 --- a/src/browser/components/tabbrowser/content/tabbrowser-js.patch +++ b/src/browser/components/tabbrowser/content/tabbrowser-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js -index 2674dc2bebf436529a46d45c52cb56e86b82c03f..960c0039cd511a9d2c78e2a0c8c78080464950ee 100644 +index 2674dc2bebf436529a46d45c52cb56e86b82c03f..06d30b3e33562d8eaa04522d3719728126c59a81 100644 --- a/browser/components/tabbrowser/content/tabbrowser.js +++ b/browser/components/tabbrowser/content/tabbrowser.js @@ -3208,6 +3208,11 @@ @@ -25,15 +25,3 @@ index 2674dc2bebf436529a46d45c52cb56e86b82c03f..960c0039cd511a9d2c78e2a0c8c78080 if (select) { tabToSelect = tab; } -@@ -7878,6 +7887,11 @@ var TabContextMenu = { - this.contextTab.linkedBrowser, - document.getElementById("context_sendTabToDevice") - ); -+ -+ document -+ .getElementById("context_zenSplitTabs") -+ .setAttribute("data-l10n-args", tabCountInfo); -+ document.getElementById("context_zenSplitTabs").disabled = !gZenViewSplitter.contextCanSplitTabs(); - }, - - handleEvent(aEvent) {