Merge pull request #1957 from kristijanribaric/feature(pinned-tab-url-reset)-add-setting-and-pinned-tab-base-url-persisting

Feature: Add Pinned Tab Management and URL Reset Functionality 2.0
This commit is contained in:
mauro 🤙
2024-10-08 21:54:12 +02:00
committed by GitHub
9 changed files with 92 additions and 13 deletions

View File

@@ -112,6 +112,9 @@ pref('zen.tab-unloader.enabled', true);
pref('zen.tab-unloader.timeout-minutes', 20); pref('zen.tab-unloader.timeout-minutes', 20);
pref('zen.tab-unloader.excluded-urls', "example.com,example.org"); pref('zen.tab-unloader.excluded-urls', "example.com,example.org");
pref('zen.pinned-tab-manager.reset-pinned-tab-on-close-shortcut', false);
pref('zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url', false);
// Pref to enable the new profiles (TODO: Check this out!) // Pref to enable the new profiles (TODO: Check this out!)
//pref("browser.profiles.enabled", true); //pref("browser.profiles.enabled", true);

View File

@@ -39,6 +39,7 @@
gZenUIManager.init(); gZenUIManager.init();
gZenVerticalTabsManager.init(); gZenVerticalTabsManager.init();
gZenCompactModeManager.init(); gZenCompactModeManager.init();
gZenPinnedTabManager.init();
function throttle(f, delay) { function throttle(f, delay) {
let timer = 0; let timer = 0;

View File

@@ -31,6 +31,7 @@
<script src="chrome://browser/content/ZenUIManager.mjs" /> <script src="chrome://browser/content/ZenUIManager.mjs" />
<script src="chrome://browser/content/zen-components/ZenSidebarManager.mjs"/> <script src="chrome://browser/content/zen-components/ZenSidebarManager.mjs"/>
<script src="chrome://browser/content/zen-components/ZenTabUnloader.mjs" /> <script src="chrome://browser/content/zen-components/ZenTabUnloader.mjs" />
<script src="chrome://browser/content/zen-components/ZenPinnedTabManager.mjs" />
<script src="chrome://browser/content/zen-components/ZenWorkspaces.mjs" /> <script src="chrome://browser/content/zen-components/ZenWorkspaces.mjs" />
<script src="chrome://browser/content/zen-components/ZenWorkspacesStorage.mjs" /> <script src="chrome://browser/content/zen-components/ZenWorkspacesStorage.mjs" />
<script src="chrome://browser/content/zen-components/ZenWorkspacesSync.mjs" /> <script src="chrome://browser/content/zen-components/ZenWorkspacesSync.mjs" />

View File

@@ -16,6 +16,7 @@
content/browser/zen-components/ZenThemeBuilder.mjs (content/zen-components/src/ZenThemeBuilder.mjs) content/browser/zen-components/ZenThemeBuilder.mjs (content/zen-components/src/ZenThemeBuilder.mjs)
content/browser/zen-components/ZenThemesImporter.mjs (content/zen-components/src/ZenThemesImporter.mjs) content/browser/zen-components/ZenThemesImporter.mjs (content/zen-components/src/ZenThemesImporter.mjs)
content/browser/zen-components/ZenTabUnloader.mjs (content/zen-components/src/ZenTabUnloader.mjs) content/browser/zen-components/ZenTabUnloader.mjs (content/zen-components/src/ZenTabUnloader.mjs)
content/browser/zen-components/ZenPinnedTabManager.mjs (content/zen-components/src/ZenPinnedTabManager.mjs)
content/browser/zen-components/ZenCommonUtils.mjs (content/zen-components/src/ZenCommonUtils.mjs) content/browser/zen-components/ZenCommonUtils.mjs (content/zen-components/src/ZenCommonUtils.mjs)
content/browser/zen-components/ZenGradientGenerator.mjs (content/zen-components/src/ZenGradientGenerator.mjs) content/browser/zen-components/ZenGradientGenerator.mjs (content/zen-components/src/ZenGradientGenerator.mjs)

View File

@@ -1020,4 +1020,14 @@ Preferences.addAll([
type: 'bool', type: 'bool',
default: false, default: false,
}, },
{
id: 'zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url',
type: 'bool',
default: true,
},
{
id: 'zen.pinned-tab-manager.close-shortcut-behavior',
type: 'string',
default: 'switch',
},
]); ]);

View File

