From 3ba496a0e733dd0a267aaf2bfe48ef0ab62a9846 Mon Sep 17 00:00:00 2001 From: Mauro Balades Date: Sat, 18 May 2024 14:11:19 +0200 Subject: [PATCH] Allow adding split views with context menu --- .../base/content/ZenSidebarManager.mjs | 2 +- src/browser/base/content/ZenViewSplitter.mjs | 24 ++++++++++++++++++- .../content/main-popupset-inc-xhtml.patch | 21 ++++++++++++---- src/browser/base/content/tabbrowser-js.patch | 16 +++++++++++++ .../en-US/browser/tabContextMenu-ftl.patch | 19 +++++++++++++++ src/browser/themes/shared/zen-icons/icons.css | 5 ++++ 6 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 src/browser/base/content/tabbrowser-js.patch create mode 100644 src/browser/locales/en-US/browser/tabContextMenu-ftl.patch diff --git a/src/browser/base/content/ZenSidebarManager.mjs b/src/browser/base/content/ZenSidebarManager.mjs index 631013d7a..c88c40b88 100644 --- a/src/browser/base/content/ZenSidebarManager.mjs +++ b/src/browser/base/content/ZenSidebarManager.mjs @@ -288,7 +288,7 @@ var gZenBrowserManagerSidebar = { _createWebPanelBrowser(data) { const titleContainer = document.getElementById("zen-sidebar-web-panel-title"); - titleContainer.textContent = ""; + titleContainer.textContent = "Loading..."; let browser = gBrowser.createBrowser({}); browser.setAttribute("disablefullscreen", "true"); browser.setAttribute("src", data.url); diff --git a/src/browser/base/content/ZenViewSplitter.mjs b/src/browser/base/content/ZenViewSplitter.mjs index 46307bf2b..6759792e2 100644 --- a/src/browser/base/content/ZenViewSplitter.mjs +++ b/src/browser/base/content/ZenViewSplitter.mjs @@ -42,6 +42,9 @@ var gZenViewSplitter = { } let dataTab = this._data[index].tabs; dataTab.splice(dataTab.indexOf(tab), 1); + tab._zenSplitted = false; + tab.linkedBrowser.zenModeActive = false; + tab.linkedBrowser.docShellIsActive = false; if (dataTab.length < 2) { this._data.splice(index, 1); if (this.currentView == index) { @@ -98,7 +101,7 @@ var gZenViewSplitter = { return; } for (const tab of this._data[this.currentView].tabs) { - tab._zenSplitted = false; + // tab._zenSplitted = false; let container = tab.linkedBrowser.closest(".browserSidebarContainer"); container.removeAttribute("zen-split-active"); container.classList.remove("deck-selected"); @@ -129,6 +132,25 @@ var gZenViewSplitter = { } modifyDecks(splitData.tabs, true); }, + + contextSplitTabs() { + let tabs = gBrowser.selectedTabs; + this.splitTabs(tabs); + }, + + contextCanSplitTabs() { + if (gBrowser.selectedTabs.length < 2) { + return false; + } + // Check if any tab is already split + for (const tab of gBrowser.selectedTabs) { + console.log(tab._zenSplitted); + if (tab._zenSplitted) { + return false; + } + } + return true; + }, }; gZenViewSplitter.init(); diff --git a/src/browser/base/content/main-popupset-inc-xhtml.patch b/src/browser/base/content/main-popupset-inc-xhtml.patch index 9252fe8d6..e24f77200 100644 --- a/src/browser/base/content/main-popupset-inc-xhtml.patch +++ b/src/browser/base/content/main-popupset-inc-xhtml.patch @@ -1,8 +1,21 @@ diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml -index bff8d98b27819b149a0c51c1195e1ee3668f2e31..622cbe099be0f1da8f48132204b73e577483ceae 100644 +index 91b2483c53fe67875d108a3d7c1959411f1d2c8f..1c3f460392a9c6ad4329865f3bf5dd253d84895d 100644 --- a/browser/base/content/main-popupset.inc.xhtml +++ b/browser/base/content/main-popupset.inc.xhtml -@@ -166,6 +166,10 @@ +@@ -77,6 +77,12 @@ + data-lazy-l10n-id="tab-context-close-n-tabs" + data-l10n-args='{"tabCount": 1}' + oncommand="TabContextMenu.closeContextTabs();"/> ++ ++ ++ + + +@@ -166,6 +172,10 @@ hidden="true" tabspecific="true" aria-labelledby="editBookmarkPanelTitle"> @@ -13,7 +26,7 @@ index bff8d98b27819b149a0c51c1195e1ee3668f2e31..622cbe099be0f1da8f48132204b73e57 -@@ -188,12 +192,14 @@ +@@ -188,12 +198,14 @@ class="footer-button" data-l10n-id="bookmark-panel-save-button" default="true" @@ -28,7 +41,7 @@ index bff8d98b27819b149a0c51c1195e1ee3668f2e31..622cbe099be0f1da8f48132204b73e57 -@@ -491,6 +497,8 @@ +@@ -507,6 +519,8 @@ #include popup-notifications.inc diff --git a/src/browser/base/content/tabbrowser-js.patch b/src/browser/base/content/tabbrowser-js.patch new file mode 100644 index 000000000..084958d54 --- /dev/null +++ b/src/browser/base/content/tabbrowser-js.patch @@ -0,0 +1,16 @@ +diff --git a/browser/base/content/tabbrowser.js b/browser/base/content/tabbrowser.js +index 3bca0b6d30468dc3a755219723f673ec80dfce6e..200a609ea31a8c904e2d3e39a3a06ff67fb313ed 100644 +--- a/browser/base/content/tabbrowser.js ++++ b/browser/base/content/tabbrowser.js +@@ -7623,6 +7623,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) { diff --git a/src/browser/locales/en-US/browser/tabContextMenu-ftl.patch b/src/browser/locales/en-US/browser/tabContextMenu-ftl.patch new file mode 100644 index 000000000..30b8f263f --- /dev/null +++ b/src/browser/locales/en-US/browser/tabContextMenu-ftl.patch @@ -0,0 +1,19 @@ +diff --git a/browser/locales/en-US/browser/tabContextMenu.ftl b/browser/locales/en-US/browser/tabContextMenu.ftl +index df58df794c5e7101aa1ea684edd009532d74240d..0b4237dfde4e8e30e279f0a7022c1a36e67a04e8 100644 +--- a/browser/locales/en-US/browser/tabContextMenu.ftl ++++ b/browser/locales/en-US/browser/tabContextMenu.ftl +@@ -101,6 +101,14 @@ tab-context-move-tabs = + } + .accesskey = v + ++tab-zen-split-tabs = ++ .label = ++ { $tabCount -> ++ [1] Split Tab (multiple selected tabs needed) ++ *[other] Split { $tabCount } Tabs ++ } ++ .accesskey = S ++ + tab-context-send-tabs-to-device = + .label = + { $tabCount -> diff --git a/src/browser/themes/shared/zen-icons/icons.css b/src/browser/themes/shared/zen-icons/icons.css index 48089f846..22ccde6e9 100644 --- a/src/browser/themes/shared/zen-icons/icons.css +++ b/src/browser/themes/shared/zen-icons/icons.css @@ -34,6 +34,11 @@ list-style-image: url("sidebars-right.svg") !important; } +#context_zenSplitTabs { + /* TODO: Add split view icon */ + --menu-image: url("sidebars-right.svg") !important; +} + #sidebar-button:-moz-locale-dir(ltr):not([positionend]), #sidebar-button:-moz-locale-dir(rtl)[positionend], #zen-sidepanel-button {