Compare commits

...

29 Commits

Author SHA1 Message Date
Mr. M
439a27d947 feat: New tooltip UI, b=no-bug, c=no-component 2025-08-29 17:44:29 +02:00
Mr. M
b204671931 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-08-29 17:43:15 +02:00
Mr. M
d035348896 feat: New status bar UI, b=no-bug, c=mods, common 2025-08-29 17:42:53 +02:00
Rodrigo L. Napolitano
72433745bc fix: adds translation for the 'new folder' feature in Portuguese language, p=#10111 2025-08-29 16:09:38 +02:00
Mr. M
2436ada221 fix: Always expand folders when adding a sub-folder, b=no-bug, c=folders 2025-08-29 13:33:35 +02:00
Mr. M
4a5141c15c Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-08-29 00:12:29 +02:00
Mr. M
1015537a91 chore: Bump version, b=no-bug, c=no-component 2025-08-29 00:12:25 +02:00
Mr. M
89cafdaa0b fix: Fixed not being able to rename folders in double toolbar, b=no-bug, c=folders 2025-08-29 00:12:02 +02:00
octaviusz
3723517d7d fix: Pin current tab when glance full opening from Zen Folder (#10073) 2025-08-28 22:22:48 +02:00
octaviusz
c095bc7604 fix: Pin current tab when glance splitting from Zen Folder (#10072) 2025-08-28 20:01:18 +02:00
Mr. M
e312e3fe8d fix: Fixed moving folders with sub-folders into new spaces, b=no-bug, c=folders 2025-08-28 16:43:05 +02:00
Mr. M
70aeebaf66 fix: Fixed moving folders to different spaces, b=no-bug, c=folders, workspaces 2025-08-28 16:39:18 +02:00
Mr. M
f9ca9cc74c fix: Fixed creating workspaces with multiple windows opened, b=no-bug, c=workspaces 2025-08-28 16:26:22 +02:00
Mr. M
d9646f939c fix: Only add folder direct childs to the database, b=no-bug, c=tabs 2025-08-28 16:15:55 +02:00
Mr. M
8f0292d836 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-08-28 16:08:58 +02:00
Mr. M
95b137ac13 fix: Fixed various issues with storing folders at startup, b=no-bug, c=tabs, welcome 2025-08-28 16:08:54 +02:00
mr. m
b1fcaeb97f New Crowdin updates, p=#10055 2025-08-28 13:18:15 +02:00
Mr. M
31def1147a fix: Fixed context menu text inconsistency, b=bug #10016, c=tabs 2025-08-28 13:05:14 +02:00
Mr. M
0a80765589 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-08-28 13:01:17 +02:00
Mr. M
e34a053dd0 fix: Fixed opening new links in collapsed folders, b=closes #10022, c=folders 2025-08-28 13:00:17 +02:00
mr. m
5e790efdce fix: Fixed settings page not starting up, b=no-bug, c=no-component 2025-08-28 12:41:43 +02:00
Mr. M
005cdf53bd fix: Dont restore pinned tabs for deferred session stores, b=no-bug, c=no-component 2025-08-28 11:57:34 +02:00
Mr. M
429f74a7c7 feat: Set the style directly instead of using motion, b=no-bug, c=folders 2025-08-28 01:27:22 +02:00
octaviusz
1f72765227 fix: Some fixes for folders, p=#10038 2025-08-28 01:20:11 +02:00
Mr. M
91f5e104d2 fix: Move 'unpack folder' next to 'delete folder', b=no-bug, c=no-component 2025-08-28 01:10:40 +02:00
mr. m
994741f323 New Crowdin updates (#10014) 2025-08-27 19:57:11 +02:00
Mr. M
a4ba3340e1 Merge branch 'dev' of https://github.com/zen-browser/desktop into dev 2025-08-27 19:56:04 +02:00
Mr. M
5852b2aaa6 chore: Updated to firefox 142.0.1, b=no-bug, c=l10n, tabs, folders 2025-08-27 19:55:58 +02:00
Mr. M
257547acbd fix: Fixed folder context menu issues with collapsed toolbar, b=no-bug, c=folders 2025-08-27 14:57:26 +02:00
67 changed files with 356 additions and 208 deletions

View File

@@ -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

View File

@@ -1 +1 @@
784e5dbc4955e29ee7a4e0b88adefdd230f2e9fe df0d5e625b9e55c502d3e9e81b29a0d52d0f8d20

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 🤔

View File

@@ -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

View File

@@ -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 = Επέκταση Πλαϊνής στήλης

View File

@@ -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

View File

@@ -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 =

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -10,7 +10,7 @@ zen-layout-collapsed-toolbar = Barre doutils 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 dAperçu zen-glance-header = Paramètres généraux dAperç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 longlet .label = Fermer longlet
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 donglets, masquer lindicateur de conteneur par défaut .label = Dans la barre donglets, masquer lindicateur de conteneur par défaut
zen-key-unsaved = Raccourci non sauvegardé! Pour lenregistrer, veuillez le resaisir et en appuyer sur Échap. zen-key-unsaved = Raccourci non sauvegardé! Pour lenregistrer, 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 lespace de travail où le conteneur est défini par défaut .label = À l'ouverture des onglets du conteneur, basculer vers lEspace 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

View File

@@ -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

View File

@@ -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 🤔

View File

@@ -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ú

View File

@@ -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 = אין כרטיסיות שתואמות לחיפוש 🤔

View File

@@ -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 = סמלים

View File

@@ -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 = הרחבת סרגל צדדי

View File

@@ -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 }? פעולה זו לא ניתנת לביטול.

View File

@@ -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

View File

@@ -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 🤔

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 = サイドバーを展開する

View File

@@ -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 = 사이드바 확장

View File

@@ -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ą

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 = Развернуть боковую панель

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 = Розгорнути бічну панель

View File

@@ -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 nht các tùy chỉnh khi mở trình duyệt .label = Tự động cập nht 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 = Thit 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

View File

@@ -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 🤔

View File

@@ -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

View File

@@ -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.

View File

@@ -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 = 展开侧边栏

View File

@@ -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 = 展開側邊欄

View File

@@ -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)'

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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 @@
} }
} }

View File

@@ -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;
} }
} }

View File

@@ -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,

View File

@@ -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;
}
}

View File

@@ -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',

View File

@@ -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();

View File

@@ -19,7 +19,9 @@ tab-group[split-view-group] {
transparent 40% transparent 40%
); );
:root[zen-sidebar-expanded='true'] & {
margin-inline-start: var(--zen-folder-indent) !important; 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);
:root[zen-sidebar-expanded='true'] & {
margin-inline-start: var(--zen-folder-indent) !important; 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);
:root[zen-sidebar-expanded='true'] & {
padding-inline-end: calc(var(--tab-group-label-padding) * 2); 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;
}
}

View File

@@ -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');

View File

@@ -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);
} }

View File

@@ -295,7 +295,9 @@
var(--zen-tabbox-element-indent-transition); var(--zen-tabbox-element-indent-transition);
} }
:root[zen-sidebar-expanded='true'] & {
margin-inline-start: var(--zen-folder-indent) !important; 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] {

View File

@@ -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

View File

@@ -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);
} }

View File

@@ -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"
}, },