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.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("browser.profiles.enabled", true);

View File

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

View File

@@ -31,6 +31,7 @@
<script src="chrome://browser/content/ZenUIManager.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/ZenPinnedTabManager.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/ZenWorkspacesSync.mjs" />

View File

@@ -16,6 +16,7 @@
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/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/ZenGradientGenerator.mjs (content/zen-components/src/ZenGradientGenerator.mjs)

View File

@@ -1020,4 +1020,14 @@ Preferences.addAll([
type: 'bool',
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"
preference="zen.tab-unloader.enabled"/>
<label><html:h2 data-l10n-id="zen-tabs-unloader-unload-delay"/></label>
<hbox id="zenTabsUnloadDelayContainer">
<description class="description-deemphasized" data-l10n-id="zen-tabs-unloader-unload-delay-description" />
@@ -59,6 +60,36 @@
</hbox>
</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>

View File

@@ -1,13 +1,16 @@
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
+++ b/browser/components/sessionstore/TabState.sys.mjs
@@ -98,6 +98,9 @@ var TabStateInternal = {
@@ -98,6 +98,12 @@ var TabStateInternal = {
tabData.muteReason = tab.muteReason;
}
+ tabData.zenWorkspace = tab.getAttribute("zen-workspace-id");
+ 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);

View File

@@ -1,8 +1,8 @@
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
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -452,11 +452,26 @@
@@ -456,11 +456,26 @@
return duplicateTabs;
},
@@ -31,7 +31,7 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
}
return i;
},
@@ -2704,6 +2719,11 @@
@@ -2705,6 +2720,11 @@
);
}
@@ -43,7 +43,7 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
if (!UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.start("browser.tabs.opening", "initting", window);
}
@@ -2771,6 +2791,9 @@
@@ -2773,6 +2793,9 @@
noInitialLabel,
skipBackgroundNotify,
});
@@ -53,7 +53,7 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
if (insertTab) {
// insert the tab into the tab container in the correct position
this._insertTabAtIndex(t, {
@@ -3248,6 +3271,14 @@
@@ -3262,6 +3285,14 @@
) {
tabWasReused = true;
tab = this.selectedTab;
@@ -68,7 +68,17 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
if (!tabData.pinned) {
this.unpinTab(tab);
} 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,
});
@@ -78,11 +88,19 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
+ if (tabData.zenDefaultUserContextId) {
+ tab.setAttribute("zenDefaultUserContextId", "true");
+ }
+
if (select) {
tabToSelect = tab;
}
@@ -4184,6 +4222,7 @@
@@ -3345,7 +3385,7 @@
this.tabContainer._invalidateCachedTabs();
}
}
-
+ gZenPinnedTabManager.updatePinnedTabForSessionRestore(tabData, tab);
tab.initialize();
}
@@ -4198,6 +4238,7 @@
isLastTab ||
aTab.pinned ||
aTab.hidden ||
@@ -90,7 +108,7 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
this._removingTabs.size >
3 /* don't want lots of concurrent animations */ ||
!aTab.hasAttribute(
@@ -5117,10 +5156,10 @@
@@ -5131,10 +5172,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
},
@@ -103,3 +121,12 @@ index ef857bd81f2cd7c163ecc74ac1cf81a0b63ce838..807eb0c493f15643412b05d8dad81d36
aTab.selected ||
aTab.closing ||
// 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_reloadSelectedTabs,
#toolbar-context-reloadSelectedTab,
#toolbar-context-reloadSelectedTabs {
#toolbar-context-reloadSelectedTabs,
#context_zen-reset-pinned-tab {
--menu-image: url('reload.svg');
}
@@ -872,7 +873,8 @@ menuitem[contexttype='fullscreen'][label*='Exit'] {
#context_unpinTab,
#context_pinSelectedTabs,
#context_unpinSelectedTabs,
.customize-context-moveToPanel {
.customize-context-moveToPanel,
#context_zen-replace-pinned-url-with-current {
--menu-image: url('pin.svg');
}