summaryrefslogtreecommitdiff
path: root/gtk/gtkfilechoosernativeportal.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2017-01-17 14:08:38 -0500
committerMatthias Clasen <mclasen@redhat.com>2017-01-17 14:09:55 -0500
commit4875c689a0e826604953965ffdb71d8b82cae364 (patch)
tree5a9bcbb129b9e458f0d969bd82583505775146c0 /gtk/gtkfilechoosernativeportal.c
parent7a1b30f16e0fd94697c505e620a741c22600d8f7 (diff)
downloadgtk+-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.c15
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;