@@ -48,6 +48,7 @@
data-l10n-id="zen-tabs-unloader-enabled" data-l10n-id="zen-tabs-unloader-enabled"
preference="zen.tab-unloader.enabled"/> preference="zen.tab-unloader.enabled"/>
<label><html:h2 data-l10n-id="zen-tabs-unloader-unload-delay"/></label> <label><html:h2 data-l10n-id="zen-tabs-unloader-unload-delay"/></label>
<hbox id="zenTabsUnloadDelayContainer"> <hbox id="zenTabsUnloadDelayContainer">
<description class="description-deemphasized" data-l10n-id="zen-tabs-unloader-unload-delay-description" /> <description class="description-deemphasized" data-l10n-id="zen-tabs-unloader-unload-delay-description" />
@@ -59,6 +60,36 @@
</hbox> </hbox>
</groupbox> </groupbox>
<hbox id="zenPinnedTabsManagerCategory"
class="subcategory"
hidden="true"
data-category="paneZenTabManagement">
<html:h1 data-l10n-id="pane-zen-pinned-tab-manager-title"/>
</hbox>
<groupbox id="zenPinnedTabsManagerGroup" data-category="paneZenTabManagement" hidden="true" class="highlighting-group">
<label><html:h2 data-l10n-id="zen-pinned-tab-manager-header"/></label>
<description class="description-deemphasized" data-l10n-id="zen-pinned-tab-manager-description" />
<checkbox id="zenPinnedTabRestorePinnedTabsToPinnedUrl"
data-l10n-id="zen-pinned-tab-manager-restore-pinned-tabs-to-pinned-url"
preference="zen.pinned-tab-manager.restore-pinned-tabs-to-pinned-url"/>
<hbox align="center">
<label id="zenPinnedTabCloseShortcutBehaviorLabel" data-l10n-id="zen-pinned-tab-manager-close-shortcut-behavior-label"/>
<menulist id="zenPinnedTabCloseShortcutBehavior" preference="zen.pinned-tab-manager.close-shortcut-behavior">
<menupopup>
<menuitem data-l10n-id="zen-pinned-tab-manager-reset-unload-switch-close-shortcut-option" value="reset-unload-switch"/>
<menuitem data-l10n-id="zen-pinned-tab-manager-unload-switch-close-shortcut-option" value="unload-switch"/>
<menuitem data-l10n-id="zen-pinned-tab-manager-reset-switch-close-shortcut-option" value="reset-switch"/>
<menuitem data-l10n-id="zen-pinned-tab-manager-switch-close-shortcut-option" value="switch"/>
<menuitem data-l10n-id="zen-pinned-tab-manager-reset-close-shortcut-option" value="reset"/>
<menuitem data-l10n-id="zen-pinned-tab-manager-close-close-shortcut-option" value="close"/>
</menupopup>
</menulist>
</hbox>
</groupbox>
</html:template> </html:template>

View File

