diff --git a/l10n b/l10n index 6934ff4f1..5185d8bad 160000 --- a/l10n +++ b/l10n @@ -1 +1 @@ -Subproject commit 6934ff4f19c344da8fd89bd72c81517217c448f2 +Subproject commit 5185d8badc790814c015b306d456bd7e2233dde9 diff --git a/src/browser/app/profile/better-fox.js b/src/browser/app/profile/better-fox.js index 9afc6e887..7400a1926 100644 --- a/src/browser/app/profile/better-fox.js +++ b/src/browser/app/profile/better-fox.js @@ -13,7 +13,7 @@ /**************************************************************************** * Betterfox * * "Ad meliora" * - * version: 128 * + * version: 130 * * url: https://github.com/yokoffing/Betterfox * ****************************************************************************/ @@ -21,7 +21,7 @@ * SECTION: FASTFOX * ****************************************************************************/ /** GENERAL ***/ -pref("content.notify.interval", 100000); // (.10s); alt=500000 (.50s) +//pref("content.notify.interval", 100000); // (.10s); alt=500000 (.50s) /** GFX ***/ pref("gfx.canvas.accelerated.cache-items", 32768); @@ -37,8 +37,6 @@ pref("media.cache_readahead_limit", 9000); pref("media.cache_resume_threshold", 3600); pref("media.memory_caches_combined_limit_kb", 2560000); -pref("browser.cache.memory.max_entry_size", 0); - /** IMAGE CACHE ***/ pref("image.mem.decode_bytes_at_a_time", 32768); @@ -220,4 +218,4 @@ pref("layout.word_select.eat_space_to_next_word", false); /**************************************************************************** * END: BETTERFOX * -****************************************************************************/ \ No newline at end of file +****************************************************************************/ diff --git a/src/browser/app/profile/zen-browser.js b/src/browser/app/profile/zen-browser.js index 73db07d2c..58d0c48de 100644 --- a/src/browser/app/profile/zen-browser.js +++ b/src/browser/app/profile/zen-browser.js @@ -78,13 +78,15 @@ pref('zen.theme.content-element-separation', 8); // In pixels pref('zen.theme.toolbar-themed', true); pref('zen.theme.pill-button', false); pref('zen.view.compact', false); -pref('zen.view.compact.hide-toolbar', false); pref('zen.theme.color-prefs.amoled', false); pref('zen.theme.color-prefs.colorful', false); +pref('zen.view.compact.hide-tabbar', true); +pref('zen.view.compact.hide-toolbar', false); pref('zen.view.compact.toolbar-flash-popup', true); pref('zen.view.compact.toolbar-flash-popup.duration', 800); +pref('zen.view.compact.toolbar-hide-after-hover.duration', 1000); pref('zen.view.sidebar-height-throttle', 200); // in ms pref('zen.view.sidebar-expanded', false); @@ -109,6 +111,7 @@ pref('zen.sidebar.close-on-blur', true); // Zen Split View pref('zen.splitView.working', false); +pref('zen.splitView.min-resize-width', 7); // Zen Workspaces pref('zen.workspaces.enabled', true); @@ -144,6 +147,7 @@ pref('xpinstall.signatures.required', false); // Experimental Zen Features // Strategy to use for bytecode cache (Thanks https://github.com/gunir) pref('dom.script_loader.bytecode_cache.strategy', 2); +pref("dom.text_fragments.enabled", true); // Enable private suggestions pref('browser.search.suggest.enabled', true); diff --git a/src/browser/base/content/ZenStartup.mjs b/src/browser/base/content/ZenStartup.mjs index 59841011d..c3cd40a10 100644 --- a/src/browser/base/content/ZenStartup.mjs +++ b/src/browser/base/content/ZenStartup.mjs @@ -35,6 +35,7 @@ gBrowser.tabContainer.arrowScrollbox.smoothScroll = false; ZenWorkspaces.init(); + gZenUIManager.init(); gZenVerticalTabsManager.init(); gZenCompactModeManager.init(); gZenKeyboardShortcutsManager.init(); @@ -123,16 +124,23 @@ splitter.setAttribute('resizeafter', 'none'); toolbox.insertAdjacentElement('afterend', splitter); - this._moveWindowButtons(); this._addSidebarButtons(); this._hideToolbarButtons(); }, _moveWindowButtons() { - const windowControls = document.getElementById('titlebar-buttonbox-container'); - const toolboxIcons = document.getElementById('zen-sidebar-top-buttons'); - if (AppConstants.platform == 'macosx') { - toolboxIcons.prepend(windowControls); + + const windowControls = document.getElementsByClassName('titlebar-buttonbox-container'); + const toolboxIcons = document.getElementById('zen-sidebar-top-buttons-customization-target'); + if (AppConstants.platform === "macosx") { + for (let i = 0; i < windowControls.length; i++) { + if (i === 0) { + toolboxIcons.prepend(windowControls[i]); + continue; + } + windowControls[i].remove(); + } + } }, @@ -193,12 +201,20 @@ if (id === 'zen-workspaces-button' || !elem) continue; elem.setAttribute('removable', 'true'); } - CustomizableUI.registerArea('zen-sidebar-icons-wrapper', { - type: CustomizableUI.TYPE_TOOLBAR, - defaultPlacements: defaultSidebarIcons, - defaultCollapsed: null, - }); - CustomizableUI.registerToolbarNode(document.getElementById('zen-sidebar-icons-wrapper')); + + CustomizableUI.registerArea( + "zen-sidebar-icons-wrapper", + { + type: CustomizableUI.TYPE_TOOLBAR, + defaultPlacements: defaultSidebarIcons, + defaultCollapsed: null, + } + ); + CustomizableUI.registerToolbarNode( + document.getElementById('zen-sidebar-icons-wrapper') + ); + + this._moveWindowButtons(); }, 100); }, diff --git a/src/browser/base/content/ZenUIManager.mjs b/src/browser/base/content/ZenUIManager.mjs index 13b6a34cc..52d455be3 100644 --- a/src/browser/base/content/ZenUIManager.mjs +++ b/src/browser/base/content/ZenUIManager.mjs @@ -1,4 +1,12 @@ var gZenUIManager = { + _popupTrackingElements: [], + + init () { + + document.addEventListener('popupshowing', this.onPopupShowing.bind(this)); + document.addEventListener('popuphidden', this.onPopupHidden.bind(this)); + }, + openAndChangeToTab(url, options) { if (window.ownerGlobal.parent) { let tab = window.ownerGlobal.parent.gBrowser.addTrustedTab(url, options); @@ -24,6 +32,46 @@ var gZenUIManager = { createValidXULText(text) { return text.replace(/&/g, '&').replace(//g, '>'); }, + + /** + * Adds the 'has-popup-menu' attribute to the element when popup is opened on it. + * @param element element to track + */ + addPopupTrackingAttribute(element) { + this._popupTrackingElements.push(element); + }, + + removePopupTrackingAttribute(element) { + this._popupTrackingElements.remove(element); + }, + + onPopupShowing(showEvent) { + for (const el of this._popupTrackingElements) { + if (!el.contains(event.explicitOriginalTarget)) { + continue; + } + document.removeEventListener('mousemove', this.__removeHasPopupAttribute); + el.setAttribute('has-popup-menu', ''); + this.__currentPopup = showEvent.target; + this.__currentPopupTrackElement = el; + break; + } + }, + + onPopupHidden(hideEvent) { + if (!this.__currentPopup || this.__currentPopup !== hideEvent.target) { + return; + } + const element = this.__currentPopupTrackElement; + if (document.getElementById('main-window').matches(':hover')) { + element.removeAttribute('has-popup-menu'); + } else { + this.__removeHasPopupAttribute = () => element.removeAttribute('has-popup-menu'); + document.addEventListener('mousemove', this.__removeHasPopupAttribute, {once: true}); + } + this.__currentPopup = null; + this.__currentPopupTrackElement = null; + }, }; var gZenVerticalTabsManager = { @@ -33,6 +81,7 @@ var gZenVerticalTabsManager = { Services.prefs.addObserver('zen.tabs.vertical.right-side', updateEvent); Services.prefs.addObserver('zen.view.sidebar-expanded.max-width', updateEvent); Services.prefs.addObserver('zen.view.sidebar-expanded.on-hover', updateEvent); + gZenCompactModeManager.addEventListener(updateEvent); this._updateEvent(); this.initRightSideOrderContextMenu(); }, @@ -143,106 +192,3 @@ var gZenVerticalTabsManager = { Services.prefs.setBoolPref('zen.view.sidebar-expanded.on-hover', false); }, }; - -var gZenCompactModeManager = { - _flashSidebarTimeout: null, - - init() { - Services.prefs.addObserver('zen.view.compact', this._updateEvent.bind(this)); - Services.prefs.addObserver('zen.view.compact.toolbar-flash-popup.duration', this._updatedSidebarFlashDuration.bind(this)); - - addEventListener('popupshowing', this.keepSidebarVisibleOnContextMenu.bind(this)); - }, - - get prefefence() { - return Services.prefs.getBoolPref('zen.view.compact'); - }, - - set preference(value) { - Services.prefs.setBoolPref('zen.view.compact', value); - }, - - get sidebar() { - if (!this._sidebar) { - this._sidebar= document.getElementById('navigator-toolbox'); - } - return this._sidebar; - }, - - _updateEvent() { - Services.prefs.setBoolPref('zen.view.sidebar-expanded.on-hover', false); - }, - - toggle() { - this.preference = !this.prefefence; - }, - - _updatedSidebarFlashDuration() { - this._flashSidebarDuration = Services.prefs.getIntPref('zen.view.compact.toolbar-flash-popup.duration'); - }, - - toggleSidebar() { - this.sidebar.toggleAttribute('zen-user-show'); - }, - - get flashSidebarDuration() { - if (this._flashSidebarDuration) { - return this._flashSidebarDuration; - } - return Services.prefs.getIntPref('zen.view.compact.toolbar-flash-popup.duration'); - }, - - flashSidebar() { - let tabPanels = document.getElementById('tabbrowser-tabpanels'); - if (this.sidebar.matches(':hover') || tabPanels.matches("[zen-split-view='true']")) { - return; - } - if (this._flashSidebarTimeout) { - clearTimeout(this._flashSidebarTimeout); - } else { - window.requestAnimationFrame(() => this.sidebar.setAttribute('flash-popup', '')); - } - this._flashSidebarTimeout = setTimeout(() => { - window.requestAnimationFrame(() => { - this.sidebar.removeAttribute('flash-popup'); - this._flashSidebarTimeout = null; - }); - }, this.flashSidebarDuration); - }, - - keepSidebarVisibleOnContextMenu(event) { - if (!this.sidebar.contains(event.explicitOriginalTarget)) { - return; - } - this.sidebar.setAttribute('has-popup-menu', ''); - /* If the cursor is on the popup when it hides, the :hover effect will not be reapplied to the sidebar until the cursor moves, - to mitigate this: Wait for mousemove when popup item selected - */ - if (!this.__removeHasPopupAttribute) { - this.__removeHasPopupAttribute = () => this.sidebar.removeAttribute('has-popup-menu'); - } - removeEventListener('mousemove', this.__removeHasPopupAttribute); - - const waitForMouseMoveOnPopupSelect = (event) => { - if (event.target.tagName === 'menuitem') { - removeEventListener('click', waitForMouseMoveOnPopupSelect); - removeEventListener('popuphidden', removeHasPopupOnPopupHidden); - addEventListener('mousemove', this.__removeHasPopupAttribute, {once: true}); - } - } - const removeHasPopupOnPopupHidden = (hiddenEvent) => { - if (event.target === hiddenEvent.target) { - removeEventListener('click', waitForMouseMoveOnPopupSelect); - removeEventListener('popuphidden', removeHasPopupOnPopupHidden); - this.__removeHasPopupAttribute(); - } - } - addEventListener('click', waitForMouseMoveOnPopupSelect); - addEventListener('popuphidden', removeHasPopupOnPopupHidden); - }, - - toggleToolbar() { - let toolbar = document.getElementById('zen-appcontent-navbar-container'); - toolbar.toggleAttribute('zen-user-show'); - }, -}; diff --git a/src/browser/base/content/zen-assets.inc.xhtml b/src/browser/base/content/zen-assets.inc.xhtml index addf290d8..41068665d 100644 --- a/src/browser/base/content/zen-assets.inc.xhtml +++ b/src/browser/base/content/zen-assets.inc.xhtml @@ -28,6 +28,7 @@ window.addEventListener("DOMContentLoaded", async () => { // Theme importer always needs to be loaded first Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenThemesCommon.mjs"); Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenThemesImporter.mjs"); + Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenCompactMode.mjs"); Services.scriptloader.loadSubScript("chrome://browser/content/ZenUIManager.mjs"); Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenSidebarManager.mjs"); Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenWorkspaces.mjs"); diff --git a/src/browser/base/content/zen-assets.jar.inc.mn b/src/browser/base/content/zen-assets.jar.inc.mn index f6d5f10c5..3e828a6b1 100644 --- a/src/browser/base/content/zen-assets.jar.inc.mn +++ b/src/browser/base/content/zen-assets.jar.inc.mn @@ -3,6 +3,7 @@ content/browser/zenThemeModifier.js (content/zenThemeModifier.js) content/browser/ZenStartup.mjs (content/ZenStartup.mjs) content/browser/ZenUIManager.mjs (content/ZenUIManager.mjs) + content/browser/zen-components/ZenCompactMode.mjs (content/zen-components/src/ZenCompactMode.mjs) content/browser/zen-components/ZenViewSplitter.mjs (content/zen-components/src/ZenViewSplitter.mjs) content/browser/zen-components/ZenThemesCommon.mjs (content/zen-components/src/ZenThemesCommon.mjs) content/browser/zen-components/ZenWorkspaces.mjs (content/zen-components/src/ZenWorkspaces.mjs) diff --git a/src/browser/base/content/zen-components b/src/browser/base/content/zen-components index 3c66cbdc2..f56b8c0e5 160000 --- a/src/browser/base/content/zen-components +++ b/src/browser/base/content/zen-components @@ -1 +1 @@ -Subproject commit 3c66cbdc24936c4827443d6946baa708173c6d62 +Subproject commit f56b8c0e59a346bd0c2c36da89a23681a2721f32 diff --git a/src/browser/base/content/zen-sidebar-panel.inc.xhtml b/src/browser/base/content/zen-sidebar-panel.inc.xhtml index 4330ef51f..a1edc2aaa 100644 --- a/src/browser/base/content/zen-sidebar-panel.inc.xhtml +++ b/src/browser/base/content/zen-sidebar-panel.inc.xhtml @@ -1,4 +1,4 @@ - +