diff --git a/gtk/gtkfilelauncher.c b/gtk/gtkfilelauncher.c index 1536883030..82fdd6ed31 100644 --- a/gtk/gtkfilelauncher.c +++ b/gtk/gtkfilelauncher.c @@ -433,7 +433,11 @@ gtk_file_launcher_launch (GtkFileLauncher *self, #ifndef G_OS_WIN32 if (gtk_openuri_portal_is_available ()) { - gtk_openuri_portal_open_async (self->file, FALSE, self->always_ask, parent, cancellable, open_done, task); + GtkOpenuriFlags flags = 0; + + if (self->always_ask) + flags |= GTK_OPENURI_FLAGS_ASK; + gtk_openuri_portal_open_async (self->file, FALSE, flags, parent, cancellable, open_done, task); } else #endif @@ -527,7 +531,9 @@ gtk_file_launcher_open_containing_folder (GtkFileLauncher *self, #ifndef G_OS_WIN32 if (gtk_openuri_portal_is_available ()) { - gtk_openuri_portal_open_async (self->file, TRUE, FALSE, parent, cancellable, open_done, task); + GtkOpenuriFlags flags = 0; + + gtk_openuri_portal_open_async (self->file, TRUE, flags, parent, cancellable, open_done, task); } else #endif diff --git a/gtk/gtkopenuriportal.c b/gtk/gtkopenuriportal.c index e41305acd5..3d5bc76c33 100644 --- a/gtk/gtkopenuriportal.c +++ b/gtk/gtkopenuriportal.c @@ -112,7 +112,7 @@ typedef struct { GFile *file; char *uri; gboolean open_folder; - gboolean always_ask; + GtkOpenuriFlags flags; GDBusConnection *connection; GCancellable *cancellable; GTask *task; @@ -276,7 +276,6 @@ open_uri (OpenUriData *data, { GFile *file = data->file; gboolean open_folder = data->open_folder; - gboolean always_ask = data->always_ask; GTask *task; GVariant *opts = NULL; int i; @@ -321,8 +320,13 @@ open_uri (OpenUriData *data, if (activation_token) g_variant_builder_add (&opt_builder, "{sv}", "activation_token", g_variant_new_string (activation_token)); - if (always_ask && !open_folder) - g_variant_builder_add (&opt_builder, "{sv}", "ask", g_variant_new_boolean (always_ask)); + if (!open_folder) + { + if (data->flags & GTK_OPENURI_FLAGS_ASK) + g_variant_builder_add (&opt_builder, "{sv}", "ask", g_variant_new_boolean (TRUE)); + if (data->flags & GTK_OPENURI_FLAGS_WRITABLE) + g_variant_builder_add (&opt_builder, "{sv}", "writable", g_variant_new_boolean (TRUE)); + } opts = g_variant_builder_end (&opt_builder); @@ -458,7 +462,7 @@ window_handle_exported (GtkWindow *window, void gtk_openuri_portal_open_async (GFile *file, gboolean open_folder, - gboolean always_ask, + GtkOpenuriFlags flags, GtkWindow *parent, GCancellable *cancellable, GAsyncReadyCallback callback, @@ -478,7 +482,7 @@ gtk_openuri_portal_open_async (GFile *file, data->parent = parent ? g_object_ref (parent) : NULL; data->file = g_object_ref (file); data->open_folder = open_folder; - data->always_ask = always_ask; + data->flags = flags; data->cancellable = cancellable ? g_object_ref (cancellable) : NULL; data->task = g_task_new (parent, cancellable, callback, user_data); g_task_set_check_cancellable (data->task, FALSE); diff --git a/gtk/gtkopenuriportal.h b/gtk/gtkopenuriportal.h index 9eb153fb8e..3236f46e68 100644 --- a/gtk/gtkopenuriportal.h +++ b/gtk/gtkopenuriportal.h @@ -28,9 +28,15 @@ G_BEGIN_DECLS gboolean gtk_openuri_portal_is_available (void); +typedef enum +{ + GTK_OPENURI_FLAGS_ASK = 1 << 0, + GTK_OPENURI_FLAGS_WRITABLE = 1 << 1, +} GtkOpenuriFlags; + void gtk_openuri_portal_open_async (GFile *file, gboolean open_folder, - gboolean always_ask, + GtkOpenuriFlags flags, GtkWindow *window, GCancellable *cancellable, GAsyncReadyCallback callback,