filechooser portal: Make sure we can save
authorMatthias Clasen <mclasen@redhat.com>
Tue, 17 Jan 2017 19:08:38 +0000 (14:08 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 17 Jan 2017 19:10:50 +0000 (14:10 -0500)
Explicitly request files for saving to be writable, otherwise
we are at the mercy of the portal, which currently gets it wrong.

gtk/gtkfilechoosernativeportal.c

index 981e0d5471c42eb79bf9fdc0d4d324a7d776ccc9..3ab9b353853ae94a83f7a2009c6475333e567693 100644 (file)
@@ -53,6 +53,7 @@ typedef struct {
   char *portal_handle;
   guint portal_response_signal_id;
   gboolean modal;
+  gboolean writable;
 
   gboolean hidden;
 
@@ -304,6 +305,8 @@ show_portal_file_chooser (GtkFileChooserNative *self,
                            g_variant_new_string (self->cancel_label));
   g_variant_builder_add (&opt_builder, "{sv}", "modal",
                          g_variant_new_boolean (data->modal));
+  g_variant_builder_add (&opt_builder, "{sv}", "writable",
+                         g_variant_new_boolean (data->writable));
   g_variant_builder_add (&opt_builder, "{sv}", "filters", get_filters (GTK_FILE_CHOOSER (self)));
   if (GTK_FILE_CHOOSER_NATIVE (self)->current_name)
     g_variant_builder_add (&opt_builder, "{sv}", "current_name",
@@ -376,6 +379,7 @@ gtk_file_chooser_native_portal_show (GtkFileChooserNative *self)
   GDBusConnection *connection;
   GtkFileChooserAction action;
   const char *method_name;
+  gboolean writable;
 
   if (!gtk_should_use_portal ())
     return FALSE;
@@ -387,9 +391,15 @@ gtk_file_chooser_native_portal_show (GtkFileChooserNative *self)
   action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (self));
 
   if (action == GTK_FILE_CHOOSER_ACTION_OPEN)
-    method_name = "OpenFile";
+    {
+      method_name = "OpenFile";
+      writable = FALSE;
+    }
   else if (action == GTK_FILE_CHOOSER_ACTION_SAVE)
-    method_name = "SaveFile";
+    {
+      method_name = "SaveFile";
+      writable = FALSE;
+    }
   else
     {
       g_warning ("GTK_FILE_CHOOSER_ACTION_%s is not supported by GtkFileChooserNativePortal", action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ? "SELECT_FOLDER" : "CREATE_FOLDER");
@@ -401,6 +411,7 @@ gtk_file_chooser_native_portal_show (GtkFileChooserNative *self)
   data->connection = connection;
 
   data->method_name = method_name;
+  data->writable = writable;
 
   if (gtk_native_dialog_get_modal (GTK_NATIVE_DIALOG (self)))
     data->modal = TRUE;