From 1f74c214b694724ea3ad0fb60a3b98b036b3095e Mon Sep 17 00:00:00 2001 From: Aditya Garud <153842990+yashranaway@users.noreply.github.com> Date: Sat, 24 Oct 2026 13:13:13 +0000 Subject: [PATCH 1/3] feat(desktop-gpui): let Open File show the export in its folder --- apps/desktop-gpui/src/editor_export.rs | 2 +- apps/desktop-gpui/src/library.rs | 8 ++++ apps/desktop-gpui/src/settings_window.rs | 14 +++++++ apps/desktop-gpui/src/store.rs | 48 ++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) diff --git a/apps/desktop-gpui/src/editor_export.rs b/apps/desktop-gpui/src/editor_export.rs index 77498a4103d..b1af01050e5 100644 --- a/apps/desktop-gpui/src/editor_export.rs +++ b/apps/desktop-gpui/src/editor_export.rs @@ -2643,7 +2643,7 @@ impl EditorWindow { .label("Open File") .on_click(move |_, _, _| { if let Some(path) = &path { - library::open_path(path); + library::open_output(path); } }), ) diff --git a/apps/desktop-gpui/src/library.rs b/apps/desktop-gpui/src/library.rs index f45cef1cb7d..5da7029b5fd 100644 --- a/apps/desktop-gpui/src/library.rs +++ b/apps/desktop-gpui/src/library.rs @@ -626,6 +626,14 @@ pub fn open_path(path: &Path) { } } +/// Open File on a finished export, as chosen in General settings. +pub fn open_output(path: &Path) { + match crate::store::GeneralSettings::load().open_file_behaviour { + crate::store::OpenFileBehaviour::OpenFile => open_path(path), + crate::store::OpenFileBehaviour::ShowInFolder => reveal_in_folder(path), + } +} + pub fn reveal_in_folder(path: &Path) { let result = { #[cfg(target_os = "macos")] diff --git a/apps/desktop-gpui/src/settings_window.rs b/apps/desktop-gpui/src/settings_window.rs index 7f76cf3032a..7b84fa9bd1e 100644 --- a/apps/desktop-gpui/src/settings_window.rs +++ b/apps/desktop-gpui/src/settings_window.rs @@ -3234,6 +3234,20 @@ impl SettingsWindow { ) .into_any_element(), ), + self.setting_row( + "Open File behavior", + Some("Choose what Open File does for completed exports."), + self.segmented( + "open-file-behaviour", + self.settings.open_file_behaviour, + cx, + |this, value, cx| { + this.settings.open_file_behaviour = value; + this.write_enum("openFileBehaviour", value, cx); + }, + ) + .into_any_element(), + ), self.setting_row( "System notifications", Some( diff --git a/apps/desktop-gpui/src/store.rs b/apps/desktop-gpui/src/store.rs index a64d7ff9e92..132470caf69 100644 --- a/apps/desktop-gpui/src/store.rs +++ b/apps/desktop-gpui/src/store.rs @@ -763,6 +763,14 @@ settings_enum! { default = System } +settings_enum! { + OpenFileBehaviour { + OpenFile = "openFile", "Open the file"; + ShowInFolder = "showInFolder", "Show in folder"; + } + default = OpenFile +} + settings_enum! { /// `StudioRecordingQuality`, whose Rust default is `balanced`. StudioQuality { @@ -999,6 +1007,7 @@ pub const DEFAULT_PROJECT_NAME_TEMPLATE: &str = "{target_name} ({target_kind}) { #[derive(Debug, Clone, PartialEq)] pub struct GeneralSettings { pub theme: AppTheme, + pub open_file_behaviour: OpenFileBehaviour, pub hide_dock_icon: bool, pub enable_notifications: bool, pub instant_mode_max_resolution: u32, @@ -1329,6 +1338,7 @@ impl GeneralSettings { ) -> Self { Self { theme: enum_at(general, "theme"), + open_file_behaviour: enum_at(general, "openFileBehaviour"), hide_dock_icon: bool_at(general, "hideDockIcon", false), enable_notifications: bool_at(general, "enableNotifications", true), instant_mode_max_resolution: u32_at(general, "instantModeMaxResolution", 1920), @@ -3159,4 +3169,42 @@ mod tests { let cleared = GeneralSettings::from_sections(&general, &Map::new(), &Map::new()); assert!(cleared.excluded_windows.is_empty()); } + + #[test] + fn open_file_behaviour_defaults_for_old_settings() { + let general = serde_json::from_str(r#"{"theme":"dark","maxFps":30}"#).unwrap(); + let settings = GeneralSettings::from_sections(&general, &Map::new(), &Map::new()); + assert_eq!(settings.open_file_behaviour, OpenFileBehaviour::OpenFile); + assert_eq!(settings.theme, AppTheme::Dark); + assert_eq!( + GeneralSettings::default().open_file_behaviour, + OpenFileBehaviour::OpenFile + ); + } + + #[test] + fn open_file_behaviour_persists_across_store_reloads() { + let store = TempStore::new( + "open-file-behaviour", + Some(r#"{"general_settings":{"theme":"dark"}}"#), + ); + assert_eq!( + GeneralSettings::load().open_file_behaviour, + OpenFileBehaviour::OpenFile + ); + for (behaviour, json) in [ + (OpenFileBehaviour::ShowInFolder, "showInFolder"), + (OpenFileBehaviour::OpenFile, "openFile"), + ] { + assert_eq!(behaviour.as_json(), json); + assert!(set_store_setting( + GENERAL_SETTINGS, + "openFileBehaviour", + Value::String(behaviour.as_json().into()) + )); + assert_eq!(store.read()[GENERAL_SETTINGS]["openFileBehaviour"], json); + assert_eq!(GeneralSettings::load().open_file_behaviour, behaviour); + assert_eq!(GeneralSettings::load().theme, AppTheme::Dark); + } + } } From 6d14e05aad142fc47813da12e677e9835cc58f40 Mon Sep 17 00:00:00 2001 From: Aditya Garud <153842990+yashranaway@users.noreply.github.com> Date: Sat, 24 Oct 2026 13:53:58 +0000 Subject: [PATCH 2/3] chore(desktop-gpui): drop a comment that restates the code --- apps/desktop-gpui/src/library.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/desktop-gpui/src/library.rs b/apps/desktop-gpui/src/library.rs index 5da7029b5fd..1520be1a5eb 100644 --- a/apps/desktop-gpui/src/library.rs +++ b/apps/desktop-gpui/src/library.rs @@ -626,7 +626,6 @@ pub fn open_path(path: &Path) { } } -/// Open File on a finished export, as chosen in General settings. pub fn open_output(path: &Path) { match crate::store::GeneralSettings::load().open_file_behaviour { crate::store::OpenFileBehaviour::OpenFile => open_path(path), From 5f9e89f7a717c6049ec73436b63279d6a2cb3715 Mon Sep 17 00:00:00 2001 From: Aditya Garud <153842990+yashranaway@users.noreply.github.com> Date: Sun, 25 Oct 2026 07:19:00 +0000 Subject: [PATCH 3/3] fix(desktop-gpui): translate the open file choices --- apps/desktop-gpui/locales/de.toml | 2 ++ apps/desktop-gpui/locales/en.toml | 2 ++ apps/desktop-gpui/locales/es.toml | 2 ++ apps/desktop-gpui/locales/fr.toml | 2 ++ apps/desktop-gpui/locales/hi.toml | 2 ++ apps/desktop-gpui/locales/ja.toml | 2 ++ apps/desktop-gpui/locales/zh-CN.toml | 2 ++ apps/desktop-gpui/src/i18n/tests.rs | 8 ++++++++ apps/desktop-gpui/src/store.rs | 6 +++--- 9 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apps/desktop-gpui/locales/de.toml b/apps/desktop-gpui/locales/de.toml index ea412ad24cb..0d334ee34e9 100644 --- a/apps/desktop-gpui/locales/de.toml +++ b/apps/desktop-gpui/locales/de.toml @@ -107,6 +107,8 @@ label = "Systemmitteilungen" [settings.general.app.open_file] description = "Legen Sie fest, ob „Datei öffnen“ einen Export öffnet oder im Ordner anzeigt." label = "Schaltfläche „Datei öffnen“" +open = "Datei öffnen" +show_in_folder = "Im Ordner anzeigen" [settings.general.recording] description = "Verhalten während und nach der Aufnahme." diff --git a/apps/desktop-gpui/locales/en.toml b/apps/desktop-gpui/locales/en.toml index 59385bb92ba..a509ec401b9 100644 --- a/apps/desktop-gpui/locales/en.toml +++ b/apps/desktop-gpui/locales/en.toml @@ -109,6 +109,8 @@ label = "System notifications" [settings.general.app.open_file] description = "Choose whether Open File opens an export or shows it in its folder." label = "Open File button" +open = "Open the file" +show_in_folder = "Show in folder" [settings.general.recording] description = "Behaviour while you record and after you stop." diff --git a/apps/desktop-gpui/locales/es.toml b/apps/desktop-gpui/locales/es.toml index 91d5ce5dea8..5a8c4e55db0 100644 --- a/apps/desktop-gpui/locales/es.toml +++ b/apps/desktop-gpui/locales/es.toml @@ -107,6 +107,8 @@ label = "Notificaciones del sistema" [settings.general.app.open_file] description = "Elige si «Abrir archivo» abre una exportación o la muestra en su carpeta." label = "Botón «Abrir archivo»" +open = "Abrir archivo" +show_in_folder = "Mostrar en la carpeta" [settings.general.recording] description = "Comportamiento durante la grabación y al detenerla." diff --git a/apps/desktop-gpui/locales/fr.toml b/apps/desktop-gpui/locales/fr.toml index 255eae87b6d..07c5abfcd66 100644 --- a/apps/desktop-gpui/locales/fr.toml +++ b/apps/desktop-gpui/locales/fr.toml @@ -107,6 +107,8 @@ label = "Notifications système" [settings.general.app.open_file] description = "Choisissez si « Ouvrir le fichier » ouvre un export ou l'affiche dans son dossier." label = "Bouton « Ouvrir le fichier »" +open = "Ouvrir le fichier" +show_in_folder = "Afficher dans le dossier" [settings.general.recording] description = "Comportement pendant l'enregistrement et après l'arrêt." diff --git a/apps/desktop-gpui/locales/hi.toml b/apps/desktop-gpui/locales/hi.toml index 65824f1b610..b36810f0c20 100644 --- a/apps/desktop-gpui/locales/hi.toml +++ b/apps/desktop-gpui/locales/hi.toml @@ -107,6 +107,8 @@ label = "सिस्टम सूचनाएँ" [settings.general.app.open_file] description = "चुनें कि फ़ाइल खोलें बटन एक्सपोर्ट को खोले या उसे उसके फ़ोल्डर में दिखाए।" label = "फ़ाइल खोलें बटन" +open = "फ़ाइल खोलें" +show_in_folder = "फ़ोल्डर में दिखाएँ" [settings.general.recording] description = "रिकॉर्ड करते समय और रोकने के बाद का व्यवहार।" diff --git a/apps/desktop-gpui/locales/ja.toml b/apps/desktop-gpui/locales/ja.toml index 1e4df65b60e..29476e84ff9 100644 --- a/apps/desktop-gpui/locales/ja.toml +++ b/apps/desktop-gpui/locales/ja.toml @@ -107,6 +107,8 @@ label = "システム通知" [settings.general.app.open_file] description = "「ファイルを開く」で書き出したファイルを開くか、フォルダ内に表示するかを選びます。" label = "「ファイルを開く」ボタン" +open = "ファイルを開く" +show_in_folder = "フォルダに表示" [settings.general.recording] description = "録画中と録画停止後の動作。" diff --git a/apps/desktop-gpui/locales/zh-CN.toml b/apps/desktop-gpui/locales/zh-CN.toml index 1de39b3dbb9..6c1b09a1eaf 100644 --- a/apps/desktop-gpui/locales/zh-CN.toml +++ b/apps/desktop-gpui/locales/zh-CN.toml @@ -107,6 +107,8 @@ label = "系统通知" [settings.general.app.open_file] description = "选择“打开文件”是打开导出的文件,还是在所在文件夹中显示它。" label = "“打开文件”按钮" +open = "打开文件" +show_in_folder = "在文件夹中显示" [settings.general.recording] description = "录制期间及停止录制后的行为。" diff --git a/apps/desktop-gpui/src/i18n/tests.rs b/apps/desktop-gpui/src/i18n/tests.rs index 7c8d416f01a..325ba6e9ff5 100644 --- a/apps/desktop-gpui/src/i18n/tests.rs +++ b/apps/desktop-gpui/src/i18n/tests.rs @@ -125,6 +125,14 @@ fn english_matches_the_literals_it_replaced() { tr::settings::general::app::open_file::label(), "Open File button".into(), ), + ( + tr::settings::general::app::open_file::open(), + "Open the file".into(), + ), + ( + tr::settings::general::app::open_file::show_in_folder(), + "Show in folder".into(), + ), ( tr::settings::general::recording::description(), "Behaviour while you record and after you stop.".into(), diff --git a/apps/desktop-gpui/src/store.rs b/apps/desktop-gpui/src/store.rs index 90ac35a1dab..1e883dc56d8 100644 --- a/apps/desktop-gpui/src/store.rs +++ b/apps/desktop-gpui/src/store.rs @@ -711,7 +711,7 @@ macro_rules! settings_enum { ( $(#[$meta:meta])* $name:ident { - $($variant:ident = $json:literal, $label:literal;)+ + $($variant:ident = $json:literal, $label:expr;)+ } default = $default:ident ) => { @@ -765,8 +765,8 @@ settings_enum! { settings_enum! { OpenFileBehaviour { - OpenFile = "openFile", "Open the file"; - ShowInFolder = "showInFolder", "Show in folder"; + OpenFile = "openFile", crate::i18n::tr::settings::general::app::open_file::open(); + ShowInFolder = "showInFolder", crate::i18n::tr::settings::general::app::open_file::show_in_folder(); } default = OpenFile }