linux: Tweak file chooser dialogs (#14526)

apricotbucket28 created

Mostly some small tweaks to the file chooser dialogs.

Fixes https://github.com/zed-industries/zed/issues/14127 (along with the
`ashpd` update in https://github.com/zed-industries/zed/pull/14401)

Also included a fix
(https://github.com/zed-industries/zed/commit/971d67c994dd595454cc4bc92bdf33d9da30a31a)
for an issue that made multiple file chooser dialogs pop up on Wayland
when doing CTRL + O and quickly pressing the escape key.

Release Notes:

- N/A

Change summary

crates/gpui/src/platform/linux/platform.rs       | 18 ++++--------------
crates/gpui/src/platform/linux/wayland/client.rs |  3 +++
2 files changed, 7 insertions(+), 14 deletions(-)

Detailed changes

crates/gpui/src/platform/linux/platform.rs 🔗

@@ -264,24 +264,15 @@ impl<P: LinuxClient + 'static> Platform for P {
         let (done_tx, done_rx) = oneshot::channel();
         self.foreground_executor()
             .spawn(async move {
-                let title = if options.multiple {
-                    if !options.files {
-                        "Open folders"
-                    } else {
-                        "Open files"
-                    }
+                let title = if options.directories {
+                    "Open Folder"
                 } else {
-                    if !options.files {
-                        "Open folder"
-                    } else {
-                        "Open file"
-                    }
+                    "Open File"
                 };
 
                 let request = match OpenFileRequest::default()
                     .modal(true)
                     .title(title)
-                    .accept_label("Select")
                     .multiple(options.multiple)
                     .directory(options.directories)
                     .send()
@@ -322,8 +313,7 @@ impl<P: LinuxClient + 'static> Platform for P {
             .spawn(async move {
                 let request = match SaveFileRequest::default()
                     .modal(true)
-                    .title("Select new path")
-                    .accept_label("Accept")
+                    .title("Save File")
                     .current_folder(directory)
                     .expect("pathbuf should not be nul terminated")
                     .send()

crates/gpui/src/platform/linux/wayland/client.rs 🔗

@@ -1119,7 +1119,10 @@ impl Dispatch<wl_keyboard::WlKeyboard, ()> for WaylandClientStatePtr {
                 let keyboard_focused_window = get_window(&mut state, &surface.id());
                 state.keyboard_focused_window = None;
                 state.enter_token.take();
+                // Prevent keyboard events from repeating after opening e.g. a file chooser and closing it quickly
+                state.repeat.current_id += 1;
                 state.clipboard.set_offer(None);
+                state.clipboard.set_primary_offer(None);
 
                 if let Some(window) = keyboard_focused_window {
                     if let Some(ref mut compose) = state.compose_state {