diff --git a/src/ZenSidebarManager.mjs b/src/ZenSidebarManager.mjs index 218a7b6..b08e056 100644 --- a/src/ZenSidebarManager.mjs +++ b/src/ZenSidebarManager.mjs @@ -421,6 +421,7 @@ var gZenBrowserManagerSidebar = { browserContainers.appendChild(browser); if (data.ua) { browser.browsingContext.customUserAgent = this.DEFAULT_MOBILE_USER_AGENT; + browser.reload(); } browser.docShellIsActive = true; }, diff --git a/src/ZenTabUnloader.mjs b/src/ZenTabUnloader.mjs index 8fd6edb..cb208fc 100644 --- a/src/ZenTabUnloader.mjs +++ b/src/ZenTabUnloader.mjs @@ -1,8 +1,5 @@ { - const ZEN_TAB_UNLOADER_PREF = "zen.tab-unloader.enabled"; - const ZEN_TAB_UNLOADER_TIMEOUT_PREF = "zen.tab-unloader.timeout"; - const lazy = {}; XPCOMUtils.defineLazyPreferenceGetter( @@ -16,7 +13,7 @@ lazy, "zenTabUnloaderTimeout", "zen.tab-unloader.timeout-minutes", - 5 + 20 ); XPCOMUtils.defineLazyPreferenceGetter( @@ -152,6 +149,7 @@ if (!lazy.zenTabUnloaderEnabled) { return; } + this.insertIntoContextMenu(); this.observer = new ZenTabsObserver(); this.intervalUnloader = new ZenTabsIntervalUnloader(this); this.observer.addTabsListener(this.onTabEvent.bind(this)); @@ -220,10 +218,52 @@ return gBrowser.tabs; } + insertIntoContextMenu() { + const element = window.MozXULElement.parseXULToFragment(` + + + + + + + + + `); + document.getElementById('context_closeDuplicateTabs').parentNode.appendChild(element); + } + + unloadTab() { + const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; + for (const tab of tabs) { + gBrowser.discardBrowser(tab); + } + } + + preventUnloadTab() { + const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; + for (const tab of tabs) { + tab.zenIgnoreUnload = true; + } + } + + ignoreUnloadTab() { + const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; + for (const tab of tabs) { + tab.zenIgnoreUnload = false; + } + } + canUnloadTab(tab, currentTimestamp, excludedUrls) { if (tab.pinned || tab.selected || tab.multiselected || tab.hasAttribute("busy") || tab.hasAttribute("pending") - || !tab.linkedPanel || tab.splitView || tab.attention + || !tab.linkedPanel || tab.splitView || tab.attention || tab.soundPlaying + || tab.zenIgnoreUnload || excludedUrls.some(url => url.test(tab.linkedBrowser.currentURI.spec))) { return false; } diff --git a/src/ZenWorkspaces.mjs b/src/ZenWorkspaces.mjs index f154c7f..a076656 100644 --- a/src/ZenWorkspaces.mjs +++ b/src/ZenWorkspaces.mjs @@ -127,7 +127,7 @@ var ZenWorkspaces = { } }, - _kIcons: JSON.parse(Services.prefs.getStringPref("zen.workspaces.icons")).map((icon) => icon), + _kIcons: JSON.parse(Services.prefs.getStringPref("zen.workspaces.icons")).map((icon) => Array.from(icon)[0]), _initializeWorkspaceCreationIcons() { let container = document.getElementById('PanelUI-zen-workspaces-create-icons-container'); @@ -248,7 +248,7 @@ var ZenWorkspaces = { if (this.workspaceHasIcon(workspace)) { return workspace.icon; } - return workspace.name[0].toUpperCase(); + return Array.from(workspace.name)[0].toUpperCase(); }, get shouldShowContainers() {