From e571f22d5db956b4d8ef95a457abc6901a2879ae Mon Sep 17 00:00:00 2001 From: Nils Pukropp Date: Sat, 14 Nov 2026 02:48:29 +0100 Subject: [PATCH] feat(gui,core): larger icon sizes in My files The icon grid's size slider stops at 256 px instead of 144 px, which is big enough to tell photos apart by their thumbnail. Thumbnails are 512 px, so they stay sharp at that size on a 2x screen. Names may wrap wider on the larger tiles. Ctrl+plus, Ctrl+minus and Ctrl+0 step and reset the size while the grid is shown, as they do in Photos. The size is saved in the config as files_view.icon_size once the slider rests; configs without it keep the 72 px default. --- crates/pdfs-core/src/config.rs | 7 + crates/pdfs-gui/resources/style.css | 2 +- crates/pdfs-gui/src/app/main.rs | 19 + crates/pdfs-gui/src/app/pages/browser.rs | 49 +- crates/pdfs-gui/src/app/widgets/file_list.rs | 2 +- docs/CHANGELOG.md | 3 + po/de.po | 774 +++++++++---------- po/en_GB.po | 774 +++++++++---------- po/es.po | 774 +++++++++---------- po/fr.po | 774 +++++++++---------- po/it.po | 774 +++++++++---------- po/nl.po | 774 +++++++++---------- po/pdfs.pot | 774 +++++++++---------- po/pl.po | 774 +++++++++---------- po/pt_BR.po | 774 +++++++++---------- 15 files changed, 3561 insertions(+), 3487 deletions(-) diff --git a/crates/pdfs-core/src/config.rs b/crates/pdfs-core/src/config.rs index 4064fcc..df8ad87 100644 --- a/crates/pdfs-core/src/config.rs +++ b/crates/pdfs-core/src/config.rs @@ -224,6 +224,10 @@ pub struct FilesView { pub descending: bool, /// Folders ahead of files, whatever the sort. pub folders_first: bool, + /// The icon grid's thumbnail edge in logical pixels. `None` means the + /// app's default. + #[serde(skip_serializing_if = "Option::is_none")] + pub icon_size: Option, } impl Default for FilesView { @@ -233,6 +237,7 @@ impl Default for FilesView { sort: FileSort::Name, descending: false, folders_first: true, + icon_size: None, } } } @@ -777,6 +782,7 @@ mod tests { sort: FileSort::Modified, descending: true, folders_first: false, + icon_size: Some(192), }, photos_view: PhotosView { row_height: Some(240), @@ -856,6 +862,7 @@ mod tests { let partial: FilesView = serde_json::from_str(r#"{"sort":"size"}"#).unwrap(); assert_eq!(partial.sort, FileSort::Size); assert!(partial.folders_first); + assert_eq!(partial.icon_size, None); } #[test] diff --git a/crates/pdfs-gui/resources/style.css b/crates/pdfs-gui/resources/style.css index af7b2f2..16ade45 100644 --- a/crates/pdfs-gui/resources/style.css +++ b/crates/pdfs-gui/resources/style.css @@ -53,7 +53,7 @@ button.sidebar-account { padding: 4px 8px; font-weight: normal; } /* The folder on screen, last in the breadcrumb trail: a flat button's side * padding, so the "›" before it is spaced like the ones between buttons. */ .crumb-current { padding: 0 10px; } -scale.browser-status-meter trough { min-width: 104px; min-height: 6px; } +scale.browser-status-meter trough { min-width: 140px; min-height: 6px; } .bulk-bar { padding: 6px 8px; border-radius: 12px; background: color-mix(in srgb, var(--accent-bg-color) 12%, transparent); } .dropzone { border: 2px dashed alpha(currentColor, 0.25); border-radius: 16px; padding: 28px 18px; transition: background 160ms ease, border-color 160ms ease; } .dropzone-active { border-color: var(--accent-bg-color); background: color-mix(in srgb, var(--accent-bg-color) 10%, transparent); } diff --git a/crates/pdfs-gui/src/app/main.rs b/crates/pdfs-gui/src/app/main.rs index a416ee4..1678368 100644 --- a/crates/pdfs-gui/src/app/main.rs +++ b/crates/pdfs-gui/src/app/main.rs @@ -488,6 +488,7 @@ fn build_window(app: &adw::Application) { empty_actions: browser_widgets.empty_actions.clone(), summary: browser_widgets.summary.clone(), zoom: browser_widgets.zoom.clone(), + zoom_save: RefCell::new(None), }, details: DetailsState { details: browser_widgets.details, @@ -1523,6 +1524,9 @@ fn show_shortcuts(window: &adw::ApplicationWindow) { ("Left Right", gettext_noop("Back / forward")), ("Up", gettext_noop("Parent folder")), ("1 2", gettext_noop("Grid / list")), + ("plus", gettext_noop("Larger thumbnails")), + ("minus", gettext_noop("Smaller thumbnails")), + ("0", gettext_noop("Reset thumbnail size")), ("F2", gettext_noop("Rename")), ("Delete", gettext_noop("Move to Trash")), ("Escape", gettext_noop("Clear the selection")), @@ -1588,6 +1592,21 @@ fn install_shortcuts(ui: &Rc, window: &adw::ApplicationWindow) { ui.browser.search.grab_focus(); } gtk4::gdk::Key::n | gtk4::gdk::Key::N if ctrl && on_browser => prompt_new_folder(&ui), + gtk4::gdk::Key::plus | gtk4::gdk::Key::equal | gtk4::gdk::Key::KP_Add + if ctrl && on_browser && !ui.browser.files.shows_list() => + { + zoom_files(&ui, 1) + } + gtk4::gdk::Key::minus | gtk4::gdk::Key::KP_Subtract + if ctrl && on_browser && !ui.browser.files.shows_list() => + { + zoom_files(&ui, -1) + } + gtk4::gdk::Key::_0 | gtk4::gdk::Key::KP_0 + if ctrl && on_browser && !ui.browser.files.shows_list() => + { + zoom_files(&ui, 0) + } gtk4::gdk::Key::_1 | gtk4::gdk::Key::_2 if ctrl && on_browser => set_files_view( &ui, FilesView { diff --git a/crates/pdfs-gui/src/app/pages/browser.rs b/crates/pdfs-gui/src/app/pages/browser.rs index 59ded50..2932916 100644 --- a/crates/pdfs-gui/src/app/pages/browser.rs +++ b/crates/pdfs-gui/src/app/pages/browser.rs @@ -77,6 +77,8 @@ pub(crate) struct BrowserState { /// zoom value, and Proton account storage usage. pub(crate) summary: gtk4::Label, pub(crate) zoom: gtk4::Scale, + /// Saves the zoom once the slider rests, not on every step. + pub(crate) zoom_save: RefCell>, } /// Idle pause after the last keystroke before a search query is sent, so typing @@ -87,9 +89,11 @@ pub(crate) const SEARCH_DEBOUNCE: Duration = Duration::from_millis(250); pub(crate) const SEARCH_LIMIT: usize = 200; /// Browser grid thumbnail size controlled by the bottom zoom slider. The -/// default preserves the former fixed 72 px presentation. +/// default preserves the former fixed 72 px presentation. The largest size is +/// big enough to tell photos apart by their thumbnail, and thumbnails are +/// 512 px, so they stay sharp up to it on a 2× screen. pub(crate) const GRID_THUMB_MIN: i32 = 48; -pub(crate) const GRID_THUMB_MAX: i32 = 144; +pub(crate) const GRID_THUMB_MAX: i32 = 256; pub(crate) const GRID_THUMB_DEFAULT: i32 = 72; pub(crate) const GRID_THUMB_STEP: i32 = 8; @@ -801,6 +805,7 @@ pub(crate) fn wire_browser(ui: &Rc) { &[], ))); ui_zoom.browser.files.set_thumbnail_size(size); + save_icon_size(&ui_zoom, size); }); files @@ -1306,6 +1311,11 @@ pub(crate) fn wire_browser_actions(ui: &Rc, build_thumbnails: >k4::Button) let view = ui.dirs.load_config().files_view; ui.browser.view.set(view); + if let Some(size) = view.icon_size { + ui.browser + .zoom + .set_value(f64::from(size.clamp(GRID_THUMB_MIN, GRID_THUMB_MAX))); + } let layout = gio::SimpleAction::new_stateful( "view", Some(glib::VariantTy::STRING), @@ -1407,6 +1417,41 @@ pub(crate) fn wire_browser_actions(ui: &Rc, build_thumbnails: >k4::Button) ui.browser.content.add_controller(drop); } +/// Remember the grid's icon size, once the slider has rested for a moment. +fn save_icon_size(ui: &Rc, size: i32) { + let mut view = ui.browser.view.get(); + if view.icon_size == Some(size) { + return; + } + view.icon_size = Some(size); + ui.browser.view.set(view); + if let Some(source) = ui.browser.zoom_save.borrow_mut().take() { + source.remove(); + } + let ui_save = ui.clone(); + let source = glib::timeout_add_local_once(Duration::from_millis(500), move || { + ui_save.browser.zoom_save.borrow_mut().take(); + let mut config = ui_save.dirs.load_config(); + config.files_view.icon_size = ui_save.browser.view.get().icon_size; + if let Err(e) = ui_save.dirs.save_config(&config) { + tracing::warn!("cannot save the icon size: {e}"); + } + }); + *ui.browser.zoom_save.borrow_mut() = Some(source); +} + +/// Step the grid's icon size by `steps` slider notches; `0` resets it. +pub(crate) fn zoom_files(ui: &Rc, steps: i32) { + let zoom = &ui.browser.zoom; + let size = if steps == 0 { + GRID_THUMB_DEFAULT + } else { + (zoom.value().round() as i32 + steps * GRID_THUMB_STEP) + .clamp(GRID_THUMB_MIN, GRID_THUMB_MAX) + }; + zoom.set_value(f64::from(size)); +} + fn layout_name(view: FilesView) -> &'static str { if view.list { "list" } else { "grid" } } diff --git a/crates/pdfs-gui/src/app/widgets/file_list.rs b/crates/pdfs-gui/src/app/widgets/file_list.rs index dac98cf..06d2d46 100644 --- a/crates/pdfs-gui/src/app/widgets/file_list.rs +++ b/crates/pdfs-gui/src/app/widgets/file_list.rs @@ -478,7 +478,7 @@ pub(crate) fn text_column( fn resize_grid_tile(thumbnail: >k4::Overlay, label: >k4::Label, size: i32) { resize_file_thumbnail(thumbnail, size, grid_fallback_size(size)); - let name_width = (size / 6 + 1).clamp(8, 24); + let name_width = (size / 6 + 1).clamp(8, 40); label.set_width_chars(name_width); label.set_max_width_chars(name_width); } diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index be0a3b7..53aec14 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -61,6 +61,9 @@ Existing folders remain device backups; older builds cannot open the upgraded da - The zoom level and the tile shape are remembered between runs. - In the photo viewer, the details panel lies over the photo when the window is narrow instead of squeezing it. +- **Larger icons in My files.** The icon size slider goes up to 256 px, big enough to + tell photos apart by their thumbnail. Ctrl+plus, Ctrl+minus and Ctrl+0 change it from + the keyboard, and the size is remembered between runs. ### Fixed diff --git a/po/de.po b/po/de.po index 1ba5634..e72ce10 100644 --- a/po/de.po +++ b/po/de.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: proton-drive-linux 2.1.0\n" "Report-Msgid-Bugs-To: https://github.com/narrrl/proton-drive-linux/issues\n" -"POT-Creation-Date: 2026-11-14 02:34+0100\n" +"POT-Creation-Date: 2026-11-14 02:47+0100\n" "PO-Revision-Date: 2026-09-23 12:00+0200\n" "Last-Translator: Proton Drive for Linux contributors\n" "Language-Team: German\n" @@ -31,7 +31,7 @@ msgstr[1] "vor {n} Min." #. Translators: strftime format for the time a photo was taken, shown on its tile, such as "14:05". #: crates/pdfs-gui/src/app/dates.rs:44 #: crates/pdfs-gui/src/app/pages/activity.rs:840 -#: crates/pdfs-gui/src/app/pages/photos.rs:3533 +#: crates/pdfs-gui/src/app/pages/photos.rs:3534 msgid "%H:%M" msgstr "%H:%M" @@ -57,87 +57,87 @@ msgstr "%-d. %b %Y" msgid "%A, %B %-d, %Y, %H:%M" msgstr "%A, %-d. %B %Y, %H:%M" -#: crates/pdfs-gui/src/app/main.rs:864 +#: crates/pdfs-gui/src/app/main.rs:865 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 -#: crates/pdfs-gui/src/app/pages/browser.rs:454 -#: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1249 -#: crates/pdfs-gui/src/app/pages/browser.rs:2168 -#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/browser.rs:458 +#: crates/pdfs-gui/src/app/pages/browser.rs:838 +#: crates/pdfs-gui/src/app/pages/browser.rs:1254 +#: crates/pdfs-gui/src/app/pages/browser.rs:2213 +#: crates/pdfs-gui/src/app/pages/browser.rs:2292 #: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" msgstr "Meine Dateien" -#: crates/pdfs-gui/src/app/main.rs:865 crates/pdfs-gui/src/app/main.rs:1532 +#: crates/pdfs-gui/src/app/main.rs:866 crates/pdfs-gui/src/app/main.rs:1536 #: crates/pdfs-gui/src/app/pages/albums.rs:636 #: crates/pdfs-gui/src/app/pages/photos.rs:898 #: crates/pdfs-gui/src/app/pages/places.rs:439 msgid "Photos" msgstr "Fotos" -#: crates/pdfs-gui/src/app/main.rs:868 +#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:484 msgid "Shared with me" msgstr "Mit mir geteilt" -#: crates/pdfs-gui/src/app/main.rs:873 +#: crates/pdfs-gui/src/app/main.rs:874 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 msgid "Shared by me" msgstr "Von mir geteilt" -#: crates/pdfs-gui/src/app/main.rs:876 +#: crates/pdfs-gui/src/app/main.rs:877 #: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:493 msgid "Computers" msgstr "Computer" -#: crates/pdfs-gui/src/app/main.rs:877 +#: crates/pdfs-gui/src/app/main.rs:878 #: crates/pdfs-gui/src/app/pages/trash.rs:101 msgid "Trash" msgstr "Papierkorb" #. Translators: sidebar entry for the page listing this computer's synced folders. -#: crates/pdfs-gui/src/app/main.rs:879 +#: crates/pdfs-gui/src/app/main.rs:880 msgid "Sync" msgstr "Synchronisierung" #. Translators: a failed action's toast. {what} says what failed, such as #. "Couldn't rename"; {detail} is the reason, usually untranslated text #. from the mount service. -#: crates/pdfs-gui/src/app/main.rs:1229 +#: crates/pdfs-gui/src/app/main.rs:1230 #: crates/pdfs-gui/src/app/pages/takeout.rs:714 #, rust-format msgid "{what}: {detail}" msgstr "{what}: {detail}" -#: crates/pdfs-gui/src/app/main.rs:1252 +#: crates/pdfs-gui/src/app/main.rs:1253 msgid "You're offline" msgstr "Keine Internetverbindung" -#: crates/pdfs-gui/src/app/main.rs:1253 +#: crates/pdfs-gui/src/app/main.rs:1254 msgid "That's not there any more" msgstr "Das ist nicht mehr vorhanden" -#: crates/pdfs-gui/src/app/main.rs:1254 +#: crates/pdfs-gui/src/app/main.rs:1255 msgid "You don't have access to that" msgstr "Kein Zugriff darauf" -#: crates/pdfs-gui/src/app/main.rs:1255 +#: crates/pdfs-gui/src/app/main.rs:1256 msgid "Something changed this first" msgstr "Etwas anderes hat dies zuerst geändert" -#: crates/pdfs-gui/src/app/main.rs:1256 +#: crates/pdfs-gui/src/app/main.rs:1257 msgid "Your Proton Drive is full" msgstr "Das Proton Drive ist voll" -#: crates/pdfs-gui/src/app/main.rs:1343 +#: crates/pdfs-gui/src/app/main.rs:1344 msgid "Proton Drive for Linux" msgstr "Proton Drive for Linux" -#: crates/pdfs-gui/src/app/main.rs:1351 +#: crates/pdfs-gui/src/app/main.rs:1352 msgid "" "Files-on-demand Proton Drive for the Linux desktop.\n" "\n" @@ -149,23 +149,23 @@ msgstr "" "Inoffizieller Client – nicht mit Proton AG verbunden, von Proton AG " "unterstützt oder befürwortet." -#: crates/pdfs-gui/src/app/main.rs:1356 +#: crates/pdfs-gui/src/app/main.rs:1357 msgid "Source Code" msgstr "Quellcode" -#: crates/pdfs-gui/src/app/main.rs:1360 +#: crates/pdfs-gui/src/app/main.rs:1361 msgid "Proton Terms of Service" msgstr "Nutzungsbedingungen von Proton" -#: crates/pdfs-gui/src/app/main.rs:1364 +#: crates/pdfs-gui/src/app/main.rs:1365 msgid "Proton Privacy Policy" msgstr "Datenschutzerklärung von Proton" -#: crates/pdfs-gui/src/app/main.rs:1369 +#: crates/pdfs-gui/src/app/main.rs:1370 msgid "Disclaimer" msgstr "Haftungsausschluss" -#: crates/pdfs-gui/src/app/main.rs:1373 +#: crates/pdfs-gui/src/app/main.rs:1374 msgid "" "This is an unofficial, community-built client. It is not affiliated with, " "endorsed by, or supported by Proton AG.\n" @@ -190,7 +190,7 @@ msgstr "" "bereitgestellt. Daten, deren Verlust nicht hinnehmbar ist, sollten " "zusätzlich gesichert werden." -#: crates/pdfs-gui/src/app/main.rs:1381 +#: crates/pdfs-gui/src/app/main.rs:1382 msgid "" "Places are named with data from GeoNames, licensed under GeoNames, lizenziert unter CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -210,7 +210,7 @@ msgstr "" "href=\"https://www.naturalearthdata.com/\">Natural Earth gezeichnet, die " "gemeinfrei sind." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, licensed under CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -207,7 +207,7 @@ msgstr "" "\">Natural Earth land outlines and country borders, which are in the " "public domain." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, con licencia CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -208,7 +208,7 @@ msgstr "" "fronteras de países de Natural " "Earth, que son de dominio público." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, sous licence CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -209,7 +209,7 @@ msgstr "" "frontières des pays de Natural " "Earth, qui sont dans le domaine public." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, con licenza CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -207,7 +207,7 @@ msgstr "" "confini nazionali di Natural " "Earth, che sono di pubblico dominio." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, gelicentieerd onder CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -208,7 +208,7 @@ msgstr "" "href=\"https://www.naturalearthdata.com/\">Natural Earth, die in het " "publieke domein vallen." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the \n" "Language-Team: LANGUAGE \n" @@ -34,7 +34,7 @@ msgstr[1] "" #. Translators: strftime format for the time a photo was taken, shown on its tile, such as "14:05". #: crates/pdfs-gui/src/app/dates.rs:44 #: crates/pdfs-gui/src/app/pages/activity.rs:840 -#: crates/pdfs-gui/src/app/pages/photos.rs:3533 +#: crates/pdfs-gui/src/app/pages/photos.rs:3534 msgid "%H:%M" msgstr "" @@ -60,87 +60,87 @@ msgstr "" msgid "%A, %B %-d, %Y, %H:%M" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:864 +#: crates/pdfs-gui/src/app/main.rs:865 #: crates/pdfs-gui/src/app/pages/activity_text.rs:543 -#: crates/pdfs-gui/src/app/pages/browser.rs:454 -#: crates/pdfs-gui/src/app/pages/browser.rs:833 -#: crates/pdfs-gui/src/app/pages/browser.rs:1249 -#: crates/pdfs-gui/src/app/pages/browser.rs:2168 -#: crates/pdfs-gui/src/app/pages/browser.rs:2247 +#: crates/pdfs-gui/src/app/pages/browser.rs:458 +#: crates/pdfs-gui/src/app/pages/browser.rs:838 +#: crates/pdfs-gui/src/app/pages/browser.rs:1254 +#: crates/pdfs-gui/src/app/pages/browser.rs:2213 +#: crates/pdfs-gui/src/app/pages/browser.rs:2292 #: crates/pdfs-gui/src/app/pages/locations.rs:1721 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:252 #: crates/pdfs-gui/src/app/pages/trash.rs:191 crates/pdfs-gui/src/prompt.rs:171 msgid "My files" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:865 crates/pdfs-gui/src/app/main.rs:1532 +#: crates/pdfs-gui/src/app/main.rs:866 crates/pdfs-gui/src/app/main.rs:1536 #: crates/pdfs-gui/src/app/pages/albums.rs:636 #: crates/pdfs-gui/src/app/pages/photos.rs:898 #: crates/pdfs-gui/src/app/pages/places.rs:439 msgid "Photos" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:868 +#: crates/pdfs-gui/src/app/main.rs:869 #: crates/pdfs-gui/src/app/pages/shared.rs:168 #: crates/pdfs-gui/src/app/pages/shared.rs:484 msgid "Shared with me" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:873 +#: crates/pdfs-gui/src/app/main.rs:874 #: crates/pdfs-gui/src/app/pages/shared_by_me.rs:120 msgid "Shared by me" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:876 +#: crates/pdfs-gui/src/app/main.rs:877 #: crates/pdfs-gui/src/app/pages/devices.rs:140 #: crates/pdfs-gui/src/app/pages/devices.rs:493 msgid "Computers" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:877 +#: crates/pdfs-gui/src/app/main.rs:878 #: crates/pdfs-gui/src/app/pages/trash.rs:101 msgid "Trash" msgstr "" #. Translators: sidebar entry for the page listing this computer's synced folders. -#: crates/pdfs-gui/src/app/main.rs:879 +#: crates/pdfs-gui/src/app/main.rs:880 msgid "Sync" msgstr "" #. Translators: a failed action's toast. {what} says what failed, such as #. "Couldn't rename"; {detail} is the reason, usually untranslated text #. from the mount service. -#: crates/pdfs-gui/src/app/main.rs:1229 +#: crates/pdfs-gui/src/app/main.rs:1230 #: crates/pdfs-gui/src/app/pages/takeout.rs:714 #, rust-format msgid "{what}: {detail}" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1252 +#: crates/pdfs-gui/src/app/main.rs:1253 msgid "You're offline" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1253 +#: crates/pdfs-gui/src/app/main.rs:1254 msgid "That's not there any more" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1254 +#: crates/pdfs-gui/src/app/main.rs:1255 msgid "You don't have access to that" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1255 +#: crates/pdfs-gui/src/app/main.rs:1256 msgid "Something changed this first" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1256 +#: crates/pdfs-gui/src/app/main.rs:1257 msgid "Your Proton Drive is full" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1343 +#: crates/pdfs-gui/src/app/main.rs:1344 msgid "Proton Drive for Linux" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1351 +#: crates/pdfs-gui/src/app/main.rs:1352 msgid "" "Files-on-demand Proton Drive for the Linux desktop.\n" "\n" @@ -148,23 +148,23 @@ msgid "" "AG." msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1356 +#: crates/pdfs-gui/src/app/main.rs:1357 msgid "Source Code" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1360 +#: crates/pdfs-gui/src/app/main.rs:1361 msgid "Proton Terms of Service" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1364 +#: crates/pdfs-gui/src/app/main.rs:1365 msgid "Proton Privacy Policy" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1369 +#: crates/pdfs-gui/src/app/main.rs:1370 msgid "Disclaimer" msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1373 +#: crates/pdfs-gui/src/app/main.rs:1374 msgid "" "This is an unofficial, community-built client. It is not affiliated with, " "endorsed by, or supported by Proton AG.\n" @@ -177,21 +177,21 @@ msgid "" "of any data you cannot afford to lose." msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1381 +#: crates/pdfs-gui/src/app/main.rs:1382 msgid "" "Places are named with data from GeoNames, licensed under CC BY 4.0." msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " "public domain." msgstr "" -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames udostępnionych na licencji CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -211,7 +211,7 @@ msgstr "" "www.naturalearthdata.com/\">Natural Earth, które należą do domeny " "publicznej." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the GeoNames, licensed under GeoNames, licenciados sob CC BY 4.0." -#: crates/pdfs-gui/src/app/main.rs:1389 +#: crates/pdfs-gui/src/app/main.rs:1390 msgid "" "The places map is drawn from Natural Earth land outlines and country borders, which are in the " @@ -207,7 +207,7 @@ msgstr "" "fronteiras de países do Natural Earth, que são de domínio público." -#: crates/pdfs-gui/src/app/main.rs:1397 +#: crates/pdfs-gui/src/app/main.rs:1398 msgid "" "The street map, when turned on, comes from OpenFreeMap in the