diff options
author | Matthias Clasen <mclasen@redhat.com> | 2017-01-17 14:08:38 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2017-01-17 14:09:55 -0500 |
commit | 4875c689a0e826604953965ffdb71d8b82cae364 (patch) | |
tree | 5a9bcbb129b9e458f0d969bd82583505775146c0 /gtk/gtkfilechoosernativeportal.c | |
parent | 7a1b30f16e0fd94697c505e620a741c22600d8f7 (diff) | |
download | gtk+-4875c689a0e826604953965ffdb71d8b82cae364.tar.gz |
filechooser portal: Make sure we can save
Explicitly request files for saving to be writable, otherwise
we are at the mercy of the portal, which currently gets it wrong.
Diffstat (limited to 'gtk/gtkfilechoosernativeportal.c')
-rw-r--r-- | gtk/gtkfilechoosernativeportal.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/gtk/gtkfilechoosernativeportal.c b/gtk/gtkfilechoosernativeportal.c index 981e0d5471..3ab9b35385 100644 --- a/gtk/gtkfilechoosernativeportal.c +++ b/gtk/gtkfilechoosernativeportal.c @@ -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; |