mirror of
https://github.com/zen-browser/desktop.git
synced 2025-10-21 17:21:56 +00:00
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:
@@ -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);
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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" />
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
@@ -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',
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
|
@@ -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>
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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"
|
||||||
|
@@ -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');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user