mirror of
				https://github.com/zen-browser/desktop.git
				synced 2025-10-26 12:27:50 +00:00 
			
		
		
		
	Compare commits
	
		
			29 Commits
		
	
	
		
			1.15b
			...
			new-toolti
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 439a27d947 | ||
|   | b204671931 | ||
|   | d035348896 | ||
|   | 72433745bc | ||
|   | 2436ada221 | ||
|   | 4a5141c15c | ||
|   | 1015537a91 | ||
|   | 89cafdaa0b | ||
|   | 3723517d7d | ||
|   | c095bc7604 | ||
|   | e312e3fe8d | ||
|   | 70aeebaf66 | ||
|   | f9ca9cc74c | ||
|   | d9646f939c | ||
|   | 8f0292d836 | ||
|   | 95b137ac13 | ||
|   | b1fcaeb97f | ||
|   | 31def1147a | ||
|   | 0a80765589 | ||
|   | e34a053dd0 | ||
|   | 5e790efdce | ||
|   | 005cdf53bd | ||
|   | 429f74a7c7 | ||
|   | 1f72765227 | ||
|   | 91f5e104d2 | ||
|   | 994741f323 | ||
|   | a4ba3340e1 | ||
|   | 5852b2aaa6 | ||
|   | 257547acbd | 
| @@ -34,8 +34,8 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne | |||||||
|  |  | ||||||
| ### Firefox Versions | ### Firefox Versions | ||||||
|  |  | ||||||
| - [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `142.0`! 🚀 | - [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `142.0.1`! 🚀 | ||||||
| - [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 142.0`! | - [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 142.0.1`! | ||||||
|  |  | ||||||
| ### Contributing | ### Contributing | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1 +1 @@ | |||||||
| 784e5dbc4955e29ee7a4e0b88adefdd230f2e9fe | df0d5e625b9e55c502d3e9e81b29a0d52d0f8d20 | ||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = إخفاء كليهما |     .label = إخفاء كليهما | ||||||
|     .accesskey = خ |     .accesskey = خ | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expand Sidebar |     .label = Expand Sidebar | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Amaga les dues |     .label = Amaga les dues | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Carpeta nova |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expandeix la barra lateral |     .label = Expandeix la barra lateral | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Skrýt obojí |     .label = Skrýt obojí | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Nová složka |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Zvětšit boční panel |     .label = Zvětšit boční panel | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Hide both |     .label = Hide both | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expand Sidebar |     .label = Expand Sidebar | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Skjul begge |     .label = Skjul begge | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Ny mappe |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Udvid Sidepanel |     .label = Udvid Sidepanel | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ zen-folders-search-placeholder = | |||||||
| zen-folders-panel-rename-folder =  | zen-folders-panel-rename-folder =  | ||||||
|     .label = Ordner umbenennen |     .label = Ordner umbenennen | ||||||
| zen-folders-panel-unpack-folder =  | zen-folders-panel-unpack-folder =  | ||||||
|     .label = Ordner entpacken |     .label = Ordner auflösen | ||||||
| zen-folders-new-subfolder =  | zen-folders-new-subfolder =  | ||||||
|     .label = Neuer Unterordner |     .label = Neuer Unterordner | ||||||
| zen-folders-panel-delete-folder =  | zen-folders-panel-delete-folder =  | ||||||
| @@ -15,7 +15,7 @@ zen-folders-panel-change-folder-space = | |||||||
| zen-folders-panel-change-icon-folder =  | zen-folders-panel-change-icon-folder =  | ||||||
|     .label = Symbol ändern |     .label = Symbol ändern | ||||||
| zen-folders-unload-all-tooltip =  | zen-folders-unload-all-tooltip =  | ||||||
|     .tooltiptext = Unload all tabs in this folder |     .tooltiptext = Alle Tabs in diesem Ordner entladen | ||||||
| zen-folders-unload-folder =  | zen-folders-unload-folder =  | ||||||
|     .label = Unload All Tabs |     .label = Alle Tabs entladen | ||||||
| zen-folders-search-no-results = Keine passenden Tabs gefunden 🤔 | zen-folders-search-no-results = Keine passenden Tabs gefunden 🤔 | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Beide ausblenden |     .label = Beide ausblenden | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Neuer Ordner |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Seitenleiste erweitern |     .label = Seitenleiste erweitern | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Απόκρυψη όλων |     .label = Απόκρυψη όλων | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Νέος φάκελος |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Επέκταση Πλαϊνής στήλης |     .label = Επέκταση Πλαϊνής στήλης | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Hide both |     .label = Hide both | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expand Sidebar |     .label = Expand Sidebar | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Hide both |     .label = Hide both | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder = | zen-toolbar-context-new-folder = | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
|  |  | ||||||
| sidebar-zen-expand = | sidebar-zen-expand = | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Ocultar ambas |     .label = Ocultar ambas | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Nueva carpeta |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expandir barra lateral |     .label = Expandir barra lateral | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Peida mõlemad |     .label = Peida mõlemad | ||||||
|     .accesskey = P |     .accesskey = P | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Laienda külgriba |     .label = Laienda külgriba | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Hide both |     .label = Hide both | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expand Sidebar |     .label = Expand Sidebar | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Piilota molemmat |     .label = Piilota molemmat | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expand Sidebar |     .label = Expand Sidebar | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ zen-layout-collapsed-toolbar = Barre d’outils réduite | |||||||
| sync-currently-syncing-workspaces = Espaces de travail | sync-currently-syncing-workspaces = Espaces de travail | ||||||
| sync-engine-workspaces =  | sync-engine-workspaces =  | ||||||
|     .label = Espaces de travail |     .label = Espaces de travail | ||||||
|     .tooltiptext = Synchroniser vos espaces de travail sur plusieurs appareils |     .tooltiptext = Synchroniser vos Espaces de travail sur plusieurs appareils | ||||||
|     .accesskey = W |     .accesskey = W | ||||||
| zen-glance-title = Aperçu | zen-glance-title = Aperçu | ||||||
| zen-glance-header = Paramètres généraux d’Aperçu | zen-glance-header = Paramètres généraux d’Aperçu | ||||||
| @@ -69,10 +69,10 @@ zen-pinned-tab-manager-reset-close-shortcut-option = | |||||||
| zen-pinned-tab-manager-close-close-shortcut-option =  | zen-pinned-tab-manager-close-close-shortcut-option =  | ||||||
|     .label = Fermer l’onglet |     .label = Fermer l’onglet | ||||||
| pane-zen-workspaces-header = Espaces de travail | pane-zen-workspaces-header = Espaces de travail | ||||||
| zen-settings-workspaces-header = Paramètres généraux des espaces de travail | zen-settings-workspaces-header = Paramètres généraux des Espaces de travail | ||||||
| zen-settings-workspaces-description = Avec des espaces de travail, vous pouvez avoir plusieurs sessions de navigation à la fois ! | zen-settings-workspaces-description = Avec les Espaces de travail, vous pouvez avoir plusieurs sessions de navigation à la fois ! | ||||||
| zen-settings-workspaces-enabled =  | zen-settings-workspaces-enabled =  | ||||||
|     .label = Activer les espaces de travail |     .label = Activer les Espaces de travail | ||||||
| zen-settings-workspaces-hide-default-container-indicator =  | zen-settings-workspaces-hide-default-container-indicator =  | ||||||
|     .label = Dans la barre d’onglets, masquer l’indicateur de conteneur par défaut |     .label = Dans la barre d’onglets, masquer l’indicateur de conteneur par défaut | ||||||
| zen-key-unsaved = Raccourci non sauvegardé ! Pour l’enregistrer, veuillez le resaisir et en appuyer sur Échap. | zen-key-unsaved = Raccourci non sauvegardé ! Pour l’enregistrer, veuillez le resaisir et en appuyer sur Échap. | ||||||
| @@ -99,7 +99,7 @@ zen-theme-disable-all-disabled = | |||||||
|     .title = Activer tous les mods |     .title = Activer tous les mods | ||||||
| zen-theme-marketplace-description = Trouvez et installez des mods à partir du magasin. | zen-theme-marketplace-description = Trouvez et installez des mods à partir du magasin. | ||||||
| zen-theme-marketplace-remove-button =  | zen-theme-marketplace-remove-button =  | ||||||
|     .label = Supprimer le thème |     .label = Supprimer le mod | ||||||
| zen-theme-marketplace-check-for-updates-button =  | zen-theme-marketplace-check-for-updates-button =  | ||||||
|     .label = Vérifier les mises à jour |     .label = Vérifier les mises à jour | ||||||
| zen-theme-marketplace-import-button =  | zen-theme-marketplace-import-button =  | ||||||
| @@ -113,9 +113,9 @@ zen-theme-marketplace-export-failure = Une erreur s'est produite lors de l'expor | |||||||
| zen-theme-marketplace-updates-success = Mods mis à jour avec succès | zen-theme-marketplace-updates-success = Mods mis à jour avec succès | ||||||
| zen-theme-marketplace-updates-failure = Impossible de trouver des mises à jour ! | zen-theme-marketplace-updates-failure = Impossible de trouver des mises à jour ! | ||||||
| zen-theme-marketplace-toggle-enabled-button =  | zen-theme-marketplace-toggle-enabled-button =  | ||||||
|     .title = Désactiver le thème |     .title = Désactiver le mod | ||||||
| zen-theme-marketplace-toggle-disabled-button =  | zen-theme-marketplace-toggle-disabled-button =  | ||||||
|     .title = Activer le thème |     .title = Activer le mod | ||||||
| zen-theme-marketplace-remove-confirmation = Êtes-vous sûr de vouloir supprimer ce mod ? | zen-theme-marketplace-remove-confirmation = Êtes-vous sûr de vouloir supprimer ce mod ? | ||||||
| zen-theme-marketplace-close-modal = Fermer | zen-theme-marketplace-close-modal = Fermer | ||||||
| zen-theme-marketplace-theme-header-title =  | zen-theme-marketplace-theme-header-title =  | ||||||
| @@ -128,7 +128,7 @@ pane-zen-marketplace-title = Mods Zen | |||||||
| zen-themes-auto-update =  | zen-themes-auto-update =  | ||||||
|     .label = Mettre à jour automatiquement les mods installés lors du démarrage |     .label = Mettre à jour automatiquement les mods installés lors du démarrage | ||||||
| zen-settings-workspaces-force-container-tabs-to-workspace =  | zen-settings-workspaces-force-container-tabs-to-workspace =  | ||||||
|     .label = À l'ouverture des onglets du conteneur, basculer vers l’espace de travail où le conteneur est défini par défaut |     .label = À l'ouverture des onglets du conteneur, basculer vers l’Espace de travail où le conteneur est défini par défaut | ||||||
| zen-theme-marketplace-link = Visiter le magasin | zen-theme-marketplace-link = Visiter le magasin | ||||||
| zen-dark-theme-styles-header = Styles de thème sombre | zen-dark-theme-styles-header = Styles de thème sombre | ||||||
| zen-dark-theme-styles-description = Personnalisez le thème sombre selon vos préférences | zen-dark-theme-styles-description = Personnalisez le thème sombre selon vos préférences | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Masquer les deux |     .label = Masquer les deux | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Nouveau dossier |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Étendre la barre latérale |     .label = Étendre la barre latérale | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-folders-panel-change-folder-space = | |||||||
| zen-folders-panel-change-icon-folder =  | zen-folders-panel-change-icon-folder =  | ||||||
|     .label = Athraigh Deilbhín |     .label = Athraigh Deilbhín | ||||||
| zen-folders-unload-all-tooltip =  | zen-folders-unload-all-tooltip =  | ||||||
|     .tooltiptext = Unload all tabs in this folder |     .tooltiptext = Díluchtaigh gach cluaisín sa bhfillteán seo | ||||||
| zen-folders-unload-folder =  | zen-folders-unload-folder =  | ||||||
|     .label = Unload All Tabs |     .label = Díluchtaigh Gach Cluaisín | ||||||
| zen-folders-search-no-results = Níl aon chluaisíní ann a mheaitseálann an cuardach sin 🤔 | zen-folders-search-no-results = Níl aon chluaisíní ann a mheaitseálann an cuardach sin 🤔 | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Folaigh an dá cheann |     .label = Folaigh an dá cheann | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Fillteán nua |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Barra Taoibh a Leathnú |     .label = Barra Taoibh a Leathnú | ||||||
|   | |||||||
| @@ -1,21 +1,21 @@ | |||||||
| zen-folders-search-placeholder =  | zen-folders-search-placeholder =  | ||||||
|     .placeholder = חיפוש { $folder-name }... |     .placeholder = חיפוש { $folder-name }... | ||||||
| zen-folders-panel-rename-folder =  | zen-folders-panel-rename-folder =  | ||||||
|     .label = Rename Folder |     .label = שינוי שם תיקייה | ||||||
| zen-folders-panel-unpack-folder =  | zen-folders-panel-unpack-folder =  | ||||||
|     .label = Unpack Folder |     .label = חילוץ תיקייה | ||||||
| zen-folders-new-subfolder =  | zen-folders-new-subfolder =  | ||||||
|     .label = New Subfolder |     .label = תת תיקייה חדשה | ||||||
| zen-folders-panel-delete-folder =  | zen-folders-panel-delete-folder =  | ||||||
|     .label = Delete Folder |     .label = מחיקת תיקייה | ||||||
| zen-folders-panel-convert-folder-to-space =  | zen-folders-panel-convert-folder-to-space =  | ||||||
|     .label = Convert folder to Space |     .label = המרת תיקייה לסביבה | ||||||
| zen-folders-panel-change-folder-space =  | zen-folders-panel-change-folder-space =  | ||||||
|     .label = Change Space... |     .label = שינוי סביבה... | ||||||
| zen-folders-panel-change-icon-folder =  | zen-folders-panel-change-icon-folder =  | ||||||
|     .label = Change Icon |     .label = שינוי סמל | ||||||
| zen-folders-unload-all-tooltip =  | zen-folders-unload-all-tooltip =  | ||||||
|     .tooltiptext = Unload all tabs in this folder |     .tooltiptext = פינוי כל הכרטיסייות בתיקייה הזו | ||||||
| zen-folders-unload-folder =  | zen-folders-unload-folder =  | ||||||
|     .label = Unload All Tabs |     .label = פינוי כל הכרטיסייות | ||||||
| zen-folders-search-no-results = No tabs matching that search 🤔 | zen-folders-search-no-results = אין כרטיסיות שתואמות לחיפוש 🤔 | ||||||
|   | |||||||
| @@ -45,6 +45,6 @@ zen-close-label = סגור | |||||||
| zen-singletoolbar-urlbar-placeholder-with-name =  | zen-singletoolbar-urlbar-placeholder-with-name =  | ||||||
|     .placeholder = חיפוש... |     .placeholder = חיפוש... | ||||||
| zen-icons-picker-emoji =  | zen-icons-picker-emoji =  | ||||||
|     .label = Emojis |     .label = אימוג'ים | ||||||
| zen-icons-picker-svg =  | zen-icons-picker-svg =  | ||||||
|     .label = Icons |     .label = סמלים | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = הסתרת שניהם |     .label = הסתרת שניהם | ||||||
|     .accesskey = י |     .accesskey = י | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = תיקייה חדשה |     .label = New Folder | ||||||
|     .accesskey = מ |     .accesskey = מ | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = הרחבת סרגל צדדי |     .label = הרחבת סרגל צדדי | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ zen-panel-ui-workspaces-text = סביבות עבודה | |||||||
| zen-panel-ui-workspaces-create =  | zen-panel-ui-workspaces-create =  | ||||||
|     .label = צור סביבה |     .label = צור סביבה | ||||||
| zen-panel-ui-folder-create =  | zen-panel-ui-folder-create =  | ||||||
|     .label = Create Folder |     .label = יצירת תיקייה | ||||||
| zen-workspaces-panel-context-delete =  | zen-workspaces-panel-context-delete =  | ||||||
|     .label = מחק סיבת עבודה |     .label = מחק סיבת עבודה | ||||||
|     .accesskey = ג |     .accesskey = ג | ||||||
| @@ -48,4 +48,4 @@ zen-workspace-creation-profile = פרופיל | |||||||
| zen-workspace-creation-header = צור סביבה | zen-workspace-creation-header = צור סביבה | ||||||
| zen-workspace-creation-label = סביבות משומשות לסידור כרטיסיות והפעלות. | zen-workspace-creation-label = סביבות משומשות לסידור כרטיסיות והפעלות. | ||||||
| zen-workspaces-delete-workspace-title = Delete Workspace? | zen-workspaces-delete-workspace-title = Delete Workspace? | ||||||
| zen-workspaces-delete-workspace-body = Are you sure you want to delete { $name }? This action cannot be undone. | zen-workspaces-delete-workspace-body = האם ברצונך למחוק { $name }? פעולה זו לא ניתנת לביטול. | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Mindkettő elrejtése |     .label = Mindkettő elrejtése | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Új mappa |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Oldalsáv kibontása |     .label = Oldalsáv kibontása | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-folders-panel-change-folder-space = | |||||||
| zen-folders-panel-change-icon-folder =  | zen-folders-panel-change-icon-folder =  | ||||||
|     .label = Ubah Ikon |     .label = Ubah Ikon | ||||||
| zen-folders-unload-all-tooltip =  | zen-folders-unload-all-tooltip =  | ||||||
|     .tooltiptext = Unload all tabs in this folder |     .tooltiptext = Lepaskan semua tab di folder ini | ||||||
| zen-folders-unload-folder =  | zen-folders-unload-folder =  | ||||||
|     .label = Unload All Tabs |     .label = Lepaskan Semua Tab | ||||||
| zen-folders-search-no-results = Tidak ada tab yang cocok 🤔 | zen-folders-search-no-results = Tidak ada tab yang cocok 🤔 | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Sembunyikan keduanya |     .label = Sembunyikan keduanya | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Folder baru |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Perluas Bilah Sisi |     .label = Perluas Bilah Sisi | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Hide both |     .label = Hide both | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expand Sidebar |     .label = Expand Sidebar | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Nascondi entrambi |     .label = Nascondi entrambi | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Nuova cartella |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Espandi barra laterale |     .label = Espandi barra laterale | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = 両方隠す |     .label = 両方隠す | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = サイドバーを展開する |     .label = サイドバーを展開する | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = 둘 다 숨기기 |     .label = 둘 다 숨기기 | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = 새 폴더 |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = 사이드바 확장 |     .label = 사이드바 확장 | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Slėpti abi |     .label = Slėpti abi | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Naujas aplankas |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Išskleisti šoninę juostą |     .label = Išskleisti šoninę juostą | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Beide verbergen |     .label = Beide verbergen | ||||||
|     .accesskey = U |     .accesskey = U | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Nieuwe map |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Zijbalk uitklappen |     .label = Zijbalk uitklappen | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Hide both |     .label = Hide both | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expand Sidebar |     .label = Expand Sidebar | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Ukryj oba |     .label = Ukryj oba | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Nowy folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Rozwiń panel boczny |     .label = Rozwiń panel boczny | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Esconder os dois |     .label = Esconder os dois | ||||||
|     .accesskey = A |     .accesskey = A | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Nova pasta |     .label = Nova Pasta | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expandir barra lateral |     .label = Expandir barra lateral | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Ocultar ambas |     .label = Ocultar ambas | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Nova pasta |     .label = Nova Pasta | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expandir Barra Lateral |     .label = Expandir Barra Lateral | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Скрыть оба |     .label = Скрыть оба | ||||||
|     .accesskey = Н |     .accesskey = Н | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Новая папка |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Развернуть боковую панель |     .label = Развернуть боковую панель | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Dölj båda |     .label = Dölj båda | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expand Sidebar |     .label = Expand Sidebar | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Hide both |     .label = Hide both | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Expand Sidebar |     .label = Expand Sidebar | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = İkisini de Gizle |     .label = İkisini de Gizle | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Yeni klasör |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Kenar Çubuğunu Genişlet |     .label = Kenar Çubuğunu Genişlet | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Приховувати обидві |     .label = Приховувати обидві | ||||||
|     .accesskey = Н |     .accesskey = Н | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Нова тека |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Розгорнути бічну панель |     .label = Розгорнути бічну панель | ||||||
|   | |||||||
| @@ -97,7 +97,7 @@ zen-theme-disable-all-enabled = | |||||||
|     .title = Tắt tất cả tùy chỉnh |     .title = Tắt tất cả tùy chỉnh | ||||||
| zen-theme-disable-all-disabled =  | zen-theme-disable-all-disabled =  | ||||||
|     .title = Bật tất cả tùy chỉnh |     .title = Bật tất cả tùy chỉnh | ||||||
| zen-theme-marketplace-description = Tìm và cài đặt tùy chỉnh từ cửa hàng. | zen-theme-marketplace-description = Tìm và cài đặt tinh chỉnh từ cửa hàng. | ||||||
| zen-theme-marketplace-remove-button =  | zen-theme-marketplace-remove-button =  | ||||||
|     .label = Xóa tùy chỉnh |     .label = Xóa tùy chỉnh | ||||||
| zen-theme-marketplace-check-for-updates-button =  | zen-theme-marketplace-check-for-updates-button =  | ||||||
| @@ -111,7 +111,7 @@ zen-theme-marketplace-import-failure = Có lỗi xảy ra khi nhập các tùy c | |||||||
| zen-theme-marketplace-export-success = Các tùy chỉnh được xuất thành công | zen-theme-marketplace-export-success = Các tùy chỉnh được xuất thành công | ||||||
| zen-theme-marketplace-export-failure = Có lỗi xảy ra khi xuất các tùy chỉnh | zen-theme-marketplace-export-failure = Có lỗi xảy ra khi xuất các tùy chỉnh | ||||||
| zen-theme-marketplace-updates-success = Cập nhật tùy chỉnh thành công | zen-theme-marketplace-updates-success = Cập nhật tùy chỉnh thành công | ||||||
| zen-theme-marketplace-updates-failure = Không có cập nhật mới | zen-theme-marketplace-updates-failure = Không có cập nhật mới! | ||||||
| zen-theme-marketplace-toggle-enabled-button =  | zen-theme-marketplace-toggle-enabled-button =  | ||||||
|     .title = Tắt các tùy chỉnh |     .title = Tắt các tùy chỉnh | ||||||
| zen-theme-marketplace-toggle-disabled-button =  | zen-theme-marketplace-toggle-disabled-button =  | ||||||
| @@ -126,7 +126,7 @@ zen-theme-marketplace-input-default-placeholder = | |||||||
|     .placeholder = Gõ gì đó đi... |     .placeholder = Gõ gì đó đi... | ||||||
| pane-zen-marketplace-title = Zen Mods | pane-zen-marketplace-title = Zen Mods | ||||||
| zen-themes-auto-update =  | zen-themes-auto-update =  | ||||||
|     .label = Tự động câmpj nhất các tùy chỉnh khi mở trình duyệt |     .label = Tự động cập nhật các tùy chỉnh khi mở trình duyệt | ||||||
| zen-settings-workspaces-force-container-tabs-to-workspace =  | zen-settings-workspaces-force-container-tabs-to-workspace =  | ||||||
|     .label = Switch to workspace where container is set as default when opening container tabs |     .label = Switch to workspace where container is set as default when opening container tabs | ||||||
| zen-theme-marketplace-link = Vào cửa hàng | zen-theme-marketplace-link = Vào cửa hàng | ||||||
| @@ -139,7 +139,7 @@ zen-compact-mode-styles-left = Ẩn thanh tab | |||||||
| zen-compact-mode-styles-top = Ẩn thanh trên cùng | zen-compact-mode-styles-top = Ẩn thanh trên cùng | ||||||
| zen-compact-mode-styles-both = Ẩn cả hai | zen-compact-mode-styles-both = Ẩn cả hai | ||||||
| zen-urlbar-title = Thanh đường dẫn | zen-urlbar-title = Thanh đường dẫn | ||||||
| zen-urlbar-header = Thiệt lập chung cho thanh đường dẫn | zen-urlbar-header = Thiết lập chung cho thanh đường dẫn | ||||||
| zen-urlbar-description = Tùy chỉnh thanh đường dẫn theo sở thích | zen-urlbar-description = Tùy chỉnh thanh đường dẫn theo sở thích | ||||||
| zen-urlbar-behavior-label = Hành vi thanh đường dẫn | zen-urlbar-behavior-label = Hành vi thanh đường dẫn | ||||||
| zen-urlbar-behavior-normal =  | zen-urlbar-behavior-normal =  | ||||||
| @@ -176,7 +176,7 @@ zen-key-quick-restart = Khởi động lại nhanh | |||||||
| zen-window-new-shortcut = Cửa sổ mới | zen-window-new-shortcut = Cửa sổ mới | ||||||
| zen-tab-new-shortcut = Tab mới | zen-tab-new-shortcut = Tab mới | ||||||
| zen-key-redo = Hoàn tác | zen-key-redo = Hoàn tác | ||||||
| zen-restore-last-closed-tab-shortcut = Khôi phục lại tab gần nhất đã đóng | zen-restore-last-closed-tab-shortcut = Khôi phục lại thẻ gần nhất đã đóng | ||||||
| zen-location-open-shortcut = Mở đường dẫn | zen-location-open-shortcut = Mở đường dẫn | ||||||
| zen-location-open-shortcut-alt = Mở tại (Alt) | zen-location-open-shortcut-alt = Mở tại (Alt) | ||||||
| zen-key-undo-close-window = Mở lại cửa sổ đã đóng | zen-key-undo-close-window = Mở lại cửa sổ đã đóng | ||||||
|   | |||||||
| @@ -3,9 +3,9 @@ zen-folders-search-placeholder = | |||||||
| zen-folders-panel-rename-folder =  | zen-folders-panel-rename-folder =  | ||||||
|     .label = Đổi tên thư mục thẻ |     .label = Đổi tên thư mục thẻ | ||||||
| zen-folders-panel-unpack-folder =  | zen-folders-panel-unpack-folder =  | ||||||
|     .label = Unpack Folder |     .label = Giải thoát thư mục | ||||||
| zen-folders-new-subfolder =  | zen-folders-new-subfolder =  | ||||||
|     .label = New Subfolder |     .label = Tạo thư mục con | ||||||
| zen-folders-panel-delete-folder =  | zen-folders-panel-delete-folder =  | ||||||
|     .label = Xóa thư mục thẻ |     .label = Xóa thư mục thẻ | ||||||
| zen-folders-panel-convert-folder-to-space =  | zen-folders-panel-convert-folder-to-space =  | ||||||
| @@ -15,7 +15,7 @@ zen-folders-panel-change-folder-space = | |||||||
| zen-folders-panel-change-icon-folder =  | zen-folders-panel-change-icon-folder =  | ||||||
|     .label = Đổi biểu tượng thư mục thẻ |     .label = Đổi biểu tượng thư mục thẻ | ||||||
| zen-folders-unload-all-tooltip =  | zen-folders-unload-all-tooltip =  | ||||||
|     .tooltiptext = Unload all tabs in this folder |     .tooltiptext = Tải lại tất cả các thẻ trong thư mục | ||||||
| zen-folders-unload-folder =  | zen-folders-unload-folder =  | ||||||
|     .label = Unload All Tabs |     .label = Tải lại tất cả các thẻ | ||||||
| zen-folders-search-no-results = Không có thẻ nào trùng với tìm kiếm 🤔 | zen-folders-search-no-results = Không có thẻ nào trùng với tìm kiếm 🤔 | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = Ẩn cả hai |     .label = Ẩn cả hai | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = Thư mực thẻ mới |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = Mở rộng thanh bên |     .label = Mở rộng thanh bên | ||||||
|   | |||||||
| @@ -48,4 +48,4 @@ zen-workspace-creation-profile = Hồ sơ | |||||||
| zen-workspace-creation-header = Tạo không gian làm việc | zen-workspace-creation-header = Tạo không gian làm việc | ||||||
| zen-workspace-creation-label = Không gian làm việc sẽ là nơi để bạn chứa các trang web và lượt truy cập của bạn. | zen-workspace-creation-label = Không gian làm việc sẽ là nơi để bạn chứa các trang web và lượt truy cập của bạn. | ||||||
| zen-workspaces-delete-workspace-title = Delete Workspace? | zen-workspaces-delete-workspace-title = Delete Workspace? | ||||||
| zen-workspaces-delete-workspace-body = Are you sure you want to delete { $name }? This action cannot be undone. | zen-workspaces-delete-workspace-body = Bạn có chắc là bạn muốn xóa { $name }? Thao tác này sẽ không được hoàn lại. | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = 两者都隐藏 |     .label = 两者都隐藏 | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = 新建文件夹 |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = 展开侧边栏 |     .label = 展开侧边栏 | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ zen-toolbar-context-compact-mode-hide-both = | |||||||
|     .label = 兩者皆隱藏 |     .label = 兩者皆隱藏 | ||||||
|     .accesskey = H |     .accesskey = H | ||||||
| zen-toolbar-context-new-folder =  | zen-toolbar-context-new-folder =  | ||||||
|     .label = New folder |     .label = New Folder | ||||||
|     .accesskey = N |     .accesskey = N | ||||||
| sidebar-zen-expand =  | sidebar-zen-expand =  | ||||||
|     .label = 展開側邊欄 |     .label = 展開側邊欄 | ||||||
|   | |||||||
| @@ -24,5 +24,4 @@ | |||||||
|  |  | ||||||
| - name: zen.injections.match-urls | - name: zen.injections.match-urls | ||||||
|   value: 'http://localhost/*' |   value: 'http://localhost/*' | ||||||
|   locked: true |  | ||||||
|   condition: '!defined(MOZILLA_OFFICIAL)' |   condition: '!defined(MOZILLA_OFFICIAL)' | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ | |||||||
|   value: true |   value: true | ||||||
|  |  | ||||||
| - name: browser.urlbar.maxRichResults | - name: browser.urlbar.maxRichResults | ||||||
|   value: 5 |   value: 6 | ||||||
|  |  | ||||||
| # Enable private suggestions | # Enable private suggestions | ||||||
| - name: browser.search.suggest.enabled | - name: browser.search.suggest.enabled | ||||||
|   | |||||||
| @@ -38,7 +38,6 @@ | |||||||
|   <menuseparator /> |   <menuseparator /> | ||||||
|   <menuitem id="context_zenFolderUnloadAll" data-l10n-id="zen-folders-unload-folder"/> |   <menuitem id="context_zenFolderUnloadAll" data-l10n-id="zen-folders-unload-folder"/> | ||||||
|   <menuitem id="context_zenFolderNewSubfolder" data-l10n-id="zen-folders-new-subfolder"/> |   <menuitem id="context_zenFolderNewSubfolder" data-l10n-id="zen-folders-new-subfolder"/> | ||||||
|   <menuitem id="context_zenFolderUnpack" data-l10n-id="zen-folders-panel-unpack-folder"/> |  | ||||||
|   <menuseparator /> |   <menuseparator /> | ||||||
|   <menu id="context_zenChangeFolderSpace" |   <menu id="context_zenChangeFolderSpace" | ||||||
|     data-l10n-id="zen-folders-panel-change-folder-space"> |     data-l10n-id="zen-folders-panel-change-folder-space"> | ||||||
| @@ -46,5 +45,6 @@ | |||||||
|   </menu> |   </menu> | ||||||
|   <menuitem id="context_zenFolderToSpace" data-l10n-id="zen-folders-panel-convert-folder-to-space" /> |   <menuitem id="context_zenFolderToSpace" data-l10n-id="zen-folders-panel-convert-folder-to-space" /> | ||||||
|   <menuseparator /> |   <menuseparator /> | ||||||
|  |   <menuitem id="context_zenFolderUnpack" data-l10n-id="zen-folders-panel-unpack-folder"/> | ||||||
|   <menuitem id="context_zenFolderDelete" data-l10n-id="zen-folders-panel-delete-folder"/> |   <menuitem id="context_zenFolderDelete" data-l10n-id="zen-folders-panel-delete-folder"/> | ||||||
| </menupopup> | </menupopup> | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml | diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml | ||||||
| index f9129fb171362e81369056923bf25acbb87d2ad8..924bcd2cd66a5dfcf9c45aac0c63cd0257c21a2c 100644 | index 66ce978d9b022285dea67fdb75b3c005adb05d9b..db61587570ca18403a82ea6796a756d403cc207e 100644 | ||||||
| --- a/browser/components/preferences/main.inc.xhtml | --- a/browser/components/preferences/main.inc.xhtml | ||||||
| +++ b/browser/components/preferences/main.inc.xhtml | +++ b/browser/components/preferences/main.inc.xhtml | ||||||
| @@ -29,6 +29,9 @@ | @@ -29,6 +29,9 @@ | ||||||
| @@ -12,23 +12,17 @@ index f9129fb171362e81369056923bf25acbb87d2ad8..924bcd2cd66a5dfcf9c45aac0c63cd02 | |||||||
|  #ifdef XP_WIN |  #ifdef XP_WIN | ||||||
|      <hbox id="windowsLaunchOnLoginBox" align="center" hidden="true"> |      <hbox id="windowsLaunchOnLoginBox" align="center" hidden="true"> | ||||||
|        <checkbox id="windowsLaunchOnLogin" |        <checkbox id="windowsLaunchOnLogin" | ||||||
| @@ -186,6 +189,7 @@ | @@ -188,7 +191,8 @@ | ||||||
|  </groupbox> |  | ||||||
|   |  | ||||||
|  <!-- Browser layout --> |  <!-- Browser layout --> | ||||||
| +#if 0 |  | ||||||
|  <groupbox data-category="paneGeneral" |  <groupbox data-category="paneGeneral" | ||||||
|            data-subcategory="layout" |            data-subcategory="layout" | ||||||
|            hidden="true"> | -          hidden="true"> | ||||||
| @@ -201,6 +205,7 @@ | +          hidden="true" | ||||||
|              preference="sidebar.revamp"/> | +          style="display: none !important;"> | ||||||
|    <description class="indent" data-l10n-id="browser-layout-show-sidebar-desc"></description> |    <label><html:h2 data-l10n-id="browser-layout-header"/></label> | ||||||
|  </groupbox> |    <radiogroup id="browserLayoutRadioGroup" preference="sidebar.verticalTabs"> | ||||||
| +#endif |      <radio id="browserLayoutHorizontalTabs" data-l10n-id="browser-layout-horizontal-tabs" value="false"/> | ||||||
|   | @@ -419,6 +423,7 @@ | ||||||
|  <hbox id="languageAndAppearanceCategory" |  | ||||||
|        class="subcategory" |  | ||||||
| @@ -421,6 +426,7 @@ |  | ||||||
|                languages-customize-add.label, |                languages-customize-add.label, | ||||||
|              " /> |              " /> | ||||||
|    </hbox> |    </hbox> | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs | diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs | ||||||
| index e954a8df26ed84731b08b151f90a758206946582..5b8013c71c6b50579668d16a5f7d5a82b5d43e4d 100644 | index e954a8df26ed84731b08b151f90a758206946582..64ab1cce10324d574b49fe861975188c292756c3 100644 | ||||||
| --- a/browser/components/sessionstore/SessionStore.sys.mjs | --- a/browser/components/sessionstore/SessionStore.sys.mjs | ||||||
| +++ b/browser/components/sessionstore/SessionStore.sys.mjs | +++ b/browser/components/sessionstore/SessionStore.sys.mjs | ||||||
| @@ -2135,7 +2135,6 @@ var SessionStoreInternal = { | @@ -2135,7 +2135,6 @@ var SessionStoreInternal = { | ||||||
| @@ -143,3 +143,12 @@ index e954a8df26ed84731b08b151f90a758206946582..5b8013c71c6b50579668d16a5f7d5a82 | |||||||
|   |   | ||||||
|      if (tabData.pinned) { |      if (tabData.pinned) { | ||||||
|        tabbrowser.pinTab(tab); |        tabbrowser.pinTab(tab); | ||||||
|  | @@ -7266,7 +7289,7 @@ var SessionStoreInternal = { | ||||||
|  |   | ||||||
|  |        let groupsToSave = new Map(); | ||||||
|  |        for (let tIndex = 0; tIndex < window.tabs.length; ) { | ||||||
|  | -        if (window.tabs[tIndex].pinned) { | ||||||
|  | +        if (window.tabs[tIndex].pinned && false) { | ||||||
|  |            // Adjust window.selected | ||||||
|  |            if (tIndex + 1 < window.selected) { | ||||||
|  |              window.selected -= 1; | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| 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 d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc58e2af77 100644 | index d80a66a01002e78a9c65545d08fe786328ddf124..c5c079ac5218f051407b27c6edbd4ba6fe685e62 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 | ||||||
| @@ -422,15 +422,60 @@ | @@ -422,15 +422,60 @@ | ||||||
| @@ -391,10 +391,10 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc | |||||||
| +            gZenWorkspaces._initialTab._shouldRemove = true; | +            gZenWorkspaces._initialTab._shouldRemove = true; | ||||||
| +          } | +          } | ||||||
| +        } | +        } | ||||||
| +      } |        } | ||||||
| +      else { | +      else { | ||||||
| +        gZenWorkspaces._tabToRemoveForEmpty = this.selectedTab; | +        gZenWorkspaces._tabToRemoveForEmpty = this.selectedTab; | ||||||
|        } | +      } | ||||||
| +      this._hasAlreadyInitializedZenSessionStore = true; | +      this._hasAlreadyInitializedZenSessionStore = true; | ||||||
|   |   | ||||||
|        if (tabs.length > 1 || !tabs[0].selected) { |        if (tabs.length > 1 || !tabs[0].selected) { | ||||||
| @@ -623,11 +623,13 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc | |||||||
|      } |      } | ||||||
|   |   | ||||||
|      /** |      /** | ||||||
| @@ -6049,7 +6181,7 @@ | @@ -6048,8 +6180,8 @@ | ||||||
|  |        } | ||||||
|   |   | ||||||
|        // Don't allow mixing pinned and unpinned tabs. |        // Don't allow mixing pinned and unpinned tabs. | ||||||
|        if (this.isTab(element) && element.pinned) { | -      if (this.isTab(element) && element.pinned) { | ||||||
| -        tabIndex = Math.min(tabIndex, this.pinnedTabCount - 1); | -        tabIndex = Math.min(tabIndex, this.pinnedTabCount - 1); | ||||||
|  | +      if (element.pinned) { | ||||||
| +        tabIndex = element.hasAttribute('zen-essential') ? Math.min(tabIndex, this._numZenEssentials - 1) : Math.min(Math.max(tabIndex, this._numZenEssentials), this.pinnedTabCount - 1); | +        tabIndex = element.hasAttribute('zen-essential') ? Math.min(tabIndex, this._numZenEssentials - 1) : Math.min(Math.max(tabIndex, this._numZenEssentials), this.pinnedTabCount - 1); | ||||||
|        } else { |        } else { | ||||||
|          tabIndex = Math.max(tabIndex, this.pinnedTabCount); |          tabIndex = Math.max(tabIndex, this.pinnedTabCount); | ||||||
| @@ -651,7 +653,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc | |||||||
|            if (neighbor && this.isTab(element) && tabIndex > element._tPos) { |            if (neighbor && this.isTab(element) && tabIndex > element._tPos) { | ||||||
|              neighbor.after(element); |              neighbor.after(element); | ||||||
|            } else { |            } else { | ||||||
| @@ -6136,22 +6274,23 @@ | @@ -6136,23 +6274,28 @@ | ||||||
|      #moveTabNextTo(element, targetElement, moveBefore = false, metricsContext) { |      #moveTabNextTo(element, targetElement, moveBefore = false, metricsContext) { | ||||||
|        if (this.isTabGroupLabel(targetElement)) { |        if (this.isTabGroupLabel(targetElement)) { | ||||||
|          targetElement = targetElement.group; |          targetElement = targetElement.group; | ||||||
| @@ -679,9 +681,14 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc | |||||||
| -        targetElement = this.tabs[this.pinnedTabCount - 1]; | -        targetElement = this.tabs[this.pinnedTabCount - 1]; | ||||||
| +        targetElement = this.tabsWithoutGlance[this.pinnedTabCount - 1]; | +        targetElement = this.tabsWithoutGlance[this.pinnedTabCount - 1]; | ||||||
|          moveBefore = false; |          moveBefore = false; | ||||||
|  | +        if (!this.visibleTabs.includes(targetElement)) { | ||||||
|  | +          targetElement = gZenWorkspaces.pinnedTabsContainer.querySelector('.pinned-tabs-container-separator') | ||||||
|  | +          moveBefore = true; | ||||||
|  | +        } | ||||||
|        } else if (!element.pinned && targetElement && targetElement.pinned) { |        } else if (!element.pinned && targetElement && targetElement.pinned) { | ||||||
|          // If the caller asks to move an unpinned element next to a pinned |          // If the caller asks to move an unpinned element next to a pinned | ||||||
| @@ -6165,14 +6304,34 @@ |          // tab, move the unpinned element to be the first unpinned element | ||||||
|  | @@ -6165,14 +6308,34 @@ | ||||||
|          //    move the tab group right before the first unpinned tab. |          //    move the tab group right before the first unpinned tab. | ||||||
|          // 4. Moving a tab group and the first unpinned tab is grouped: |          // 4. Moving a tab group and the first unpinned tab is grouped: | ||||||
|          //    move the tab group right before the first unpinned tab's tab group. |          //    move the tab group right before the first unpinned tab's tab group. | ||||||
| @@ -717,7 +724,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc | |||||||
|          element.pinned |          element.pinned | ||||||
|            ? this.tabContainer.pinnedTabsContainer |            ? this.tabContainer.pinnedTabsContainer | ||||||
|            : this.tabContainer; |            : this.tabContainer; | ||||||
| @@ -6181,7 +6340,7 @@ | @@ -6181,7 +6344,7 @@ | ||||||
|          element, |          element, | ||||||
|          () => { |          () => { | ||||||
|            if (moveBefore) { |            if (moveBefore) { | ||||||
| @@ -726,7 +733,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc | |||||||
|            } else if (targetElement) { |            } else if (targetElement) { | ||||||
|              targetElement.after(element); |              targetElement.after(element); | ||||||
|            } else { |            } else { | ||||||
| @@ -6227,10 +6386,10 @@ | @@ -6227,10 +6390,10 @@ | ||||||
|       * @param {TabMetricsContext} [metricsContext] |       * @param {TabMetricsContext} [metricsContext] | ||||||
|       */ |       */ | ||||||
|      moveTabToGroup(aTab, aGroup, metricsContext) { |      moveTabToGroup(aTab, aGroup, metricsContext) { | ||||||
| @@ -739,7 +746,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc | |||||||
|          return; |          return; | ||||||
|        } |        } | ||||||
|        if (aTab.group && aTab.group.id === aGroup.id) { |        if (aTab.group && aTab.group.id === aGroup.id) { | ||||||
| @@ -6324,6 +6483,10 @@ | @@ -6324,6 +6487,10 @@ | ||||||
|   |   | ||||||
|        moveActionCallback(); |        moveActionCallback(); | ||||||
|   |   | ||||||
| @@ -750,7 +757,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc | |||||||
|        // Clear tabs cache after moving nodes because the order of tabs may have |        // Clear tabs cache after moving nodes because the order of tabs may have | ||||||
|        // changed. |        // changed. | ||||||
|        this.tabContainer._invalidateCachedTabs(); |        this.tabContainer._invalidateCachedTabs(); | ||||||
| @@ -7221,7 +7384,7 @@ | @@ -7221,7 +7388,7 @@ | ||||||
|              // preventDefault(). It will still raise the window if appropriate. |              // preventDefault(). It will still raise the window if appropriate. | ||||||
|              break; |              break; | ||||||
|            } |            } | ||||||
| @@ -759,7 +766,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc | |||||||
|            window.focus(); |            window.focus(); | ||||||
|            aEvent.preventDefault(); |            aEvent.preventDefault(); | ||||||
|            break; |            break; | ||||||
| @@ -8166,6 +8329,7 @@ | @@ -8166,6 +8333,7 @@ | ||||||
|              aWebProgress.isTopLevel |              aWebProgress.isTopLevel | ||||||
|            ) { |            ) { | ||||||
|              this.mTab.setAttribute("busy", "true"); |              this.mTab.setAttribute("busy", "true"); | ||||||
| @@ -767,7 +774,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc | |||||||
|              gBrowser._tabAttrModified(this.mTab, ["busy"]); |              gBrowser._tabAttrModified(this.mTab, ["busy"]); | ||||||
|              this.mTab._notselectedsinceload = !this.mTab.selected; |              this.mTab._notselectedsinceload = !this.mTab.selected; | ||||||
|            } |            } | ||||||
| @@ -9157,7 +9321,7 @@ var TabContextMenu = { | @@ -9157,7 +9325,7 @@ var TabContextMenu = { | ||||||
|      ); |      ); | ||||||
|      contextUnpinSelectedTabs.hidden = |      contextUnpinSelectedTabs.hidden = | ||||||
|        !this.contextTab.pinned || !this.multiselected; |        !this.contextTab.pinned || !this.multiselected; | ||||||
| @@ -776,7 +783,7 @@ index d80a66a01002e78a9c65545d08fe786328ddf124..4adabe030bfb322db1a9c95f71eb1adc | |||||||
|      // Build Ask Chat items |      // Build Ask Chat items | ||||||
|      TabContextMenu.GenAI.buildTabMenu( |      TabContextMenu.GenAI.buildTabMenu( | ||||||
|        document.getElementById("context_askChat"), |        document.getElementById("context_askChat"), | ||||||
| @@ -9476,6 +9640,7 @@ var TabContextMenu = { | @@ -9476,6 +9644,7 @@ var TabContextMenu = { | ||||||
|          ) |          ) | ||||||
|        ); |        ); | ||||||
|      } else { |      } else { | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js | diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js | ||||||
| index caea196b22b4689f55780a528661d87b52f4e728..c107c803d0820a209c0859745dcc8370294eb7b2 100644 | index caea196b22b4689f55780a528661d87b52f4e728..729848f1d3856bc4a5225e1a83cc10ef22819ca1 100644 | ||||||
| --- a/browser/components/tabbrowser/content/tabgroup.js | --- a/browser/components/tabbrowser/content/tabgroup.js | ||||||
| +++ b/browser/components/tabbrowser/content/tabgroup.js | +++ b/browser/components/tabbrowser/content/tabgroup.js | ||||||
| @@ -13,10 +13,12 @@ | @@ -13,10 +13,12 @@ | ||||||
| @@ -92,7 +92,17 @@ index caea196b22b4689f55780a528661d87b52f4e728..c107c803d0820a209c0859745dcc8370 | |||||||
|      } |      } | ||||||
|   |   | ||||||
|      get color() { |      get color() { | ||||||
| @@ -338,12 +356,61 @@ | @@ -285,6 +303,9 @@ | ||||||
|  |      } | ||||||
|  |   | ||||||
|  |      set collapsed(val) { | ||||||
|  | +      if (this.hasAttribute("split-view-group")) { | ||||||
|  | +        return; | ||||||
|  | +      } | ||||||
|  |        if (!!val == this.collapsed) { | ||||||
|  |          return; | ||||||
|  |        } | ||||||
|  | @@ -338,12 +359,61 @@ | ||||||
|            tabGroupName, |            tabGroupName, | ||||||
|          }) |          }) | ||||||
|          .then(result => { |          .then(result => { | ||||||
| @@ -156,7 +166,7 @@ index caea196b22b4689f55780a528661d87b52f4e728..c107c803d0820a209c0859745dcc8370 | |||||||
|      } |      } | ||||||
|   |   | ||||||
|      /** |      /** | ||||||
| @@ -373,7 +440,7 @@ | @@ -373,7 +443,7 @@ | ||||||
|       */ |       */ | ||||||
|      addTabs(tabs, metricsContext) { |      addTabs(tabs, metricsContext) { | ||||||
|        for (let tab of tabs) { |        for (let tab of tabs) { | ||||||
| @@ -165,7 +175,7 @@ index caea196b22b4689f55780a528661d87b52f4e728..c107c803d0820a209c0859745dcc8370 | |||||||
|            tab.ownerGlobal.gBrowser.unpinTab(tab); |            tab.ownerGlobal.gBrowser.unpinTab(tab); | ||||||
|          } |          } | ||||||
|          let tabToMove = |          let tabToMove = | ||||||
| @@ -437,7 +504,7 @@ | @@ -437,7 +507,7 @@ | ||||||
|       */ |       */ | ||||||
|      on_click(event) { |      on_click(event) { | ||||||
|        let isToggleElement = |        let isToggleElement = | ||||||
| @@ -174,7 +184,7 @@ index caea196b22b4689f55780a528661d87b52f4e728..c107c803d0820a209c0859745dcc8370 | |||||||
|          event.target === this.#overflowCountLabel; |          event.target === this.#overflowCountLabel; | ||||||
|        if (isToggleElement && event.button === 0) { |        if (isToggleElement && event.button === 0) { | ||||||
|          event.preventDefault(); |          event.preventDefault(); | ||||||
| @@ -470,5 +537,6 @@ | @@ -470,5 +540,6 @@ | ||||||
|      } |      } | ||||||
|    } |    } | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js | diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js | ||||||
| index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d075b9cf7 100644 | index e2b27db6c13278defea3bcc7606a8da54e7d001c..016d58789918235cc3a41f33ee402c2c3b65f80b 100644 | ||||||
| --- a/browser/components/tabbrowser/content/tabs.js | --- a/browser/components/tabbrowser/content/tabs.js | ||||||
| +++ b/browser/components/tabbrowser/content/tabs.js | +++ b/browser/components/tabbrowser/content/tabs.js | ||||||
| @@ -332,7 +332,7 @@ | @@ -332,7 +332,7 @@ | ||||||
| @@ -28,20 +28,16 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|          let tabsPerRow = 0; |          let tabsPerRow = 0; | ||||||
|          let position = RTL_UI |          let position = RTL_UI | ||||||
|            ? window.windowUtils.getBoundsWithoutFlushing( |            ? window.windowUtils.getBoundsWithoutFlushing( | ||||||
| @@ -772,9 +771,10 @@ | @@ -851,7 +850,7 @@ | ||||||
|  |        let dropEffect = this.getDropEffectForTabDrag(event); | ||||||
|  |        let isMovingInTabStrip = !fromTabList && dropEffect == "move"; | ||||||
|  |        let collapseTabGroupDuringDrag = | ||||||
|  | -        isMovingInTabStrip && isTabGroupLabel(tab) && !tab.group.collapsed; | ||||||
|  | +        isMovingInTabStrip && isTabGroupLabel(tab) && (!tab.group.collapsed || tab.group.hasAttribute("has-active")); | ||||||
|   |   | ||||||
|          if (tab.multiselected) { |        tab._dragData = { | ||||||
|            this.#moveTogetherSelectedTabs(tab); |          offsetX: this.verticalMode | ||||||
| -        } else if (isTabGroupLabel(tab) && !tab.group.collapsed) { | @@ -861,7 +860,7 @@ | ||||||
| -          tab.group.collapsed = true; |  | ||||||
| +        } else if (isTabGroupLabel(tab) && (!tab.group.collapsed || tab.group.hasAttribute("has-active"))) { |  | ||||||
| +          tab.group.collapsed = !tab.group.hasAttribute("split-view-group"); |  | ||||||
|            expandGroupOnDrop = true; |  | ||||||
| +          gZenFolders.collapseVisibleTab(tab.group); |  | ||||||
|          } |  | ||||||
|        } |  | ||||||
|   |  | ||||||
| @@ -872,7 +872,7 @@ |  | ||||||
|            ? event.screenY - window.screenY - tabOffset |            ? event.screenY - window.screenY - tabOffset | ||||||
|            : event.screenY - window.screenY, |            : event.screenY - window.screenY, | ||||||
|          scrollPos: |          scrollPos: | ||||||
| @@ -50,7 +46,15 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|              ? this.pinnedTabsContainer.scrollPosition |              ? this.pinnedTabsContainer.scrollPosition | ||||||
|              : this.arrowScrollbox.scrollPosition, |              : this.arrowScrollbox.scrollPosition, | ||||||
|          screenX: event.screenX, |          screenX: event.screenX, | ||||||
| @@ -933,6 +933,10 @@ | @@ -886,6 +885,7 @@ | ||||||
|  |          if (tab.multiselected) { | ||||||
|  |            this.#moveTogetherSelectedTabs(tab); | ||||||
|  |          } else if (collapseTabGroupDuringDrag) { | ||||||
|  | +          gZenFolders.collapseVisibleTab(tab.group); | ||||||
|  |            tab.group.collapsed = true; | ||||||
|  |          } | ||||||
|  |        } | ||||||
|  | @@ -932,6 +932,10 @@ | ||||||
|        } |        } | ||||||
|   |   | ||||||
|        let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0); |        let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0); | ||||||
| @@ -61,7 +65,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        if ( |        if ( | ||||||
|          (dropEffect == "move" || dropEffect == "copy") && |          (dropEffect == "move" || dropEffect == "copy") && | ||||||
|          document == draggedTab.ownerDocument && |          document == draggedTab.ownerDocument && | ||||||
| @@ -1060,7 +1064,9 @@ | @@ -1059,7 +1063,9 @@ | ||||||
|          isTabGroupLabel(draggedTab) && |          isTabGroupLabel(draggedTab) && | ||||||
|          draggedTab._dragData?.expandGroupOnDrop |          draggedTab._dragData?.expandGroupOnDrop | ||||||
|        ) { |        ) { | ||||||
| @@ -72,7 +76,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        } |        } | ||||||
|      } |      } | ||||||
|   |   | ||||||
| @@ -1096,6 +1102,18 @@ | @@ -1095,6 +1101,18 @@ | ||||||
|   |   | ||||||
|        this._tabDropIndicator.hidden = true; |        this._tabDropIndicator.hidden = true; | ||||||
|        event.stopPropagation(); |        event.stopPropagation(); | ||||||
| @@ -91,7 +95,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        if (draggedTab && dropEffect == "copy") { |        if (draggedTab && dropEffect == "copy") { | ||||||
|          let duplicatedDraggedTab; |          let duplicatedDraggedTab; | ||||||
|          let duplicatedTabs = []; |          let duplicatedTabs = []; | ||||||
| @@ -1120,8 +1138,9 @@ | @@ -1119,8 +1137,9 @@ | ||||||
|          let translateOffsetY = oldTranslateY % tabHeight; |          let translateOffsetY = oldTranslateY % tabHeight; | ||||||
|          let newTranslateX = oldTranslateX - translateOffsetX; |          let newTranslateX = oldTranslateX - translateOffsetX; | ||||||
|          let newTranslateY = oldTranslateY - translateOffsetY; |          let newTranslateY = oldTranslateY - translateOffsetY; | ||||||
| @@ -103,7 +107,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|   |   | ||||||
|          if (this.#isContainerVerticalPinnedGrid(draggedTab)) { |          if (this.#isContainerVerticalPinnedGrid(draggedTab)) { | ||||||
|            // Update both translate axis for pinned vertical expanded tabs |            // Update both translate axis for pinned vertical expanded tabs | ||||||
| @@ -1137,8 +1156,8 @@ | @@ -1136,8 +1155,8 @@ | ||||||
|            } |            } | ||||||
|          } else { |          } else { | ||||||
|            let tabs = this.ariaFocusableItems.slice( |            let tabs = this.ariaFocusableItems.slice( | ||||||
| @@ -114,7 +118,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|            ); |            ); | ||||||
|            let size = this.verticalMode ? "height" : "width"; |            let size = this.verticalMode ? "height" : "width"; | ||||||
|            let screenAxis = this.verticalMode ? "screenY" : "screenX"; |            let screenAxis = this.verticalMode ? "screenY" : "screenX"; | ||||||
| @@ -1179,11 +1198,9 @@ | @@ -1178,11 +1197,9 @@ | ||||||
|          } |          } | ||||||
|   |   | ||||||
|          let shouldPin = |          let shouldPin = | ||||||
| @@ -128,7 +132,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|          let shouldTranslate = |          let shouldTranslate = | ||||||
|            !gReduceMotion && |            !gReduceMotion && | ||||||
|            !shouldCreateGroupOnDrop && |            !shouldCreateGroupOnDrop && | ||||||
| @@ -1196,6 +1213,7 @@ | @@ -1195,6 +1212,7 @@ | ||||||
|              (oldTranslateY && oldTranslateY != newTranslateY); |              (oldTranslateY && oldTranslateY != newTranslateY); | ||||||
|          } else if (this.verticalMode) { |          } else if (this.verticalMode) { | ||||||
|            shouldTranslate &&= oldTranslateY && oldTranslateY != newTranslateY; |            shouldTranslate &&= oldTranslateY && oldTranslateY != newTranslateY; | ||||||
| @@ -136,7 +140,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|          } else { |          } else { | ||||||
|            shouldTranslate &&= oldTranslateX && oldTranslateX != newTranslateX; |            shouldTranslate &&= oldTranslateX && oldTranslateX != newTranslateX; | ||||||
|          } |          } | ||||||
| @@ -1379,6 +1397,7 @@ | @@ -1376,6 +1394,7 @@ | ||||||
|   |   | ||||||
|            let nextItem = this.ariaFocusableItems[newIndex]; |            let nextItem = this.ariaFocusableItems[newIndex]; | ||||||
|            let tabGroup = isTab(nextItem) && nextItem.group; |            let tabGroup = isTab(nextItem) && nextItem.group; | ||||||
| @@ -144,7 +148,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|            gBrowser.loadTabs(urls, { |            gBrowser.loadTabs(urls, { | ||||||
|              inBackground, |              inBackground, | ||||||
|              replace, |              replace, | ||||||
| @@ -1411,6 +1430,17 @@ | @@ -1408,6 +1427,17 @@ | ||||||
|   |   | ||||||
|        this.finishMoveTogetherSelectedTabs(draggedTab); |        this.finishMoveTogetherSelectedTabs(draggedTab); | ||||||
|        this.finishAnimateTabMove(); |        this.finishAnimateTabMove(); | ||||||
| @@ -159,10 +163,10 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
| +        if (gZenViewSplitter._lastOpenedTab) gZenViewSplitter._lastOpenedTab._visuallySelected = false; | +        if (gZenViewSplitter._lastOpenedTab) gZenViewSplitter._lastOpenedTab._visuallySelected = false; | ||||||
| +      } | +      } | ||||||
| + | + | ||||||
|        this.#keepTabSizeLocked = false; |  | ||||||
|        this._unlockTabSizing(); |  | ||||||
|        this.#expandGroupOnDrop(draggedTab); |        this.#expandGroupOnDrop(draggedTab); | ||||||
| @@ -1582,7 +1612,6 @@ |        this.#resetTabsAfterDrop(draggedTab.ownerDocument); | ||||||
|  |   | ||||||
|  | @@ -1577,7 +1607,6 @@ | ||||||
|   |   | ||||||
|        this.toggleAttribute("overflow", true); |        this.toggleAttribute("overflow", true); | ||||||
|        this._updateCloseButtons(); |        this._updateCloseButtons(); | ||||||
| @@ -170,7 +174,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|   |   | ||||||
|        document |        document | ||||||
|          .getElementById("tab-preview-panel") |          .getElementById("tab-preview-panel") | ||||||
| @@ -1640,7 +1669,7 @@ | @@ -1635,7 +1664,7 @@ | ||||||
|      } |      } | ||||||
|   |   | ||||||
|      get newTabButton() { |      get newTabButton() { | ||||||
| @@ -179,7 +183,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|      } |      } | ||||||
|   |   | ||||||
|      get verticalMode() { |      get verticalMode() { | ||||||
| @@ -1656,6 +1685,7 @@ | @@ -1651,6 +1680,7 @@ | ||||||
|      } |      } | ||||||
|   |   | ||||||
|      get overflowing() { |      get overflowing() { | ||||||
| @@ -187,7 +191,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        return this.hasAttribute("overflow"); |        return this.hasAttribute("overflow"); | ||||||
|      } |      } | ||||||
|   |   | ||||||
| @@ -1664,26 +1694,54 @@ | @@ -1659,26 +1689,54 @@ | ||||||
|        if (this.#allTabs) { |        if (this.#allTabs) { | ||||||
|          return this.#allTabs; |          return this.#allTabs; | ||||||
|        } |        } | ||||||
| @@ -249,7 +253,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|      } |      } | ||||||
|   |   | ||||||
|      /** |      /** | ||||||
| @@ -1750,32 +1808,27 @@ | @@ -1745,32 +1803,27 @@ | ||||||
|   |   | ||||||
|        let elementIndex = 0; |        let elementIndex = 0; | ||||||
|   |   | ||||||
| @@ -291,7 +295,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|   |   | ||||||
|        return this.#focusableItems; |        return this.#focusableItems; | ||||||
|      } |      } | ||||||
| @@ -1783,6 +1836,7 @@ | @@ -1778,6 +1831,7 @@ | ||||||
|      _invalidateCachedTabs() { |      _invalidateCachedTabs() { | ||||||
|        this.#allTabs = null; |        this.#allTabs = null; | ||||||
|        this._invalidateCachedVisibleTabs(); |        this._invalidateCachedVisibleTabs(); | ||||||
| @@ -299,7 +303,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|      } |      } | ||||||
|   |   | ||||||
|      _invalidateCachedVisibleTabs() { |      _invalidateCachedVisibleTabs() { | ||||||
| @@ -1798,8 +1852,8 @@ | @@ -1793,8 +1847,8 @@ | ||||||
|      #isContainerVerticalPinnedGrid(tab) { |      #isContainerVerticalPinnedGrid(tab) { | ||||||
|        return ( |        return ( | ||||||
|          this.verticalMode && |          this.verticalMode && | ||||||
| @@ -310,7 +314,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|          !this.expandOnHover |          !this.expandOnHover | ||||||
|        ); |        ); | ||||||
|      } |      } | ||||||
| @@ -1815,7 +1869,7 @@ | @@ -1810,7 +1864,7 @@ | ||||||
|   |   | ||||||
|        if (node == null) { |        if (node == null) { | ||||||
|          // We have a container for non-tab elements at the end of the scrollbox. |          // We have a container for non-tab elements at the end of the scrollbox. | ||||||
| @@ -319,7 +323,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        } |        } | ||||||
|   |   | ||||||
|        node.before(tab); |        node.before(tab); | ||||||
| @@ -1910,7 +1964,7 @@ | @@ -1905,7 +1959,7 @@ | ||||||
|            // There are separate "new tab" buttons for horizontal tabs toolbar, vertical tabs and |            // There are separate "new tab" buttons for horizontal tabs toolbar, vertical tabs and | ||||||
|            // for when the tab strip is overflowed (which is shared by vertical and horizontal tabs); |            // for when the tab strip is overflowed (which is shared by vertical and horizontal tabs); | ||||||
|            // Attach the long click popup to all of them. |            // Attach the long click popup to all of them. | ||||||
| @@ -328,7 +332,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|            const newTab2 = this.newTabButton; |            const newTab2 = this.newTabButton; | ||||||
|            const newTabVertical = document.getElementById( |            const newTabVertical = document.getElementById( | ||||||
|              "vertical-tabs-newtab-button" |              "vertical-tabs-newtab-button" | ||||||
| @@ -2005,10 +2059,12 @@ | @@ -2000,10 +2054,12 @@ | ||||||
|   |   | ||||||
|      _handleTabSelect(aInstant) { |      _handleTabSelect(aInstant) { | ||||||
|        let selectedTab = this.selectedItem; |        let selectedTab = this.selectedItem; | ||||||
| @@ -341,7 +345,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        selectedTab._notselectedsinceload = false; |        selectedTab._notselectedsinceload = false; | ||||||
|      } |      } | ||||||
|   |   | ||||||
| @@ -2152,6 +2208,16 @@ | @@ -2140,6 +2196,16 @@ | ||||||
|        when the tab is first selected to be dragged. |        when the tab is first selected to be dragged. | ||||||
|      */ |      */ | ||||||
|      #updateTabStylesOnDrag(tab) { |      #updateTabStylesOnDrag(tab) { | ||||||
| @@ -358,7 +362,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        let isPinned = tab.pinned; |        let isPinned = tab.pinned; | ||||||
|        let numPinned = gBrowser.pinnedTabCount; |        let numPinned = gBrowser.pinnedTabCount; | ||||||
|        let allTabs = this.ariaFocusableItems; |        let allTabs = this.ariaFocusableItems; | ||||||
| @@ -2385,7 +2451,7 @@ | @@ -2398,7 +2464,7 @@ | ||||||
|          return; |          return; | ||||||
|        } |        } | ||||||
|   |   | ||||||
| @@ -367,7 +371,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|   |   | ||||||
|        let directionX = screenX > dragData.animLastScreenX; |        let directionX = screenX > dragData.animLastScreenX; | ||||||
|        let directionY = screenY > dragData.animLastScreenY; |        let directionY = screenY > dragData.animLastScreenY; | ||||||
| @@ -2394,6 +2460,8 @@ | @@ -2407,6 +2473,8 @@ | ||||||
|   |   | ||||||
|        let { width: tabWidth, height: tabHeight } = |        let { width: tabWidth, height: tabHeight } = | ||||||
|          draggedTab.getBoundingClientRect(); |          draggedTab.getBoundingClientRect(); | ||||||
| @@ -376,7 +380,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        let shiftSizeX = tabWidth * movingTabs.length; |        let shiftSizeX = tabWidth * movingTabs.length; | ||||||
|        let shiftSizeY = tabHeight; |        let shiftSizeY = tabHeight; | ||||||
|        dragData.tabWidth = tabWidth; |        dragData.tabWidth = tabWidth; | ||||||
| @@ -2430,8 +2498,8 @@ | @@ -2443,8 +2511,8 @@ | ||||||
|        let lastBoundX = |        let lastBoundX = | ||||||
|          lastTabInRow.screenX + |          lastTabInRow.screenX + | ||||||
|          lastTabInRow.getBoundingClientRect().width - |          lastTabInRow.getBoundingClientRect().width - | ||||||
| @@ -387,7 +391,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        translateX = Math.min(Math.max(translateX, firstBoundX), lastBoundX); |        translateX = Math.min(Math.max(translateX, firstBoundX), lastBoundX); | ||||||
|        translateY = Math.min(Math.max(translateY, firstBoundY), lastBoundY); |        translateY = Math.min(Math.max(translateY, firstBoundY), lastBoundY); | ||||||
|   |   | ||||||
| @@ -2547,7 +2615,7 @@ | @@ -2560,7 +2628,7 @@ | ||||||
|        } |        } | ||||||
|   |   | ||||||
|        dragData.animDropElementIndex = newIndex; |        dragData.animDropElementIndex = newIndex; | ||||||
| @@ -396,7 +400,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        dragData.dropBefore = newIndex < tabs.length; |        dragData.dropBefore = newIndex < tabs.length; | ||||||
|   |   | ||||||
|        // Shift background tabs to leave a gap where the dragged tab |        // Shift background tabs to leave a gap where the dragged tab | ||||||
| @@ -2580,13 +2648,18 @@ | @@ -2593,13 +2661,18 @@ | ||||||
|   |   | ||||||
|        this.#clearDragOverCreateGroupTimer(); |        this.#clearDragOverCreateGroupTimer(); | ||||||
|   |   | ||||||
| @@ -419,7 +423,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|   |   | ||||||
|        if (this.#rtlMode) { |        if (this.#rtlMode) { | ||||||
|          tabs.reverse(); |          tabs.reverse(); | ||||||
| @@ -2597,7 +2670,7 @@ | @@ -2610,7 +2683,7 @@ | ||||||
|        let screenAxis = this.verticalMode ? "screenY" : "screenX"; |        let screenAxis = this.verticalMode ? "screenY" : "screenX"; | ||||||
|        let size = this.verticalMode ? "height" : "width"; |        let size = this.verticalMode ? "height" : "width"; | ||||||
|        let translateAxis = this.verticalMode ? "translateY" : "translateX"; |        let translateAxis = this.verticalMode ? "translateY" : "translateX"; | ||||||
| @@ -428,7 +432,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        let translateX = event.screenX - dragData.screenX; |        let translateX = event.screenX - dragData.screenX; | ||||||
|        let translateY = event.screenY - dragData.screenY; |        let translateY = event.screenY - dragData.screenY; | ||||||
|   |   | ||||||
| @@ -2607,10 +2680,16 @@ | @@ -2620,10 +2693,16 @@ | ||||||
|        dragData.translateY = translateY; |        dragData.translateY = translateY; | ||||||
|   |   | ||||||
|        // Move the dragged tab based on the mouse position. |        // Move the dragged tab based on the mouse position. | ||||||
| @@ -447,7 +451,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        let endEdge = ele => ele[screenAxis] + bounds(ele)[size]; |        let endEdge = ele => ele[screenAxis] + bounds(ele)[size]; | ||||||
|        let lastMovingTabScreen = endEdge(lastMovingTab); |        let lastMovingTabScreen = endEdge(lastMovingTab); | ||||||
|        let firstMovingTabScreen = firstMovingTab[screenAxis]; |        let firstMovingTabScreen = firstMovingTab[screenAxis]; | ||||||
| @@ -2619,6 +2698,7 @@ | @@ -2632,6 +2711,7 @@ | ||||||
|        // Constrain the range over which the moving tabs can move between the first and last tab |        // Constrain the range over which the moving tabs can move between the first and last tab | ||||||
|        let firstBound = firstTab[screenAxis] - firstMovingTabScreen; |        let firstBound = firstTab[screenAxis] - firstMovingTabScreen; | ||||||
|        let lastBound = endEdge(lastTab) - lastMovingTabScreen; |        let lastBound = endEdge(lastTab) - lastMovingTabScreen; | ||||||
| @@ -455,7 +459,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|   |   | ||||||
|        // Center the tab under the cursor if the tab is not under the cursor while dragging |        // Center the tab under the cursor if the tab is not under the cursor while dragging | ||||||
|        if ( |        if ( | ||||||
| @@ -2636,6 +2716,9 @@ | @@ -2649,6 +2729,9 @@ | ||||||
|            // Shift the `.tab-group-label-container` to shift the label element. |            // Shift the `.tab-group-label-container` to shift the label element. | ||||||
|            item = item.parentElement; |            item = item.parentElement; | ||||||
|          } |          } | ||||||
| @@ -465,7 +469,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|          item.style.transform = `${translateAxis}(${translate}px)`; |          item.style.transform = `${translateAxis}(${translate}px)`; | ||||||
|        } |        } | ||||||
|   |   | ||||||
| @@ -2773,6 +2856,9 @@ | @@ -2786,6 +2869,9 @@ | ||||||
|              break; |              break; | ||||||
|            } |            } | ||||||
|            let element = tabs[mid]; |            let element = tabs[mid]; | ||||||
| @@ -475,7 +479,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|            let elementForSize = isTabGroupLabel(element) |            let elementForSize = isTabGroupLabel(element) | ||||||
|              ? element.parentElement |              ? element.parentElement | ||||||
|              : element; |              : element; | ||||||
| @@ -2792,6 +2878,8 @@ | @@ -2805,6 +2891,8 @@ | ||||||
|        }; |        }; | ||||||
|   |   | ||||||
|        let dropElement = getOverlappedElement(); |        let dropElement = getOverlappedElement(); | ||||||
| @@ -484,7 +488,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|   |   | ||||||
|        let newDropElementIndex; |        let newDropElementIndex; | ||||||
|        if (dropElement) { |        if (dropElement) { | ||||||
| @@ -2856,7 +2944,10 @@ | @@ -2869,7 +2957,10 @@ | ||||||
|        let shouldCreateGroupOnDrop; |        let shouldCreateGroupOnDrop; | ||||||
|        let dropBefore; |        let dropBefore; | ||||||
|        if (dropElement) { |        if (dropElement) { | ||||||
| @@ -496,7 +500,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|            ? dropElement.parentElement |            ? dropElement.parentElement | ||||||
|            : dropElement; |            : dropElement; | ||||||
|   |   | ||||||
| @@ -2876,7 +2967,7 @@ | @@ -2889,7 +2980,7 @@ | ||||||
|            ? Services.prefs.getIntPref( |            ? Services.prefs.getIntPref( | ||||||
|                "browser.tabs.dragDrop.moveOverThresholdPercent" |                "browser.tabs.dragDrop.moveOverThresholdPercent" | ||||||
|              ) / 100 |              ) / 100 | ||||||
| @@ -505,7 +509,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|          moveOverThreshold = Math.min(1, Math.max(0, moveOverThreshold)); |          moveOverThreshold = Math.min(1, Math.max(0, moveOverThreshold)); | ||||||
|          let shouldMoveOver = overlapPercent > moveOverThreshold; |          let shouldMoveOver = overlapPercent > moveOverThreshold; | ||||||
|          if (logicalForward && shouldMoveOver) { |          if (logicalForward && shouldMoveOver) { | ||||||
| @@ -2908,44 +2999,21 @@ | @@ -2921,44 +3012,21 @@ | ||||||
|   |   | ||||||
|          // If dragging a group over another group, don't make it look like it is |          // If dragging a group over another group, don't make it look like it is | ||||||
|          // possible to drop the dragged group inside the other group. |          // possible to drop the dragged group inside the other group. | ||||||
| @@ -555,7 +559,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|          // When dragging tab(s) over an ungrouped tab, signal to the user |          // When dragging tab(s) over an ungrouped tab, signal to the user | ||||||
|          // that dropping the tab(s) will create a new tab group. |          // that dropping the tab(s) will create a new tab group. | ||||||
|          shouldCreateGroupOnDrop = |          shouldCreateGroupOnDrop = | ||||||
| @@ -2955,12 +3023,6 @@ | @@ -2968,12 +3036,6 @@ | ||||||
|            overlapPercent > dragOverGroupingThreshold; |            overlapPercent > dragOverGroupingThreshold; | ||||||
|   |   | ||||||
|          if (shouldCreateGroupOnDrop) { |          if (shouldCreateGroupOnDrop) { | ||||||
| @@ -568,7 +572,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|          } else { |          } else { | ||||||
|            this.removeAttribute("movingtab-createGroup"); |            this.removeAttribute("movingtab-createGroup"); | ||||||
|            document |            document | ||||||
| @@ -2987,19 +3049,14 @@ | @@ -3000,19 +3062,14 @@ | ||||||
|              dropElement = dropElementGroup; |              dropElement = dropElementGroup; | ||||||
|              colorCode = undefined; |              colorCode = undefined; | ||||||
|            } else if (isTabGroupLabel(dropElement)) { |            } else if (isTabGroupLabel(dropElement)) { | ||||||
| @@ -596,7 +600,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|            } |            } | ||||||
|            this.#setDragOverGroupColor(colorCode); |            this.#setDragOverGroupColor(colorCode); | ||||||
|            this.toggleAttribute("movingtab-ungroup", !colorCode); |            this.toggleAttribute("movingtab-ungroup", !colorCode); | ||||||
| @@ -3017,19 +3074,28 @@ | @@ -3030,19 +3087,28 @@ | ||||||
|        dragData.dropElement = dropElement; |        dragData.dropElement = dropElement; | ||||||
|        dragData.dropBefore = dropBefore; |        dragData.dropBefore = dropBefore; | ||||||
|        dragData.animDropElementIndex = newDropElementIndex; |        dragData.animDropElementIndex = newDropElementIndex; | ||||||
| @@ -627,7 +631,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|          } |          } | ||||||
|          item.style.transform = transform; |          item.style.transform = transform; | ||||||
|        } |        } | ||||||
| @@ -3082,12 +3148,14 @@ | @@ -3095,12 +3161,14 @@ | ||||||
|        ); |        ); | ||||||
|      } |      } | ||||||
|   |   | ||||||
| @@ -644,7 +648,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|   |   | ||||||
|        for (let item of this.ariaFocusableItems) { |        for (let item of this.ariaFocusableItems) { | ||||||
|          if (isTabGroupLabel(item)) { |          if (isTabGroupLabel(item)) { | ||||||
| @@ -3095,6 +3163,18 @@ | @@ -3108,6 +3176,18 @@ | ||||||
|            item = item.parentElement; |            item = item.parentElement; | ||||||
|          } |          } | ||||||
|          item.style.transform = ""; |          item.style.transform = ""; | ||||||
| @@ -663,7 +667,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|          item.removeAttribute("dragover-createGroup"); |          item.removeAttribute("dragover-createGroup"); | ||||||
|        } |        } | ||||||
|        this.removeAttribute("movingtab-createGroup"); |        this.removeAttribute("movingtab-createGroup"); | ||||||
| @@ -3116,16 +3196,15 @@ | @@ -3129,16 +3209,15 @@ | ||||||
|          tab.style.left = ""; |          tab.style.left = ""; | ||||||
|          tab.style.top = ""; |          tab.style.top = ""; | ||||||
|          tab.style.maxWidth = ""; |          tab.style.maxWidth = ""; | ||||||
| @@ -682,7 +686,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|        } |        } | ||||||
|        let periphery = draggedTabDocument.getElementById( |        let periphery = draggedTabDocument.getElementById( | ||||||
|          "tabbrowser-arrowscrollbox-periphery" |          "tabbrowser-arrowscrollbox-periphery" | ||||||
| @@ -3198,7 +3277,7 @@ | @@ -3211,7 +3290,7 @@ | ||||||
|          let postTransitionCleanup = () => { |          let postTransitionCleanup = () => { | ||||||
|            movingTab._moveTogetherSelectedTabsData.animate = false; |            movingTab._moveTogetherSelectedTabsData.animate = false; | ||||||
|          }; |          }; | ||||||
| @@ -691,7 +695,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|            postTransitionCleanup(); |            postTransitionCleanup(); | ||||||
|          } else { |          } else { | ||||||
|            let onTransitionEnd = transitionendEvent => { |            let onTransitionEnd = transitionendEvent => { | ||||||
| @@ -3371,7 +3450,7 @@ | @@ -3384,7 +3463,7 @@ | ||||||
|      } |      } | ||||||
|   |   | ||||||
|      _notifyBackgroundTab(aTab) { |      _notifyBackgroundTab(aTab) { | ||||||
| @@ -700,7 +704,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|          return; |          return; | ||||||
|        } |        } | ||||||
|   |   | ||||||
| @@ -3480,7 +3559,10 @@ | @@ -3493,7 +3572,10 @@ | ||||||
|      #getDragTarget(event, { ignoreSides = false } = {}) { |      #getDragTarget(event, { ignoreSides = false } = {}) { | ||||||
|        let { target } = event; |        let { target } = event; | ||||||
|        while (target) { |        while (target) { | ||||||
| @@ -712,7 +716,7 @@ index e47f735e4e4563c9b7537944628418d1478c068d..b6d52ef3179d66ecd7f06fd61a6bca6d | |||||||
|            break; |            break; | ||||||
|          } |          } | ||||||
|          target = target.parentNode; |          target = target.parentNode; | ||||||
| @@ -3497,6 +3579,9 @@ | @@ -3510,6 +3592,9 @@ | ||||||
|            return null; |            return null; | ||||||
|          } |          } | ||||||
|        } |        } | ||||||
|   | |||||||
| @@ -1,8 +1,24 @@ | |||||||
| diff --git a/toolkit/content/xul.css b/toolkit/content/xul.css | diff --git a/toolkit/content/xul.css b/toolkit/content/xul.css | ||||||
| index ba7642c9264ac201fec7be1bd492bc778bb147a2..9e89735e8a0886183ae7ecf98e6ce08142bf3bbc 100644 | index ba7642c9264ac201fec7be1bd492bc778bb147a2..f0e02bcc000f106e186b3123ada96b4cbf83b40f 100644 | ||||||
| --- a/toolkit/content/xul.css | --- a/toolkit/content/xul.css | ||||||
| +++ b/toolkit/content/xul.css | +++ b/toolkit/content/xul.css | ||||||
| @@ -456,7 +456,8 @@ deck > *|*:not(:-moz-native-anonymous) { | @@ -401,6 +401,15 @@ tooltip { | ||||||
|  |        border-radius: 4px; | ||||||
|  |      } | ||||||
|  |    } | ||||||
|  | + | ||||||
|  | +  border-radius: 16px !important; | ||||||
|  | +  border-top-left-radius: 4px !important; | ||||||
|  | +  border: 1px solid rgba(225, 225, 225, 0.15) !important; | ||||||
|  | +  padding: 5px 9px 6px 9px !important; | ||||||
|  | +  font-weight: 600 !important; | ||||||
|  | +  background: color-mix(in srgb, var(--zen-primary-color, white), black 80%) !important; | ||||||
|  | +  color: #f3f3f3 !important; | ||||||
|  | +  font-size: smaller !important; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  /******** tree ******/ | ||||||
|  | @@ -456,7 +465,8 @@ deck > *|*:not(:-moz-native-anonymous) { | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  tabpanels > .deck-selected, |  tabpanels > .deck-selected, | ||||||
|   | |||||||
| @@ -228,3 +228,19 @@ body > #confetti { | |||||||
|     linear-gradient(#fff 0 0); |     linear-gradient(#fff 0 0); | ||||||
|   mask-composite: exclude; |   mask-composite: exclude; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /* Status panel */ | ||||||
|  |  | ||||||
|  | #statuspanel { | ||||||
|  |   padding: 4px 3px; | ||||||
|  |  | ||||||
|  |   & > #statuspanel-label { | ||||||
|  |     border-radius: 16px !important; | ||||||
|  |     border: 1px solid rgba(225, 225, 225, 0.15) !important; | ||||||
|  |     padding: 5px 9px 6px 9px !important; | ||||||
|  |     font-weight: 600 !important; | ||||||
|  |     background: color-mix(in srgb, var(--zen-primary-color), black 80%) !important; | ||||||
|  |     color: #f3f3f3 !important; | ||||||
|  |     font-size: smaller !important; | ||||||
|  |   } | ||||||
|  | } | ||||||
|   | |||||||
| @@ -139,6 +139,9 @@ | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     rename() { |     rename() { | ||||||
|  |       if (!document.documentElement.hasAttribute('zen-sidebar-expanded')) { | ||||||
|  |         return; | ||||||
|  |       } | ||||||
|       gZenVerticalTabsManager.renameTabStart({ |       gZenVerticalTabsManager.renameTabStart({ | ||||||
|         target: this.labelElement, |         target: this.labelElement, | ||||||
|         explicit: true, |         explicit: true, | ||||||
| @@ -146,6 +149,12 @@ | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     createSubfolder() { |     createSubfolder() { | ||||||
|  |       // We need to expand all parent folders | ||||||
|  |       let currentFolder = this; | ||||||
|  |       do { | ||||||
|  |         currentFolder.collapsed = false; | ||||||
|  |         currentFolder = currentFolder.group; | ||||||
|  |       } while (currentFolder); | ||||||
|       gZenFolders.createFolder([], { |       gZenFolders.createFolder([], { | ||||||
|         renameFolder: !gZenUIManager.testingEnabled, |         renameFolder: !gZenUIManager.testingEnabled, | ||||||
|         label: 'Subfolder', |         label: 'Subfolder', | ||||||
|   | |||||||
| @@ -74,6 +74,11 @@ | |||||||
|           folder = target.group; |           folder = target.group; | ||||||
|         } else if (gBrowser.isTabGroupLabel(target.parentElement)) { |         } else if (gBrowser.isTabGroupLabel(target.parentElement)) { | ||||||
|           folder = target.parentElement.group; |           folder = target.parentElement.group; | ||||||
|  |         } else if ( | ||||||
|  |           target.parentElement?.isZenFolder && | ||||||
|  |           target?.classList.contains('tab-group-label-container') | ||||||
|  |         ) { | ||||||
|  |           folder = target.parentElement; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // We only want to rename zen-folders as firefox groups don't work well with this |         // We only want to rename zen-folders as firefox groups don't work well with this | ||||||
| @@ -226,7 +231,7 @@ | |||||||
|       } |       } | ||||||
|  |  | ||||||
|       if (group.collapsed && !this._sessionRestoring) { |       if (group.collapsed && !this._sessionRestoring) { | ||||||
|         group.collapsed = false; |         group.collapsed = group.hasAttribute('has-active'); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -237,7 +242,7 @@ | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     async on_TabSelect(event) { |     async on_TabSelect(event) { | ||||||
|       const tab = event.target; |       const tab = gZenGlanceManager.getTabOrGlanceParent(event.target); | ||||||
|       let group = tab?.group; |       let group = tab?.group; | ||||||
|       if (group?.hasAttribute('split-view-group')) group = group?.group; |       if (group?.hasAttribute('split-view-group')) group = group?.group; | ||||||
|       if (!group?.isZenFolder) { |       if (!group?.isZenFolder) { | ||||||
| @@ -265,6 +270,7 @@ | |||||||
|         gBrowser.pinTab(tab); |         gBrowser.pinTab(tab); | ||||||
|         group.addTabs([tab]); |         group.addTabs([tab]); | ||||||
|       } else { |       } else { | ||||||
|  |         tab._ignoreUngrouped = true; | ||||||
|         // Otherwise, we must move it to the first tab since it was added in an unpinned state |         // Otherwise, we must move it to the first tab since it was added in an unpinned state | ||||||
|         gZenWorkspaces._emptyTab.after(tab); |         gZenWorkspaces._emptyTab.after(tab); | ||||||
|         gBrowser.tabContainer._invalidateCachedTabs(); |         gBrowser.tabContainer._invalidateCachedTabs(); | ||||||
| @@ -274,6 +280,10 @@ | |||||||
|     on_TabUngrouped(event) { |     on_TabUngrouped(event) { | ||||||
|       const tab = event.detail; |       const tab = event.detail; | ||||||
|       const group = event.target; |       const group = event.target; | ||||||
|  |       if (tab._ignoreUngrouped) { | ||||||
|  |         delete tab._ignoreUngrouped; | ||||||
|  |         return; | ||||||
|  |       } | ||||||
|       tab.removeAttribute('folder-active'); |       tab.removeAttribute('folder-active'); | ||||||
|       if (group.hasAttribute('split-view-group') && tab.hasAttribute('had-zen-pinned-changed')) { |       if (group.hasAttribute('split-view-group') && tab.hasAttribute('had-zen-pinned-changed')) { | ||||||
|         tab.setAttribute('zen-pinned-changed', true); |         tab.setAttribute('zen-pinned-changed', true); | ||||||
| @@ -286,7 +296,7 @@ | |||||||
|           if (!folder.activeTabs.length) { |           if (!folder.activeTabs.length) { | ||||||
|             folder.removeAttribute('has-active'); |             folder.removeAttribute('has-active'); | ||||||
|           } |           } | ||||||
|           this.collapseVisibleTab(folder); |           this.collapseVisibleTab(folder, true); | ||||||
|           this.updateFolderIcon(folder, 'close', false); |           this.updateFolderIcon(folder, 'close', false); | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
| @@ -613,7 +623,23 @@ | |||||||
|                 let activeGroup = folders.get(group?.id); |                 let activeGroup = folders.get(group?.id); | ||||||
|                 // If group has active tabs, we need to update the indentation |                 // If group has active tabs, we need to update the indentation | ||||||
|                 if (activeGroup) { |                 if (activeGroup) { | ||||||
|                   this.on_TabGroupCollapse({ target: activeGroup }); |                   const activeGroupStart = activeGroup.querySelector('.zen-tab-group-start'); | ||||||
|  |                   const selectedTabs = activeGroup.activeTabs; | ||||||
|  |                   if (selectedTabs.length > 0) { | ||||||
|  |                     const selectedItem = selectedTabs[0]; | ||||||
|  |                     const isSplitView = selectedItem.group?.hasAttribute('split-view-group'); | ||||||
|  |                     const selectedContainer = isSplitView ? selectedItem.group : selectedItem; | ||||||
|  |  | ||||||
|  |                     const heightUntilSelected = | ||||||
|  |                       window.windowUtils.getBoundsWithoutFlushing(selectedContainer).top - | ||||||
|  |                       window.windowUtils.getBoundsWithoutFlushing(activeGroupStart).bottom; | ||||||
|  |  | ||||||
|  |                     const adjustedHeight = isSplitView | ||||||
|  |                       ? heightUntilSelected - 2 | ||||||
|  |                       : heightUntilSelected; | ||||||
|  |                     activeGroupStart.style.marginTop = | ||||||
|  |                       -(adjustedHeight + 4 * (selectedTabs.length === 0 ? 1 : 0)) + 'px'; | ||||||
|  |                   } | ||||||
|                   this.setFolderIndentation([tab], activeGroup, /* for collapse = */ true); |                   this.setFolderIndentation([tab], activeGroup, /* for collapse = */ true); | ||||||
|                 } else { |                 } else { | ||||||
|                   // Since the folder is now expanded, we should remove active attribute |                   // Since the folder is now expanded, we should remove active attribute | ||||||
| @@ -740,9 +766,11 @@ | |||||||
|       const workspaceElement = gZenWorkspaces.workspaceElement(workspaceId); |       const workspaceElement = gZenWorkspaces.workspaceElement(workspaceId); | ||||||
|       const pinnedTabsContainer = workspaceElement.pinnedTabsContainer; |       const pinnedTabsContainer = workspaceElement.pinnedTabsContainer; | ||||||
|       pinnedTabsContainer.insertBefore(folder, pinnedTabsContainer.lastChild); |       pinnedTabsContainer.insertBefore(folder, pinnedTabsContainer.lastChild); | ||||||
|       folder.setAttribute('zen-workspace-id', workspaceId); |  | ||||||
|       for (const tab of folder.tabs) { |       for (const tab of folder.tabs) { | ||||||
|         tab.setAttribute('zen-workspace-id', workspaceId); |         tab.setAttribute('zen-workspace-id', workspaceId); | ||||||
|  |         // This sets the ID for the current folder and any sub-folder | ||||||
|  |         // we may encounter | ||||||
|  |         tab.group.setAttribute('zen-workspace-id', workspaceId); | ||||||
|         gBrowser.TabStateFlusher.flush(tab.linkedBrowser); |         gBrowser.TabStateFlusher.flush(tab.linkedBrowser); | ||||||
|         if (gZenWorkspaces._lastSelectedWorkspaceTabs[workspaceId] === tab) { |         if (gZenWorkspaces._lastSelectedWorkspaceTabs[workspaceId] === tab) { | ||||||
|           // This tab is no longer the last selected tab in the previous workspace because it's being moved to a new workspace |           // This tab is no longer the last selected tab in the previous workspace because it's being moved to a new workspace | ||||||
| @@ -750,7 +778,9 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|       folder.dispatchEvent(new CustomEvent('ZenFolderChangedWorkspace', { bubbles: true })); |       folder.dispatchEvent(new CustomEvent('ZenFolderChangedWorkspace', { bubbles: true })); | ||||||
|       gZenWorkspaces.changeWorkspaceWithID(workspaceId); |       gZenWorkspaces.changeWorkspaceWithID(workspaceId).then(() => { | ||||||
|  |         gBrowser.moveTabTo(folder, { elementIndex: 0, forceUngrouped: true }); | ||||||
|  |       }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     canDropElement(element, targetElement) { |     canDropElement(element, targetElement) { | ||||||
| @@ -1029,9 +1059,7 @@ | |||||||
|           // We don't need to do anything if the URL is invalid. e.g. about:blank |           // We don't need to do anything if the URL is invalid. e.g. about:blank | ||||||
|         } |         } | ||||||
|         let tabLabel = tab.label || ''; |         let tabLabel = tab.label || ''; | ||||||
|         let iconURL = |         let iconURL = gBrowser.getIcon(tab) || PlacesUtils.favicons.defaultFavicon; | ||||||
|           gBrowser.getIcon(tab) || |  | ||||||
|           "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100' height='100'%3E%3C/svg%3E"; |  | ||||||
|  |  | ||||||
|         icon.src = iconURL; |         icon.src = iconURL; | ||||||
|  |  | ||||||
| @@ -1285,6 +1313,11 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       if (group.activeTabs.length === 0) { | ||||||
|  |         group.removeAttribute('has-active'); | ||||||
|  |         this.updateFolderIcon(group, 'close', false); | ||||||
|  |       } | ||||||
|  |  | ||||||
|       this.on_TabGroupExpand({ target: group, forExpandVisible: true }); |       this.on_TabGroupExpand({ target: group, forExpandVisible: true }); | ||||||
|  |  | ||||||
|       gBrowser.tabContainer._invalidateCachedVisibleTabs(); |       gBrowser.tabContainer._invalidateCachedVisibleTabs(); | ||||||
|   | |||||||
| @@ -19,7 +19,9 @@ tab-group[split-view-group] { | |||||||
|     transparent 40% |     transparent 40% | ||||||
|   ); |   ); | ||||||
|  |  | ||||||
|   margin-inline-start: var(--zen-folder-indent) !important; |   :root[zen-sidebar-expanded='true'] & { | ||||||
|  |     margin-inline-start: var(--zen-folder-indent) !important; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   & .tab-group-label { |   & .tab-group-label { | ||||||
|     height: 100% !important; |     height: 100% !important; | ||||||
| @@ -194,7 +196,9 @@ zen-folder { | |||||||
|   -moz-window-dragging: no-drag; |   -moz-window-dragging: no-drag; | ||||||
|   transition: var(--zen-tabbox-element-indent-transition); |   transition: var(--zen-tabbox-element-indent-transition); | ||||||
|  |  | ||||||
|   margin-inline-start: var(--zen-folder-indent) !important; |   :root[zen-sidebar-expanded='true'] & { | ||||||
|  |     margin-inline-start: var(--zen-folder-indent) !important; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   &[selected] > .tab-group-label-container::before { |   &[selected] > .tab-group-label-container::before { | ||||||
|     background-color: color-mix(in srgb, var(--zen-colors-border) 60%, transparent); |     background-color: color-mix(in srgb, var(--zen-colors-border) 60%, transparent); | ||||||
| @@ -243,8 +247,12 @@ zen-folder { | |||||||
|     padding-block-end: 0 !important; |     padding-block-end: 0 !important; | ||||||
|     margin: 0 !important; |     margin: 0 !important; | ||||||
|     height: calc(var(--tab-block-margin) * 2 + var(--tab-min-height)); |     height: calc(var(--tab-block-margin) * 2 + var(--tab-min-height)); | ||||||
|     padding-inline-start: var(--tab-group-label-padding); |     padding-inline: var(--tab-group-label-padding); | ||||||
|     padding-inline-end: calc(var(--tab-group-label-padding) * 2); |  | ||||||
|  |     :root[zen-sidebar-expanded='true'] & { | ||||||
|  |       padding-inline-end: calc(var(--tab-group-label-padding) * 2); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     align-items: center; |     align-items: center; | ||||||
|     font-weight: 600; |     font-weight: 600; | ||||||
|  |  | ||||||
| @@ -308,7 +316,7 @@ zen-folder { | |||||||
|  |  | ||||||
|     & > label, |     & > label, | ||||||
|     & > #tab-label-input { |     & > #tab-label-input { | ||||||
|       padding: 0 0 0 30px !important; |       padding: 0 0 0 32px !important; | ||||||
|       width: 100%; |       width: 100%; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -472,3 +480,9 @@ zen-folder { | |||||||
| .tab-group-overflow-count-container { | .tab-group-overflow-count-container { | ||||||
|   display: none !important; |   display: none !important; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | :root:not([zen-sidebar-expanded]) { | ||||||
|  |   & #context_zenFolderRename { | ||||||
|  |     display: none !important; | ||||||
|  |   } | ||||||
|  | } | ||||||
|   | |||||||
| @@ -620,6 +620,11 @@ | |||||||
|       this.animatingFullOpen = true; |       this.animatingFullOpen = true; | ||||||
|       this.#currentTab.setAttribute('zen-dont-split-glance', true); |       this.#currentTab.setAttribute('zen-dont-split-glance', true); | ||||||
|  |  | ||||||
|  |       const isZenFolder = this.#currentParentTab?.group?.isZenFolder; | ||||||
|  |       if (Services.prefs.getBoolPref('zen.folders.owned-tabs-in-folder') && isZenFolder) { | ||||||
|  |         gBrowser.pinTab(this.#currentTab); | ||||||
|  |       } | ||||||
|  |  | ||||||
|       gBrowser.moveTabAfter(this.#currentTab, this.#currentParentTab); |       gBrowser.moveTabAfter(this.#currentTab, this.#currentParentTab); | ||||||
|  |  | ||||||
|       const browserRect = window.windowUtils.getBoundsWithoutFlushing(this.browserWrapper); |       const browserRect = window.windowUtils.getBoundsWithoutFlushing(this.browserWrapper); | ||||||
| @@ -710,6 +715,10 @@ | |||||||
|         const currentTab = this.#currentTab; |         const currentTab = this.#currentTab; | ||||||
|         const currentParentTab = this.#currentParentTab; |         const currentParentTab = this.#currentParentTab; | ||||||
|  |  | ||||||
|  |         const isZenFolder = currentParentTab?.group?.isZenFolder; | ||||||
|  |         if (Services.prefs.getBoolPref('zen.folders.owned-tabs-in-folder') && isZenFolder) { | ||||||
|  |           gBrowser.pinTab(currentTab); | ||||||
|  |         } | ||||||
|         await this.fullyOpenGlance({ forSplit: true }); |         await this.fullyOpenGlance({ forSplit: true }); | ||||||
|         gZenViewSplitter.splitTabs([currentTab, currentParentTab], 'vsep', 1); |         gZenViewSplitter.splitTabs([currentTab, currentParentTab], 'vsep', 1); | ||||||
|         const browserContainer = currentTab.linkedBrowser?.closest('.browserSidebarContainer'); |         const browserContainer = currentTab.linkedBrowser?.closest('.browserSidebarContainer'); | ||||||
|   | |||||||
| @@ -190,6 +190,7 @@ | |||||||
|     async #initializePinnedTabs(init = false) { |     async #initializePinnedTabs(init = false) { | ||||||
|       const pins = this._pinsCache; |       const pins = this._pinsCache; | ||||||
|       if (!pins?.length || !init) { |       if (!pins?.length || !init) { | ||||||
|  |         this.#hasInitializedPins = true; | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
|  |  | ||||||
| @@ -372,12 +373,12 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |  | ||||||
|       gBrowser._updateTabBarForPinnedTabs(); |  | ||||||
|       gZenUIManager.updateTabsToolbar(); |  | ||||||
|  |  | ||||||
|       setTimeout(() => { |       setTimeout(() => { | ||||||
|         this.#hasInitializedPins = true; |         this.#hasInitializedPins = true; | ||||||
|       }, 0); |       }, 0); | ||||||
|  |  | ||||||
|  |       gBrowser._updateTabBarForPinnedTabs(); | ||||||
|  |       gZenUIManager.updateTabsToolbar(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     _onPinnedTabEvent(action, event) { |     _onPinnedTabEvent(action, event) { | ||||||
| @@ -445,6 +446,18 @@ | |||||||
|         group._pPos |         group._pPos | ||||||
|       ); |       ); | ||||||
|       group.setAttribute('zen-pin-id', id); |       group.setAttribute('zen-pin-id', id); | ||||||
|  |       for (const tab of group.tabs) { | ||||||
|  |         // Only add it if the tab is directly under the group | ||||||
|  |         if ( | ||||||
|  |           tab.pinned && | ||||||
|  |           tab.hasAttribute('zen-pin-id') && | ||||||
|  |           tab.group === group && | ||||||
|  |           this.#hasInitializedPins | ||||||
|  |         ) { | ||||||
|  |           const tabPinId = tab.getAttribute('zen-pin-id'); | ||||||
|  |           await ZenPinnedTabsStorage.addTabToGroup(tabPinId, id, /* position */ tab._pPos); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|       await this.refreshPinnedTabs(); |       await this.refreshPinnedTabs(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -726,6 +739,10 @@ | |||||||
|       const existingPin = this._pinsCache.find((p) => p.uuid === pin.uuid); |       const existingPin = this._pinsCache.find((p) => p.uuid === pin.uuid); | ||||||
|       if (existingPin) { |       if (existingPin) { | ||||||
|         Object.assign(existingPin, pin); |         Object.assign(existingPin, pin); | ||||||
|  |       } else { | ||||||
|  |         // We shouldn't need it, but just in case there's | ||||||
|  |         // a race condition while making new pinned tabs. | ||||||
|  |         this._pinsCache.push(pin); | ||||||
|       } |       } | ||||||
|       await ZenPinnedTabsStorage.savePin(pin, notifyObservers); |       await ZenPinnedTabsStorage.savePin(pin, notifyObservers); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -295,7 +295,9 @@ | |||||||
|         var(--zen-tabbox-element-indent-transition); |         var(--zen-tabbox-element-indent-transition); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     margin-inline-start: var(--zen-folder-indent) !important; |     :root[zen-sidebar-expanded='true'] & { | ||||||
|  |       margin-inline-start: var(--zen-folder-indent) !important; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /* Hide specific empty tabs (likely placeholders) */ |     /* Hide specific empty tabs (likely placeholders) */ | ||||||
|     &[zen-empty-tab] { |     &[zen-empty-tab] { | ||||||
|   | |||||||
| @@ -137,7 +137,7 @@ | |||||||
|       document.getElementById('zen-welcome-pages').style.display = 'flex'; |       document.getElementById('zen-welcome-pages').style.display = 'flex'; | ||||||
|       document.getElementById('zen-welcome-start').remove(); |       document.getElementById('zen-welcome-start').remove(); | ||||||
|       window.maximize(); |       window.maximize(); | ||||||
|       animate('#zen-welcome-pages', { opacity: [0, 1] }, { delay: 0.2, duration: 0.2 }); |       animate('#zen-welcome-pages', { opacity: [0, 1] }, { delay: 0.2, duration: 0.1 }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     async fadeInTitles(page) { |     async fadeInTitles(page) { | ||||||
| @@ -238,7 +238,7 @@ | |||||||
|           delay: getMotion().stagger(0.05, { startDelay: 0.3 }), |           delay: getMotion().stagger(0.05, { startDelay: 0.3 }), | ||||||
|           type: 'spring', |           type: 'spring', | ||||||
|           bounce: 0, |           bounce: 0, | ||||||
|           duration: 0.2, |           duration: 0.1, | ||||||
|         } |         } | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -271,7 +271,7 @@ | |||||||
|       await animate('#zen-welcome-page-content', { x: [0, '100%'] }, { bounce: 0 }); |       await animate('#zen-welcome-page-content', { x: [0, '100%'] }, { bounce: 0 }); | ||||||
|       document.getElementById('zen-welcome-page-content').remove(); |       document.getElementById('zen-welcome-page-content').remove(); | ||||||
|       await this.animHeart(); |       await this.animHeart(); | ||||||
|       this._pinRemainingTabs(); |       await this.#pinRemainingTabs(); | ||||||
|       await animate('#zen-welcome-pages', { opacity: [1, 0] }); |       await animate('#zen-welcome-pages', { opacity: [1, 0] }); | ||||||
|       document.getElementById('zen-welcome').remove(); |       document.getElementById('zen-welcome').remove(); | ||||||
|       document.documentElement.removeAttribute('zen-welcome-stage'); |       document.documentElement.removeAttribute('zen-welcome-stage'); | ||||||
| @@ -288,10 +288,13 @@ | |||||||
|       gZenUIManager.showToast('zen-welcome-finished'); |       gZenUIManager.showToast('zen-welcome-finished'); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     _pinRemainingTabs() { |     async #pinRemainingTabs() { | ||||||
|       for (const tab of _tabsToPin) { |       for (const tab of _tabsToPin) { | ||||||
|         tab.setAttribute('zen-workspace-id', gZenWorkspaces.activeWorkspace); |         tab.setAttribute('zen-workspace-id', gZenWorkspaces.activeWorkspace); | ||||||
|         gBrowser.pinTab(tab); |         gBrowser.pinTab(tab); | ||||||
|  |         await new Promise((resolve) => { | ||||||
|  |           tab.addEventListener('ZenPinnedTabCreated', resolve, { once: true }); | ||||||
|  |         }); | ||||||
|       } |       } | ||||||
|       for (const tab of _tabsToPinEssentials) { |       for (const tab of _tabsToPinEssentials) { | ||||||
|         tab.removeAttribute('pending'); // Make it appear loaded |         tab.removeAttribute('pending'); // Make it appear loaded | ||||||
|   | |||||||
| @@ -478,7 +478,7 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature { | |||||||
|     return this.getEssentialsSection(currentWorkspace?.containerTabId); |     return this.getEssentialsSection(currentWorkspace?.containerTabId); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async _createWorkspaceTabsSection(workspace, tabs) { |   async _createWorkspaceTabsSection(workspace, tabs = []) { | ||||||
|     const workspaceWrapper = document.createXULElement('zen-workspace'); |     const workspaceWrapper = document.createXULElement('zen-workspace'); | ||||||
|     const container = document.getElementById('tabbrowser-arrowscrollbox'); |     const container = document.getElementById('tabbrowser-arrowscrollbox'); | ||||||
|     workspaceWrapper.id = workspace.uuid; |     workspaceWrapper.id = workspace.uuid; | ||||||
| @@ -1354,6 +1354,12 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature { | |||||||
|           detail: { activeIndex: browser.gZenWorkspaces.activeWorkspace }, |           detail: { activeIndex: browser.gZenWorkspaces.activeWorkspace }, | ||||||
|         }) |         }) | ||||||
|       ); |       ); | ||||||
|  |       for (const workspace of workspaces.workspaces) { | ||||||
|  |         // Add workspace elements if they dont exist on other windows | ||||||
|  |         if (!browser.gZenWorkspaces.workspaceElement(workspace.uuid)) { | ||||||
|  |           await browser.gZenWorkspaces._createWorkspaceTabsSection(workspace); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|     await browser.gZenWorkspaces.workspaceBookmarks(); |     await browser.gZenWorkspaces.workspaceBookmarks(); | ||||||
|     if (!ignoreStrip) { |     if (!ignoreStrip) { | ||||||
| @@ -1499,7 +1505,7 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature { | |||||||
|     return true; |     return true; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   _prepareNewWorkspace(window) { |   #prepareNewWorkspace(window) { | ||||||
|     document.documentElement.setAttribute('zen-workspace-id', window.uuid); |     document.documentElement.setAttribute('zen-workspace-id', window.uuid); | ||||||
|     let tabCount = 0; |     let tabCount = 0; | ||||||
|     for (let tab of gBrowser.tabs) { |     for (let tab of gBrowser.tabs) { | ||||||
| @@ -1535,7 +1541,7 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature { | |||||||
|  |  | ||||||
|   async changeWorkspaceWithID(workspaceID, ...args) { |   async changeWorkspaceWithID(workspaceID, ...args) { | ||||||
|     const workspace = this.getWorkspaceFromId(workspaceID); |     const workspace = this.getWorkspaceFromId(workspaceID); | ||||||
|     return await this.changeWorkspace(workspace, ...args); |     await this.changeWorkspace(workspace, ...args); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   async changeWorkspace(workspace, ...args) { |   async changeWorkspace(workspace, ...args) { | ||||||
| @@ -1618,7 +1624,7 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   #fixTabPositions() { |   #fixTabPositions() { | ||||||
|     gBrowser.tabContainer._invalidateCachedTabs(); |     this.tabContainer._invalidateCachedTabs(); | ||||||
|     // Fix tabs _tPos values relative to the actual order |     // Fix tabs _tPos values relative to the actual order | ||||||
|     const tabs = gBrowser.tabs; |     const tabs = gBrowser.tabs; | ||||||
|     const usedGroups = new Set(); |     const usedGroups = new Set(); | ||||||
| @@ -2320,7 +2326,7 @@ var gZenWorkspaces = new (class extends nsZenMultiWindowFeature { | |||||||
|       containerTabId, |       containerTabId, | ||||||
|     }; |     }; | ||||||
|     if (moveTabs) { |     if (moveTabs) { | ||||||
|       this._prepareNewWorkspace(workspace); |       this.#prepareNewWorkspace(workspace); | ||||||
|       await this._createWorkspaceTabsSection(workspace, tabs); |       await this._createWorkspaceTabsSection(workspace, tabs); | ||||||
|       await this._organizeWorkspaceStripLocations(workspace); |       await this._organizeWorkspaceStripLocations(workspace); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -5,8 +5,8 @@ | |||||||
|   "binaryName": "zen", |   "binaryName": "zen", | ||||||
|   "version": { |   "version": { | ||||||
|     "product": "firefox", |     "product": "firefox", | ||||||
|     "version": "142.0", |     "version": "142.0.1", | ||||||
|     "candidate": "142.0" |     "candidate": "142.0.1" | ||||||
|   }, |   }, | ||||||
|   "buildOptions": { |   "buildOptions": { | ||||||
|     "generateBranding": true |     "generateBranding": true | ||||||
| @@ -19,7 +19,7 @@ | |||||||
|       "brandShortName": "Zen", |       "brandShortName": "Zen", | ||||||
|       "brandFullName": "Zen Browser", |       "brandFullName": "Zen Browser", | ||||||
|       "release": { |       "release": { | ||||||
|         "displayVersion": "1.15b", |         "displayVersion": "1.15.2b", | ||||||
|         "github": { |         "github": { | ||||||
|           "repo": "zen-browser/desktop" |           "repo": "zen-browser/desktop" | ||||||
|         }, |         }, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user