@@ -1,13 +1,16 @@
diff --git a/browser/components/sessionstore/TabState.sys.mjs b/browser/components/sessionstore/TabState.sys.mjs diff --git a/browser/components/sessionstore/TabState.sys.mjs b/browser/components/sessionstore/TabState.sys.mjs
index 26f5671c849d9b0a126d79b07bc7d3d7870826ec..26f80d69a28f1196096e67a0e628a69b5b367727 100644 index 26f5671c849d9b0a126d79b07bc7d3d7870826ec..5e356a35639c802fcf6d95d42993d5bd5cda514a 100644
--- a/browser/components/sessionstore/TabState.sys.mjs --- a/browser/components/sessionstore/TabState.sys.mjs
+++ b/browser/components/sessionstore/TabState.sys.mjs +++ b/browser/components/sessionstore/TabState.sys.mjs
@@ -98,6 +98,9 @@ var TabStateInternal = { @@ -98,6 +98,12 @@ var TabStateInternal = {
tabData.muteReason = tab.muteReason; tabData.muteReason = tab.muteReason;
} }
+ tabData.zenWorkspace = tab.getAttribute("zen-workspace-id"); + tabData.zenWorkspace = tab.getAttribute("zen-workspace-id");
+ tabData.zenDefaultUserContextId = tab.getAttribute("zenDefaultUserContextId"); + tabData.zenDefaultUserContextId = tab.getAttribute("zenDefaultUserContextId");
+ tabData.zenPinnedUrl = tab.getAttribute("zen-pinned-url");
+ tabData.zenPinnedTitle = tab.getAttribute("zen-pinned-title");
+ tabData.zenPinnedIcon = tab.getAttribute("zen-pinned-icon");
+ +
tabData.searchMode = tab.ownerGlobal.gURLBar.getSearchMode(browser, true); tabData.searchMode = tab.ownerGlobal.gURLBar.getSearchMode(browser, true);

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36d7470155 100644 index c89ae2cbb978d6218bd56a059c5ca1e371231607..ab88ba4024bf5d069ef4ca613024f422ad513405 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js --- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js +++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -452,11 +452,26 @@ @@ -456,11 +456,26 @@
return duplicateTabs; return duplicateTabs;
}, },
@@ -31,7 +31,7 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
} }
return i; return i;
}, },
@@ -2704,6 +2719,11 @@ @@ -2705,6 +2720,11 @@
); );
} }
@@ -43,7 +43,7 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
if (!UserInteraction.running("browser.tabs.opening", window)) { if (!UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.start("browser.tabs.opening", "initting", window); UserInteraction.start("browser.tabs.opening", "initting", window);
} }
@@ -2771,6 +2791,9 @@ @@ -2773,6 +2793,9 @@
noInitialLabel, noInitialLabel,
skipBackgroundNotify, skipBackgroundNotify,
}); });
@@ -53,7 +53,7 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
if (insertTab) { if (insertTab) {
// insert the tab into the tab container in the correct position // insert the tab into the tab container in the correct position
this._insertTabAtIndex(t, { this._insertTabAtIndex(t, {
@@ -3248,6 +3271,14 @@ @@ -3262,6 +3285,14 @@
) { ) {
tabWasReused = true; tabWasReused = true;
tab = this.selectedTab; tab = this.selectedTab;
@@ -68,7 +68,17 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
if (!tabData.pinned) { if (!tabData.pinned) {
this.unpinTab(tab); this.unpinTab(tab);
} else { } else {
@@ -3297,6 +3328,13 @@ @@ -3275,6 +3306,9 @@
restoreTabsLazily && !select && !tabData.pinned;
let url = "about:blank";
+
+ gZenPinnedTabManager.resetPinnedTabData(tabData);
+
if (tabData.entries?.length) {
let activeIndex = (tabData.index || tabData.entries.length) - 1;
// Ensure the index is in bounds.
@@ -3311,6 +3345,12 @@
preferredRemoteType, preferredRemoteType,
}); });
@@ -78,11 +88,19 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
+ if (tabData.zenDefaultUserContextId) { + if (tabData.zenDefaultUserContextId) {
+ tab.setAttribute("zenDefaultUserContextId", "true"); + tab.setAttribute("zenDefaultUserContextId", "true");
+ } + }
+
if (select) { if (select) {
tabToSelect = tab; tabToSelect = tab;
} }
@@ -4184,6 +4222,7 @@ @@ -3345,7 +3385,7 @@
this.tabContainer._invalidateCachedTabs();
}
}
-
+ gZenPinnedTabManager.updatePinnedTabForSessionRestore(tabData, tab);
tab.initialize();
}
@@ -4198,6 +4238,7 @@
isLastTab || isLastTab ||
aTab.pinned || aTab.pinned ||
aTab.hidden || aTab.hidden ||
@@ -90,7 +108,7 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
this._removingTabs.size > this._removingTabs.size >
3 /* don't want lots of concurrent animations */ || 3 /* don't want lots of concurrent animations */ ||
!aTab.hasAttribute( !aTab.hasAttribute(
@@ -5117,10 +5156,10 @@ @@ -5131,10 +5172,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy"); SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
}, },
@@ -103,3 +121,12 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
aTab.selected || aTab.selected ||
aTab.closing || aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden. // Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -7870,7 +7911,7 @@ var TabContextMenu = {
);
contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !multiselectionContext;
-
+ gZenPinnedTabManager.updatePinnedTabContextMenu(this.contextTab);
// Move Tab items
let contextMoveTabOptions = document.getElementById(
"context_moveTabOptions"

View File

@@ -773,7 +773,8 @@ menuitem[id='placesContext_deleteHost'],
#context_reloadTab, #context_reloadTab,
#context_reloadSelectedTabs, #context_reloadSelectedTabs,
#toolbar-context-reloadSelectedTab, #toolbar-context-reloadSelectedTab,
#toolbar-context-reloadSelectedTabs { #toolbar-context-reloadSelectedTabs,
#context_zen-reset-pinned-tab {
--menu-image: url('reload.svg'); --menu-image: url('reload.svg');
} }
@@ -872,7 +873,8 @@ menuitem[contexttype='fullscreen'][label*='Exit'] {
#context_unpinTab, #context_unpinTab,
#context_pinSelectedTabs, #context_pinSelectedTabs,
#context_unpinSelectedTabs, #context_unpinSelectedTabs,
.customize-context-moveToPanel { .customize-context-moveToPanel,
#context_zen-replace-pinned-url-with-current {
--menu-image: url('pin.svg'); --menu-image: url('pin.svg');
} }