[fractal/wip/cdavis/use-filechoosernative: 135/135] event_actions: Use GtkFileChooserNative for saving




commit 748dd012823fb24345d365ddc1ce9376a0d18927
Author: Christopher Davis <christopherdavis gnome org>
Date:   Tue Aug 2 20:47:03 2022 -0400

    event_actions: Use GtkFileChooserNative for saving
    
    Fractal does not have a full view of the filesystem, which
    means that we can't use GtkFileChooserDialog if we want users
    to be able to save anywhere. Instead, we need to use the
    file chooser portal via GtkFileChooserNative.
    
    Closes https://gitlab.gnome.org/GNOME/fractal/-/issues/1064

 src/session/room/event_actions.rs | 37 +++++++++++++++++++------------------
 1 file changed, 19 insertions(+), 18 deletions(-)
---
diff --git a/src/session/room/event_actions.rs b/src/session/room/event_actions.rs
index debb7e607..6a5473678 100644
--- a/src/session/room/event_actions.rs
+++ b/src/session/room/event_actions.rs
@@ -266,32 +266,33 @@ where
                     }
                 };
 
-                let dialog = gtk::FileChooserDialog::new(
+                let dialog = gtk::FileChooserNative::new(
                     Some(&gettext("Save File")),
                     Some(&window),
                     gtk::FileChooserAction::Save,
-                    &[
-                        (&gettext("Save"), gtk::ResponseType::Accept),
-                        (&gettext("Cancel"), gtk::ResponseType::Cancel),
-                    ],
+                    Some(&gettext("Save")),
+                    Some(&gettext("Cancel")),
                 );
                 dialog.set_current_name(&filename);
 
-                let response = dialog.run_future().await;
-                if response == gtk::ResponseType::Accept {
-                    if let Some(file) = dialog.file() {
-                        file.replace_contents(
-                            &data,
-                            None,
-                            false,
-                            gio::FileCreateFlags::REPLACE_DESTINATION,
-                            gio::Cancellable::NONE,
-                        )
-                        .unwrap();
+                dialog.connect_response(clone!(@strong dialog => move |_, response| {
+                    if response == gtk::ResponseType::Accept {
+                        if let Some(file) = dialog.file() {
+                            file.replace_contents(
+                                &data,
+                                None,
+                                false,
+                                gio::FileCreateFlags::REPLACE_DESTINATION,
+                                gio::Cancellable::NONE,
+                            )
+                            .unwrap();
+                        }
                     }
-                }
 
-                dialog.close();
+                    dialog.destroy();
+                }));
+
+                dialog.show();
             })
         );
     }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]